예제 #1
0
    private void WeChatLogonCallback(WeChatUserData obj)
    {
        if (obj != null)
        {
            // Debug.Log(obj.nickname);

            ResultText.text = "微信登录结果:" + JsonUtility.ToJson(obj);
        }
        else
        {
            Debug.Log("取消登录!");
        }
    }
예제 #2
0
        /// <summary>
        /// 数据转换组装 入库数据
        /// </summary>
        /// <returns></returns>
        private UsersModel UserDataChange(WeChatUserData user, WeChatPhoneData phone, string session_key)
        {
            UsersModel resu = new UsersModel()
            {
                mobilephone  = phone.purePhoneNumber,
                nickname     = user.nickName,
                country      = user.country,
                city         = user.city,
                province     = user.province,
                appletopenid = user.openId,
                unionid      = user.unionId,
                session_key  = session_key,
                headimgurl   = user.avatarUrl,
                language     = user.language,
                sex          = Convert.ToInt32(!string.IsNullOrEmpty(user.gender) ? user.gender : "0"),
            };

            return(resu);
        }
예제 #3
0
    /// <summary>
    /// 请求微信用户公开的信息
    /// </summary>
    /// <param name="appid">应用id</param>
    /// <param name="secret">应用秘密指令</param>
    /// <param name="code">微信客户端返回的code</param>
    /// <returns></returns>
    IEnumerator GetWeChatUserData(string appid, string secret, string code)
    {
        //第一步:通过appid、secret、code去获取请求令牌以及openid;
        //code是用户在微信登录界面授权后返回的
        string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                     + appid + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";

        UnityWebRequest www = UnityWebRequest.Get(url);

        yield return(www.SendWebRequest());

        if (www.error != null)
        {
            Debug.Log("微信登录请求令牌失败:" + www.error);
        }
        else
        {
            Debug.Log("微信登录请求令牌成功:" + www.downloadHandler.text);
            WeChatData weChatData = JsonUtility.FromJson <WeChatData>(www.downloadHandler.text);
            if (weChatData == null)
            {
                yield break;
            }
            else
            {
                //第二步:请求个人微信公开的信息
                string getuserurl = "https://api.weixin.qq.com/sns/userinfo?access_token="
                                    + weChatData.access_token + "&openid=" + weChatData.openid;
                UnityWebRequest getuser = UnityWebRequest.Get(getuserurl);
                yield return(getuser.SendWebRequest());

                if (getuser.error != null)
                {
                    Debug.Log("向微信请求用户公开的信息,出现异常:" + getuser.error);
                }
                else
                {
                    //从json格式的数据中反序列化获取
                    WeChatUserData weChatUserData = JsonUtility.FromJson <WeChatUserData>(getuser.downloadHandler.text);
                    if (weChatUserData == null)
                    {
                        Debug.Log("error:" + "用户信息反序列化异常");
                        yield break;
                    }
                    else
                    {
                        Debug.Log("用户信息获取成功:" + getuser.downloadHandler.text);
                        Debug.Log("openid:" + weChatUserData.openid + ";nickname:" + weChatUserData.nickname);

                        //获取到微信的openid与昵称
                        string wxOpenID   = weChatUserData.openid;
                        string wxNickname = weChatUserData.nickname;
                        int    sex        = weChatUserData.sex;//1为男性,2为女性

                        //微信登录 外部要处理的事件
                        weChatLogonCallback(weChatUserData);
                    }
                }
            }
        }
    }
예제 #4
0
        /// <summary>
        /// 小程序用户信息
        /// </summary>
        /// <returns></returns>
        public string GetAppletUserInfo(string reqdata)
        {
            ResponseUserInfo res = new ResponseUserInfo();

            try
            {
                //RequestUserInfo reqstr = new RequestUserInfo();
                RequestUserInfo reqstr = JsonConvert.DeserializeObject <RequestUserInfo>(reqdata);                      //请求参数反序列化
                LogHelper.InfoLog("GetAppletUserInfo请求参数:" + reqdata);
                string          userdata  = AES_decrypt(reqstr.userEncryptedData, reqstr.session_key, reqstr.userIv);   //微信用户信息解密
                WeChatUserData  user      = JsonConvert.DeserializeObject <WeChatUserData>(userdata);
                string          phonedata = AES_decrypt(reqstr.phoneEncryptedData, reqstr.session_key, reqstr.phoneIv); //联系方式数据解密
                WeChatPhoneData phone     = JsonConvert.DeserializeObject <WeChatPhoneData>(phonedata);
                LogHelper.InfoLog("用户信息解密:" + userdata + ",联系方式数据解密:" + phonedata);

                UsersModel        userinfo = new UsersModel();
                List <UsersModel> users    = userdal.GetUserInfo(new UsersModel()
                {
                    unionid = reqstr.unionid
                });
                if (users.Count > 0)
                {
                    if (string.IsNullOrEmpty(users[0].mobilephone) || string.IsNullOrEmpty(users[0].appletopenid))//手机号或者小程序openid为空则需要修改数据库的用户信息
                    {
                        userdal.UpdateUserInfo(userinfo);
                    }
                    userinfo          = UserDataChange(user, phone, reqstr.session_key); //入库数据转换组装
                    res               = UserDataChange(userinfo);                        //输出数据转换组装
                    res.code          = 0;
                    res.msg           = "查询成功";
                    res.mobilephone   = users[0].mobilephone;
                    res.companyname   = users[0].companyname;
                    res.emcompany     = users[0].emcompany;
                    res.stockcompany  = users[0].stockcompany;
                    res.empowerStatus = (string.IsNullOrEmpty(users[0].emcompany) && string.IsNullOrEmpty(users[0].emcompany) ? 0 : 1);
                    res.oastatus      = users[0].status;
                }
                else//数据库没有当前用户去入库
                {
                    userinfo = UserDataChange(user, phone, reqstr.session_key);//入库数据转换组装
                    if (userdal.AddUser(userinfo))
                    {
                        res.code = 0;
                        res.msg  = "操作成功";
                    }
                    else
                    {
                        res.code = 10002;
                        res.msg  = "开小差了...";
                    }
                    res               = UserDataChange(userinfo);//输出数据转换组装
                    res.mobilephone   = "";
                    res.companyname   = "";
                    res.emcompany     = "";
                    res.stockcompany  = "";
                    res.empowerStatus = 0;
                    res.oastatus      = 0;
                }
            }
            catch (Exception ex)
            {
                res.code = 10003;
                res.msg  = "开小差了...";
                LogHelper.ErrorLog("错误信息:" + ex.StackTrace + "\r\n" + ex.Message + "\r\n请求参数:" + reqdata);
            }
            return(JsonConvert.SerializeObject(res));
        }