分享

微信消息推送,获取access_token时AppSecret错误或者access_token无效 invalid credential, access_token is invalid or not

 路人甲Java 2021-03-18

最近微信推送消息出现:获取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 获取居然是没进行全局缓存记录下来,直接每次调用接口获取一次,如下代码所示:

/// ///  获取会员微信息/// /// /// 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;         }

果然是个坑,于是将上述代码做修改,并且在全局进行微信相关注册缓存操作

/// ///  获取会员微信息/// /// /// 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()         {// winxinvar 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);         }

在此记录下,避免以后出现相关的坑

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多