发送订阅消息或模板消息时而报错:48001, api unauthorized
前面代码中获取稳定版 access_token,将小程序和公众号的接口都替换了,并存储到 redis 缓冲中。
之后就时不时的出现小程序的订阅消息发送不成功的情况,查看日志会发现,发送返回:
{"errcode":48001,"errmsg":"api unauthorized rid: 64a64dcd-7d747476-7ba87c84"}
使用 api unauthorized
搜索都是提示 code 换 openid 时的报错,发送订阅消息 文档里也没有 48001 这一类型的错误码。
从出现的情况分析,小程序的订阅消息出现时有时无(一段时间内可以收到,一段时间内可能就不可以)的情况,而公众号的模板消息却从未发生过类似的情况。
通过 redis 连接工具查看两个 access_token
的存储情况。小程序的 access_token
存储为 laravel:access_token_mini
,公众号的 access_token 这里存储为 laravel:access_token_js
。检查发现 access_token_js
不存在,但公众号的模板消息却使用正常。
再次检查公众号获取 access_token
的代码,发现公众号的 access_token
也存储到了 access_token_mini
。每次查询 access_token_js
都不存在,则调接口获取,所以公众号的调用凭证使用没有问题。但当公众号的模板消息调用后,小程序的调用凭证就会被污染,且因为没有过期,会被当成小程序的调用凭证正常调用。这就出现了 48001, api unauthorized
的情况。
修复代码后提交测试,好了。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。