獲取access_token時AppSecret錯誤或者access_token無效 invalid credential, access_token is invalid or not latest rid
阿新 • • 發佈:2020-08-26
最近微信推送訊息出現:獲取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); }
在此記錄下,避免以後出現相關的坑