1. 程式人生 > 實用技巧 >獲取access_token時AppSecret錯誤或者access_token無效 invalid credential, access_token is invalid or not latest rid

獲取access_token時AppSecret錯誤或者access_token無效 invalid credential, access_token is invalid or not latest rid

最近微信推送訊息出現:獲取access_token時AppSecret錯誤或者access_token無效 invalid credential, access_token is invalid or not latest rid, 這個access_token 無效的問題,之前訊息推送都是沒有問題的,

就最近一週定時器傳送訊息推送出現偶爾傳送成功,偶爾傳送提示這個access_token 的問題

前提:微信公眾號 AppId 和AppSecret 都沒有錯的情況下,之前都可以

造成這個問題的原因是:微信獲取access_token 介面呼叫量/上線次數 達到了頂峰 10000,如圖1所示:

如圖1 所示,呼叫介面次數達到上線,導致獲取access_token 失敗的問題;

於是查詢 code ,發現access_token 獲取居然是沒進行全域性快取記錄下來,直接每次呼叫介面獲取一次,如下程式碼所示:

 /// <summary>
        ///  獲取會員微資訊
        /// </summary>
        /// <param name="openid"></param>
        /// <returns></returns>
        public UserInfoJson GetUserInfo(string openid)
        {
            AccessTokenContainer.Register(WeiXinConfig.AppId, WeiXinConfig.AppSecret);
            
var token = AccessTokenContainer.GetAccessToken(WeiXinConfig.AppId); UserInfoJson result = null; try { result = UserApi.Info(token, openid); this._logHandle.LogInfo("GetUserInfo 獲取會員微信資訊:"+result.nickname); }
catch (Exception ex) { this._logHandle.LogException(ex, "GetUserInfo 獲取會員微信資訊失敗! openid: " + openid); this._logHandle.LogInfo("GetUserInfo 獲取會員微信資訊失敗:" +ex.Message); } return result; }

果然是個坑,於是將上述程式碼做修改,並且在全域性進行微信相關注冊快取操作

 /// <summary>
        ///  獲取會員微資訊
        /// </summary>
        /// <param name="openid"></param>
        /// <returns></returns>
        public UserInfoJson GetUserInfo(string openid)
        {
            //AccessTokenContainer.Register(WeiXinConfig.AppId, WeiXinConfig.AppSecret);
            //var token = AccessTokenContainer.GetAccessToken(WeiXinConfig.AppId);
            UserInfoJson result = null;
            try
            {
                result = UserApi.Info(WeiXinConfig.AppId, openid);
                this._logHandle.LogInfo("GetUserInfo 獲取會員微信資訊:"+result.nickname);
            }
            catch (Exception ex)
            {
                this._logHandle.LogException(ex, "GetUserInfo 獲取會員微信資訊失敗! openid: " + openid);
                this._logHandle.LogInfo("GetUserInfo 獲取會員微信資訊失敗:" +ex.Message);
            }
            return result;
        }

global.asax.cs

 protected void Application_Start()
        {
            // winxin
            var isGLobalDebug = true;//設定全域性 Debug 狀態
            var senparcSetting = SenparcSetting.BuildFromWebConfig(isGLobalDebug);
            var register = RegisterService.Start(senparcSetting).UseSenparcGlobal();//CO2NET全域性註冊,必須!
            //var register = RegisterService.Start(senparcSetting).UseSenparcGlobal();//必須 
            var isWeixinDebug = true;//設定微信 Debug 狀態
            var senparcWeixinSetting = SenparcWeixinSetting.BuildFromWebConfig(isWeixinDebug);
            register.UseSenparcWeixin(senparcWeixinSetting, senparcSetting);////微信全域性註冊,必須!



         
        }

Startup.cs

 public void Configuration(IAppBuilder app)
        {
            // 有關如何配置應用程式的詳細資訊,請訪問 http://go.microsoft.com/fwlink/?LinkID=316888
            ConfigureAuth(app);
            ConfigureJob(app);

            MemberService.RegisterSenparc(); 
        }

MemberService.cs

 //註冊微信 
        public  static void RegisterSenparc()
        {
            
            AccessTokenContainer.Register(WeiXinConfig.AppId, WeiXinConfig.AppSecret);
        }

在此記錄下,避免以後出現相關的坑