V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lianxiaoyi
V2EX  ›  程序员

微信支付回调遇到一个诡异问题

  •  
  •   lianxiaoyi · 329 天前 · 2357 次点击
    这是一个创建于 329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每天 8 点 01 分或者 8 点 02 分总会有一笔已经在例如在 2 点时回调过的订单再次二次回调。每天都是这个时间。就挺懵逼的。

    12 条回复    2023-12-23 01:22:42 +08:00
    RedBeanIce
        1
    RedBeanIce  
       329 天前   ❤️ 1
    这种固定时间出现的问题,一般都是定时任务引起的。。
    (废话一句)
    IdJoel
        2
    IdJoel  
       329 天前   ❤️ 2
    回调的代码得幂等啊,你管他回调几遍呢
    klo424
        3
    klo424  
       329 天前   ❤️ 1
    微信回调的机制就是这样啊!不过微信文档写的一直不咋地,新版文档写的比老版还烂。

    以下是老版 V2 文档的内容:

    注意:

    1 、同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

    2 、后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信会判定本次通知失败,重新发送通知,直到成功为止(在通知一直不成功的情况下,微信总共会发起多次通知,通知频率为 15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m )这里通知发送可能会多台服务器进行发送,且发送时间可能会在几秒内,但微信不保证通知最终一定能成功。

    3 、在订单状态不明或者没有收到微信支付结果通知的情况下,建议商户主动调用微信支付 [查询订单 API] 确认订单状态。
    mmdsun
        4
    mmdsun  
       328 天前 via iPhone   ❤️ 2
    因为你第一次没有正常返回微信要求的响应吧,微信认为失败了就会重试。
    estk
        5
    estk  
       328 天前 via iPhone   ❤️ 1
    你没正确回复成功状态,对方会不定时尝试
    dapang1221
        6
    dapang1221  
       328 天前   ❤️ 1
    SUCCESS
    toby1902
        7
    toby1902  
       328 天前   ❤️ 2
    终于有人也遇到了,哈哈哈

    微信支付的一个坑:

    https://pay.weixin.qq.com/docs/merchant/development/interface-rules/signature-verification.html#%E5%BA%94%E5%AF%B9%E7%AD%BE%E5%90%8D%E6%8E%A2%E6%B5%8B%E6%B5%81%E9%87%8F

    应对签名探测流量
    为了确保商户系统的安全,微信支付会在极少数应答或通知回调中生成错误签名,以探测商户系统是否正确地验证了签名。

    商户系统不应对探测流量进行特殊处理,而应将其视为正常的应答或通知回调,并对其签名进行验证。 在排查问题时,您可以通过查看签名值中的 WECHATPAY/SIGNTEST/ 前缀快速判断是否为探测流量。所有用于探测目的的签名值都会包含此前缀。

    在验签失败的情况下,我们建议商户系统采取以下措施:

    如果应答的签名验证失败,商户系统应舍弃该应答。为了提高用户体验,商户系统可以适当地重试,或者让用户重新发起请求。微信支付不会针对重试请求发起探测。

    若通知回调的签名验证失败,商户系统应返回失败(即应答 4xx 或 5xx 的状态码),等待微信支付携带正确签名重新发送通知回调。
    lianxiaoyi
        8
    lianxiaoyi  
    OP
       328 天前
    @toby1902 666 感谢老哥解惑。我靠,我这几天一直懵逼,每天很准时的晚上 8 点 2 分莫名就会出现一个二次回调。
    lianxiaoyi
        9
    lianxiaoyi  
    OP
       328 天前
    @estk 都是正确回复了的,有位老哥已经解惑了
    lianxiaoyi
        10
    lianxiaoyi  
    OP
       328 天前
    @IdJoel 如果回调时,检测到订单异常,会有一个提醒通知。
    estk
        11
    estk  
       328 天前
    @lianxiaoyi #9
    那无所谓,只要你不要重复处理业务就行,通知就让它通知
    moshiyeap100
        12
    moshiyeap100  
       328 天前
    对于支付来讲,重复回调直接丢弃就行了。 (注意,如果在某些国家某些类型的支付如果有 REVERSE/REFUND 之类的,这类肯定不能简单的视为重复回调)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5365 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 08:24 · PVG 16:24 · LAX 00:24 · JFK 03:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.