Esempio n. 1
0
        private async Task <bool> RefreshOneToken(string refreshToken, int logIndex)
        {
            var newRefreshToken = await requestHelper.GetRefreshTokenAsync(refreshToken);

            var oauthTokens = new RefreshOAuthTokenKey();

            oauthTokens.oldRefreshTokey = refreshToken;
            if (newRefreshToken == null)
            {
                Logger.Warn($"WxRef{logIndex}:刷新token错误=>返回null");
                return(false);
            }

            if (newRefreshToken.Value <string>("errcode") == null)
            {
                oauthTokens.AccessTokey  = newRefreshToken.Value <string>("access_token");
                oauthTokens.ExpriesTime  = newRefreshToken.Value <string>("expires_in");
                oauthTokens.RefreshTokey = newRefreshToken.Value <string>("refresh_token");
                oauthTokens.Uid          = newRefreshToken.Value <string>("openid");

                var userInfo = await requestHelper.GetUserInfoAsync(oauthTokens.AccessTokey, oauthTokens.Uid);

                if (userInfo != null && userInfo.Value <string>("errcode") == null)
                {
                    oauthTokens.MetaData      = userInfo.ToString();
                    oauthTokens.RefreshStatus = "Success";
                }
                else
                {
                    if (userInfo == null)
                    {
                        oauthTokens.RefreshStatus = "Success-errorMetaData";// Logger.Warn($"WxRef{logIndex}:获取用户信息错误=>返回null");
                    }
                    else if (userInfo.Value <string>("errcode") != null)
                    {
                        oauthTokens.RefreshStatus = $"Success-errorMetaData-{userInfo.Value<string>("errcode")}";//Logger.Warn($"WxRef{logIndex}:获取用户信息错误=>{userInfo.Value<string>("errcode")}");
                    }
                }
                oauthTokens.AuthorizationStatus = AuthStatusEnum.Authorized;
                return(await WxUserAuthRefreshDal.UpdateRefreshToken(oauthTokens));
            }
            else
            {
                var errorCode = newRefreshToken.Value <string>("errcode");
                oauthTokens.RefreshStatus       = errorCode;
                oauthTokens.AuthorizationStatus = AuthStatusEnum.UnAuthorized;
                //42007 用户修改微信密码,accesstoken和refreshtoken失效,需要重新授权
                //40030 不合法的refresh_token
                //42002 refresh超时
                if (errorCode == "42007" || errorCode == "40030" || errorCode == "42002") //下次不再刷新
                {
                    return(await WxUserAuthRefreshDal.UpdateRefreshToken(oauthTokens));
                }

                //42002 refresh_token超时
                Logger.Warn($"WxRef{logIndex}:刷新token错误=>errorCode:{errorCode}");
                return(false);
            }
        }
Esempio n. 2
0
        public void Execute(IJobExecutionContext context)
        {
            var index   = loggerIndex++;
            var success = 0;

            Logger.Info($"WxRef{index}:开始执行");
            var allAuth = WxUserAuthRefreshDal.GetAllRefreshUserAuth(WxExpainDay);

            if (allAuth != null && allAuth.Any())
            {
                var auths = allAuth.ToList();
                Logger.Info($"WxRef{index}:数据量=>{auths.Count}");

                var updateTask = new List <Task <bool> >(STEP);

                for (var i = 0; i < auths.Count; i += STEP)
                {
                    try
                    {
                        //每批间隔100ms
                        Thread.Sleep(20);
                        updateTask.Clear();
                        for (var j = 0; j < STEP && i + j < auths.Count; j++)
                        {
                            updateTask.Add(RefreshOneToken(auths[i + j].RefreshToken, index));
                        }

                        if (updateTask.Any())
                        {
                            AsyncHelper.RunSync(() => Task.WhenAll(updateTask));
                            for (int u = 0; u < updateTask.Count; u++)
                            {
                                var error = updateTask[u];
                                if (!error.Result)
                                {
                                    Logger.Warn($"WxRef{index}:更新错误=>OldRefreshToken:{auths[i + u].RefreshToken}");
                                }
                                else
                                {
                                    success++;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Info($"WxRef{index}:异常|i={i}|success={success}|{ex.ToString()}");
                    }
                }
                Logger.Info($"WxRef{index}:更新完成,总数:{auths.Count} 成功数:{success}");
            }
            Logger.Info($"WxRef{index}:执行完毕");
        }