Пример #1
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }