/// <summary> /// 调取微信用户,更新或者保存本地用户 /// </summary> /// <param name="wXAccount">微信用户</param> /// <returns></returns> internal AccountModel SaveOrdUpdateAccount(WXAccountInfo wXAccount) { AccountModel accountCard = null; if (wXAccount.OpenId != null) { var filter = Builders <AccountModel> .Filter.And(Builders <AccountModel> .Filter.Eq(x => x.OpenID, wXAccount.OpenId)); var update = Builders <AccountModel> .Update.Set(x => x.LastChangeTime, DateTime.Now); accountCard = collection.FindOneAndUpdate <AccountModel>(filter, update); if (accountCard == null) { //string avatarUrl = DownloadAvatar(wXAccount.AvatarUrl, wXAccount.OpenId); string avatarUrl = wXAccount.AvatarUrl; accountCard = new AccountModel() { OpenID = wXAccount.OpenId, AccountName = wXAccount.NickName, Gender = wXAccount.GetGender, AccountAvatar = avatarUrl, CreateTime = DateTime.Now, LastChangeTime = DateTime.Now }; collection.InsertOne(accountCard); } } return(accountCard); }
/// <summary> /// 调取微信用户,更新或者保存本地用户 /// </summary> /// <param name="uniacid">商户识别ID</param> /// <param name="wXAccount">微信用户</param> /// <returns></returns> internal AccountModel SaveOrdUpdateAccount(string uniacid, WXAccountInfo wXAccount) { Console.WriteLine("在SaveOrdUpdateAccount"); AccountModel accountCard = null; if (wXAccount.OpenId != null) { var filter = Builders <AccountModel> .Filter.Eq(x => x.OpenID, wXAccount.OpenId) & Builders <AccountModel> .Filter.Eq(x => x.uniacid, uniacid); var update = Builders <AccountModel> .Update.Set(x => x.LastChangeTime, DateTime.Now); accountCard = collection.FindOneAndUpdate <AccountModel>(filter, update); Console.WriteLine($"在SaveOrdUpdateAccount{accountCard == null}"); if (accountCard == null) { //string avatarUrl = DownloadAvatar(wXAccount.AvatarUrl, wXAccount.OpenId); var avatarUrl = wXAccount.AvatarUrl; accountCard = new AccountModel() { uniacid = uniacid, OpenID = wXAccount.OpenId, AccountName = wXAccount.NickName, Gender = wXAccount.GetGender, AccountAvatar = avatarUrl, CreateTime = DateTime.Now, LastChangeTime = DateTime.Now }; collection.InsertOne(accountCard); } } return(accountCard); }
/// <summary> /// 获取用户信息——包括微擎方式 /// </summary> /// <param name="code"></param> /// <param name="iv"></param> /// <param name="encryptedData"></param> /// <param name="appID"></param> /// <param name="appSecret"></param> /// <returns></returns> public static WXAccountInfo ProcessRequest(string code, string iv, string encryptedData, string appID = WxPayConfig.APPID, string appSecret = WxPayConfig.APPSECRET) { Console.WriteLine("进入登陆:&&&"); string grant_type = "authorization_code"; WXAccountInfo userInfo = new WXAccountInfo(); //向微信服务端 使用登录凭证 code 获取 session_key 和 openid string url = $"https://api.weixin.qq.com/sns/jscode2session?appid={appID}&secret={appSecret}&js_code={code}&grant_type={grant_type}"; string type = "utf-8"; WXAccountInfoGetter GetUsersHelper = new WXAccountInfoGetter(); string j = WXAccountInfoGetter.GetUrltoHtml(url, type);//获取微信服务器返回字符串 Console.WriteLine("登陆返回参数:" + j); //将字符串转换为json格式 JObject jo = (JObject)JsonConvert.DeserializeObject(j); WXResult res = new WXResult(); try { //微信服务器验证成功 res.openid = jo["openid"].ToString(); res.session_key = jo["session_key"].ToString(); } catch (Exception) { //微信服务器验证失败 res.errcode = jo["errcode"].ToString(); res.errmsg = jo["errmsg"].ToString(); } if (!string.IsNullOrEmpty(res.openid)) { //用户数据解密 WXAccountInfoGetter.AesIV = iv; WXAccountInfoGetter.AesKey = res.session_key; Console.WriteLine("iv:{0},aeskey:{1}", iv, res.session_key); string result = GetUsersHelper.AESDecrypt(encryptedData); Console.WriteLine("result:" + result); //存储用户数据 JObject _usrInfo = (JObject)JsonConvert.DeserializeObject(result); userInfo.OpenId = _usrInfo["openId"].ToString(); Console.WriteLine("openId:" + userInfo.OpenId); try //部分验证返回值中没有unionId { userInfo.UnionId = _usrInfo["unionId"].ToString(); } catch (Exception) { userInfo.UnionId = "unionId"; } Console.WriteLine("unionId:" + userInfo.UnionId); userInfo.NickName = _usrInfo["nickName"].ToString(); userInfo.Gender = Convert.ToInt16(_usrInfo["gender"].ToString()); userInfo.City = _usrInfo["city"].ToString(); userInfo.Province = _usrInfo["province"].ToString(); userInfo.Country = _usrInfo["country"].ToString(); userInfo.AvatarUrl = _usrInfo["avatarUrl"].ToString(); object watermark = _usrInfo["watermark"].ToString(); object appid = _usrInfo["watermark"]["appid"].ToString(); object timestamp = _usrInfo["watermark"]["timestamp"].ToString(); } return(userInfo); }