首页 > V2EX > V2EX-微信网页授权的神奇 bug——要手动加延迟才能调通?
2022
06-23

V2EX-微信网页授权的神奇 bug——要手动加延迟才能调通?

Godykc:

background

  • 微信网页授权的官方文档 ==> 我是链接
  • 40029 代表微信网页授权授权码 code 不对
  • 40163 代表微信网页授权授权码 code 已使用

案发现场

这周开始联调本已跑通的某个微信小程序业务,遇到一个神奇的 bug ,网页授权的第二步,通过 code 换取网页授权 access_token一直报 40029 的错,关键还这个错在几个有小程序开发者身份的账号下不会出现。

对于这个错误本身,微信并没有给很具体的说明,仅仅提示 invalid code ,综合网上的说法,可能的原因有以下

  • 第一步中生成 code 所使用的 appid 和第二步中的 appid 不是同一个
  • 第一步获取到的授权码 code 本身就是错的

排查思路

第一种可能很好排查,双方打日志联调确认下就行,并且如果有问题的话,应该是所有请求都失败,不可能出现部分账号能走通的情况,因此排除嫌疑

第二种可能通过把回调链接改掉,不往正确的回调地址打,这样就能截获未消费的授权码 code,手动用这个未消费的 code 调第二步微信接口,是能正常返回的
并且,笔者观察到,线上日志中大量最终返回 40029 的调用记录中的 code ,再次手动发起请求,这时候报 40163 code been used ,与此同时,随便乱打一个 code 调第二步接口,就一直是 40029 ,并不会过渡到 40163

因此可以断定,日志中大量报 40029 的 code ,在调用之前,都是有效的,猜想:而微信那边存在某种延迟,在处理时直接报 40029 ,然后再次调用,就报 40163

验证猜想

既然怀疑是微信那边的延迟,那就很简单了,笔者这边也加延迟,直接延迟 5s ,果然,这时候第二步接口就正常调通

结尾

虽然找到了直接原因,但这个并不能作为解决方案,
试想一下,好好地函数调用里加一个线程 sleep ,谁能接受?
并且,笔者所维护的微信产品还有好几个,其他公众号的网页授权就完全没这个问题,
网上找了一圈,也没找到和笔者相似的案例,于是来此发帖

from V2EX-最新主题 https://ift.tt/aCZnbK1
V2EX-微信网页授权的神奇 bug——要手动加延迟才能调通? - 第1张  | 牛C网(NiuL.Net)
官方群组:https://t.me/niuav
牛C网:https://j1o.net
牛C网导航:https://niuc1.com
零九导航:https://09.gay

最后编辑:
作者:分享菌
这个作者貌似有点懒,什么都没有留下。

留下一个回复