最近微信推送消息出現:獲取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); }
在此記錄下,避免以后出現相關的坑