应用jfinal发送微信模板消息的一个bug

HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr(), jsonStr);

在用这个方法时,多次调用的时候会出现无法收到消息的情况(尤其是停用好久没有调用的时候)。查日志返回值是40001,鉴权失败。


评论区

你妹啊

2020-04-28 14:57

https://blog.csdn.net/dcwbi40268/article/details/102288408 这上面说的,如何运用到项目中。

要输就输给追求

2020-04-28 16:49

这个Api默认是有过期判断的呀。如果已经过期了,会重新获取一个AccessToken返回的呀。你说的这种情况,我觉得是其它服务器获取了AccessToken,导致了这个AccessToken失效

JFinal

2020-04-28 20:05

access token 值已被 jfinal weixin 按照微信官方缓存 7200 秒,只要没有别的地方使用你当前用的这个微信公众号的 appId 去申请 access token ,就不会有问题

所有出问题的都是 "多处" 共用了同一个 appId 去申请了 access token, 而 access token 永远只有最后一个申请到的值有效,以上所说的 "多处" 多数是下面的情况:
1:两个或多个开发者使用了同一个 appId 在同一时间内在开发
2:两个或多个程序使用同一个 appId 在运行

总之你记住, 同一个 appId 获取到的 access token 永远只有最后一个申请到的有效

这种问题不要找 jfinal weixin 的麻烦,jfinal weixin 开源六七年了, access token 是最基本的东西,jfinal weixin 不可能犯这种低级错误

多处共享同一个 appId 的场景,jfinal weixin 已经给了解决方案:
https://gitee.com/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/demo/WeixinConfig.java

注意看上面源码中的这两行代码:
String onLineTokenUrl = "http://localhost/weixin/api/getToken";
ApiConfigKit.setAccessTokenCache(new LocalTestTokenCache(onLineTokenUrl));

上面的配置就可以在本地开发时与线上共享同一个 appId 的 access token 值

JFinal

2020-04-28 20:08

为什么 jfinal weixin 要缓存 access token 值: 因为微信官方对 access token 值的申请每天有限额,用完就不能再申请

你妹啊

2020-04-28 21:51

@JFinal 已经解决了,解决方案是,把项目里用到access token的,都换成
AccessToken accessToken=AccessTokenApi.getAccessToken();
return accessToken.getAccessToken();
这个。
非常感谢你的回复与帮助。非常感谢!!!!!!!!

热门反馈

扫码入社