private void WeChatLogonCallback(WeChatUserData obj) { if (obj != null) { // Debug.Log(obj.nickname); ResultText.text = "微信登录结果:" + JsonUtility.ToJson(obj); } else { Debug.Log("取消登录!"); } }
/// <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); }
/// <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); } } } } }
/// <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)); }