加载中…

access_token 失效及如何解决

在调用微信公众号 / 小程序相关接口的时候,如果返回如下错误,则说明当前的 access_token 是错误的: ```json { "errcode": 40001, "errmsg": "invalid credential, access_token is invalid or not latest rid: 5f38a263-3d4c3ccd-01e705f7" } ``` 根据上面的字面提示很容易理解这个错误的原因,或者也可以查询微信官方开发文档上对于 40001 错误码的说明。 产生上面的情况,一般有下面两个原因,请逐一进行排查: ## appID 对应的 secret 改变了 “api工厂” 保存的 access_token 是通过您在后台配置的 appID 和 secret 获取的,所以如果提示 access_token 错误,那么第一个步骤就是先排查后台配置的 secret 是不是在小程序的公众号后台被别人重置掉了,重置掉以后,没有在 “api工厂” 的后台配置新的 secret,导致 “api工厂” 还是在用之前老的 secret 去获取 access_token ,导致一直获取失败。 您可以前往“api工厂”后台,左侧菜单“微信设置” --> “小程序设置” / “公众号设置”,点击 “配置 Appid / secret” 按钮,弹出的窗口啥都不用修改,直接点击 “确定” 按钮。如果提示无法获取 access_token ,那么就可以确认是 secret 被修改了,填写正确的 secret 即可解决问题。 如果点击 “确定” 按钮的时候,没有提示错误信息,那么基本上可以排除是因为 secret 被重置的原因,那么请往下看另一个原因。 ## 您可以在别的地方获取了access_token 微信的 access_token 只能在一个地方获取,假如说,你在另一个地方(除了“api工厂”以外的地方)通过appID和secret去获取了access_token,那么api工厂上的access_token会立即失效。 同理,“api工厂”这边通过appID和secret去获取了access_token,那么你在其他地方之前获取到的那个 access_token 也会立即失效。 所以请确认,您是否存在在多个地方使用 appID 和 secret 去获取 access_token 的情况,如果存在,那么,只需要保证在同一个地方获取 access_token 即可解决问题。 **但是我有自己的其他业务,也需要使用到 **`**access_token**`**,应该如何复用?** api工厂会根据微信的要求,在有效期即将到达之前重新刷新 `access_token`,所以你可以直接调用api工厂的后台api接口,直接读取当前有效的 `access_token`直接进行使用,因为 `access_token`微信规定的有效期是2小时,所以你需要自己定期来拉取,同时需要在你自己的业务端,发现 `access_token`失效的情况下,重新来获取一个新的。 接口地址:https://common.apifm.com/apifmUser/wxMiniprogramSet/list POST 方式调用 请求头需要添加 `X-TOKEN` 或者 `Authorization` 如果您是在自己服务器,自己电脑,云开发等安全保密环境下(**非小程序、H5前端等非安全环境**),建议使用 `Authorization` 方式: [《Basic Authentication 免登陆调用后台接口》](https://www.yuque.com/apifm/doc/guzeid)