这周开始联调本已跑通的某个微信小程序业务,遇到一个神奇的 bug ,网页授权的第二步,通过 code 换取网页授权 access_token一直报 40029 的错,关键还这个错在几个有小程序开发者身份的账号下不会出现。
对于这个错误本身,微信并没有给很具体的说明,仅仅提示 invalid code ,综合网上的说法,可能的原因有以下
第一种可能很好排查,双方打日志联调确认下就行,并且如果有问题的话,应该是所有请求都失败,不可能出现部分账号能走通的情况,因此排除嫌疑
第二种可能通过把回调链接改掉,不往正确的回调地址打,这样就能截获未消费的授权码 code,手动用这个未消费的 code 调第二步微信接口,是能正常返回的 并且,笔者观察到,线上日志中大量最终返回 40029 的调用记录中的 code ,再次手动发起请求,这时候报 40163 code been used ,与此同时,随便乱打一个 code 调第二步接口,就一直是 40029 ,并不会过渡到 40163
因此可以断定,日志中大量报 40029 的 code ,在调用之前,都是有效的,猜想:而微信那边存在某种延迟,在处理时直接报 40029 ,然后再次调用,就报 40163
既然怀疑是微信那边的延迟,那就很简单了,笔者这边也加延迟,直接延迟 5s ,果然,这时候第二步接口就正常调通
虽然找到了直接原因,但这个并不能作为解决方案,
试想一下,好好地函数调用里加一个线程 sleep ,谁能接受?
并且,笔者所维护的微信产品还有好几个,其他公众号的网页授权就完全没这个问题,
网上找了一圈,也没找到和笔者相似的案例,于是来此发帖
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.