小程序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)如果无法满足申请中控服务器,则可再申请一个小程序来作为测试使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值