微信网页授权:解决微信重复回调问题

分类:
JAVA
标签:
微信开发
经验之谈
作者:
何鑫
创作时间:
2020/08/26 15:32:50

摘要:解决微信重复回调问题!

问题出现:

前几天,在做微信公众号网页授权相关功能时出现一个问题,当时的业务场景是需要在微信中获取用户授权,然后记录用户授权后的个人信息,做过微信开发的人应该知道,在获取用户授时,我们需要把回调地址传给微信,用户授权后回调到该地址,同时传入state,code信息,然后我们就可以利用code去获取access_token从而获取用户信息了,原本该功能在测试环境已验证通过了,但是上线后却出了问题,经测试在线上授权时,用code换取access_token时失败了,提示code已被使用。

问题解决:

奇了怪了,code明明授权后就是直接使用的,怎么会被用掉了呢?加上日志,继续测试。

我们用日志记录下回调回来的state和code,测试发现,回调接口被微信调了两次,而且两次带回的state和code都是一样的,从前端是无法感知到这个动作的,但是的确是被调用了两次,这样也就不难理解为什么会提示code已经被使用了:code在第一次回调后已经被使用,第二次回调相同的code当然无法使用。那么,为什么微信会回调两次呢?查阅官方文档,好像并没有相关说明。

百度搜索一下,给到的建议各种各样,大多数解决方案都会说在跳转微信授权的url中加上&connect_redirect=1,但是该参数也并没有在官方文档中找到,且部分人说无效,我们正想着要不要试一下此方案,却因为其他问题发现线上一部分表未及时同步本地的修改,其中一张表正是回调后记录信息用的,该表是新增的,没有同步到线上,我们突然有了一个猜想,是不是这个错误导致微信认为我们处理失败,从而又重新回调了一次?我们重新把表同步好,重试,果然,正常了!

问题反思:

粗心大意要不得!表的缺失导致程序出错,微信发现异常后重新回调了一次,导致了一个与原本程序错误不相干的错误,增加了查找难度。小伙伴们切记出现类似问题,先别急着加参数,赶紧先排查一下回调程序是否出错。


发表评论

温馨提示: 评论先审核后发布, 请勿发表不良言论

所有评论