微信网页授权的神奇 bug要手动加延迟才能调通? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
请用平和的语言准确描述你所遇到的问题
厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
Godykc
V2EX    全球工单系统

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

  •  
  •   Godykc 2022-06-23 10:47:10 +08:00 1687 次点击
    这是一个创建于 1253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ,谁能接受?
    并且,笔者所维护的微信产品还有好几个,其他公众号的网页授权就完全没这个问题,
    网上找了一圈,也没找到和笔者相似的案例,于是来此发帖

    1 条回复    2022-06-23 11:37:56 +08:00
    hm20062006ok
        1
    hm20062006ok  
       2022-06-23 11:37:56 +08:00
    你的 code 怎么来的?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5205 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 05:56 PVG 13:56 LAX 21:56 JFK 00:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86