weixin4j
weixin4j copied to clipboard
预授权码已经被授权过,不能重复使用,请重新从源头页面进入授权页。
使用 com.foxinmy.weixin4j.mp.WeixinComponentProxy.getPreComponentTicket(String)
获取预授权码,获得的这个预授权码只能授权一次,但是它被缓存了,第二次授权就会报错,错误提示如下:
- 对于已经授权的公众号错误提示为“授权失败 系统错误”;
- 对于尚未授权的公众号错误提示为“预授权码已经被授权过,不能重复使用,请重新从源头页面进入授权页。”。
注意:如果是同一个公众号使用同一个预授权码进行多次授权不会报错;但是同一个预授权码被一个公众号授权使用了,再换个公众号试图授权就会有此 issue 所描述的错误。
改用直接调用 com.foxinmy.weixin4j.mp.component.WeixinComponentPreCodeCreator.create()
可以解决:
final TokenManager componentTokenManager = weixinComponentProxy.component().getTokenManager();
final WeixinComponentPreCodeCreator weixinComponentPreCodeCreator
= new WeixinComponentPreCodeCreator(
componentTokenManager,
componentId
);
final Token token = weixinComponentPreCodeCreator.create();
preAuthCode = token.getAccessToken();
这个不是问题吧? 保证同一个授权码被同一个公众号使用就好?
实际上com.foxinmy.weixin4j.mp.WeixinComponentProxy.getPreComponentTicket(String)
获取到的pre_auth_code
是一段时间expires_in
内总是一样的。参考:授权流程技术说明。
至于同一个公众号的多次授权是否能使用同一个pre_auth_code
,我不太确定。但是即使是
,也不能解决问题,因为在获取pre_auth_code
时,公众号所有者授权前,并不知道即将要授权的公众号的任何信息。