微信小程序开发中getAccessToken限制问题以及解决方案

364 阅读3分钟

AppSecret是账号使用后台API接口的小程序密钥,请开发者妥善保管,避免因泄露造成账号被其它人冒用等风险。如长期无AppSecret的使用需求,开发者可以使用管理员账号登录小程序平台,在“开发-开发管理”中对AppSeceret进行冻结,提高账号的安全性。AppSecret冻结后,开发者无法使用AppSecret获取Access token(接口返回错误码40243),不影响账号基本功能的正常使用,不影响通过第三方授权调用后台接口,不影响云开发调用后台接口。开发者可以随时使用管理员账号登录小程序平台,在“开发-开发管理”中对AppSecret进行解冻。Access token有效期是两个小时。

微信API文档上有讲:

①getAccessToken接口生成的access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效

②每天有调用次数限制,据说是2000次,具体多少就不知道了。本需求需要保证每天能正常获取和使用getAccessToken。

微信官方文档:获取接口调用凭据 | 微信开放文档

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.使用稳定版本token

使用方式:获取稳定版接口调用凭据 | 微信开放文档

2.使用统一的token管理

文档地址:获取接口调用凭据 | 微信开放文档

3.新建一个测试小程序

重新创建一个测试的小程序,专门用来测试卡发环境。

4.重制接口请求用量

官方文档:重置API调用次数 | 微信开放文档

5.使用云开发免维护 access_token 的场景

如果使用了云托管云开发,可以免维护 access_token,免鉴权直接调用服务端接口。

云托管:

  • 通过微信令牌免维护 access_token 发起服务端调用,在调用微信服务端接口时,将 URL 上的 access_token 参数改成 cloudbase_access_token,值通过微信令牌取得。
  • 调用微信支付也可以免维护鉴权和支付证书信息,避免证书泄漏风险。

云开发:

  • 通过云开发云调用免维护 access_token 调用。
  • 调用微信支付也可以免维护鉴权和支付证书信息,避免证书泄漏风险。

在线调试

开发者可以使用网页调试工具调试该接口