多项目使用微信公众号access_token,每个项目的access_token不共享,就会:
{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: "}
"重复获取将导致上次获取的 access_token 失效。建议开发者使用中控服务器统一获取和刷新 access_token"
文档:https://developers.weixin.qq.com/doc/oplatform/developers/dev/AccessToken.html
工作这么多年,还没仔细看过微信文档。
搞中控服务器麻烦,也懒着换成 reids 。
扩展包用的: w7corp/easywechat
默认用文件的缓存,保证用同个文件就行。
$app->getAccessToken()->getKey()
$app->getAccessToken()->getToken()
// 不同版本,方法不一样
$app->base->getAccessToken()->getTokenKey()
$app->base->getAccessToken()->getToken()
一开始我以为扩展包的坑,一个个排查,还去对比缓存文件的 token。
最后一看微信文档,我擦 结案了。
1
jackleo120 23 小时 21 分钟前 之前注意过这个问题,不过是因为测试环境和正式环境他们的 appid 都是同一个。。
后来仔细查阅文档,发现微信文档是提供解决办法的,不需要中控服务器,就是直接 5 分钟内刷一下就可以了。 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getStableAccessToken.html 根据以上特性,为减少其他开发者构建中控服务的开发成本,在普通调用模式下,平台建议开发者将每次获取的 access_token 在本地建立中心化存储使用,无须考虑并行调用接口时导致意外情况发生,仅须保证至少每 5 分钟发起一次调用并覆盖本地存储。同时,该方案也支持各业务独立部署使用,即无须中心化存储也可以保证服务正常运行; |
2
bankroft 22 小时 5 分钟前 可以使用 stable access token
|
3
jstony 11 小时 17 分钟前
本地自建了一个 token 代理,各个系统都从代理获取当前可用 token ,代理会检查 token 有效期,接近过期会自动更新,已经用了很多年。
|
4
lyxxxh2 OP @jackleo120
你这个更简单,我才知道有这个。 |
5
lyxxxh2 OP w7corp/[email protected] 还不支持'use_stable_access_token' => true`,注意升级。
https://github.com/w7corp/easywechat/blob/6.4.0/src/OfficialAccount/AccessToken.php |
6
jackleo120 12 分钟前
@lyxxxh2 直接手动造一个请求就可以了。他 5 分钟内的 token 都可以用的,可以平滑度过的。还不用管测试还是正式环境。。
|