小程序access_token未超时报失效:40001的原因

前言:背景是由于需要实时生成小程序二维码,使用接口B。我们需要获取小程序的access_token,但是获取access_token的请求次数是有限制的(一天2000次),为了避免超出这个限制,后台一般做法是使用redis限时(一般小于7200秒)保存。但是发现时不时出现小程序access_token未超时报失效:40001的错误

接口B文档:wxacode.getUnlimited | 微信开放文档

获取access_token接口文档:auth.getAccessToken | 微信开放文档

一、问题原因

后续找到原因,由于笔者是在2个环境下使用小程序接口,并没有做所谓的中控服务器区分。在测试请求小程序access_token时,正式环境的access_token就会在5分钟内失效,导致5分钟后通过access_token请求小程序接口会报失效:40001,反之亦然。

备注:access_token 的存储与更新

  • access_token 的存储至少要保留 512 个字符空间;
  • access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效;
  • 建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;
  • access_token 的有效期通过返回的 expires_in 来传达,目前是7200秒之内的值,中控服务器需要根据这个有效时间提前去刷新。在刷新过程中,中控服务器可对外继续输出的老 access_token,此时公众平台后台会保证在5分钟内,新老 access_token 都可用,这保证了第三方业务的平滑过渡;
  • access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新 access_token 的接口,这样便于业务服务器在API调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程

 二、问题解决

(1)使用中控服务器,说白了就是共用一台服务器的redis来保存缓存。这是最简便可行的方法。

(2)如果无法满足申请中控服务器,则可再申请一个小程序来作为测试使用

猜你喜欢

转载自blog.csdn.net/qq_27295403/article/details/119217381