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

140 天前
 lianxiaoyi

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

2077 次点击
所在节点    程序员
12 条回复
RedBeanIce
140 天前
这种固定时间出现的问题,一般都是定时任务引起的。。
(废话一句)
IdJoel
140 天前
回调的代码得幂等啊,你管他回调几遍呢
klo424
140 天前
微信回调的机制就是这样啊!不过微信文档写的一直不咋地,新版文档写的比老版还烂。

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

注意:

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

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

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

微信支付的一个坑:

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
140 天前
@toby1902 666 感谢老哥解惑。我靠,我这几天一直懵逼,每天很准时的晚上 8 点 2 分莫名就会出现一个二次回调。
lianxiaoyi
140 天前
@estk 都是正确回复了的,有位老哥已经解惑了
lianxiaoyi
140 天前
@IdJoel 如果回调时,检测到订单异常,会有一个提醒通知。
estk
140 天前
@lianxiaoyi #9
那无所谓,只要你不要重复处理业务就行,通知就让它通知
moshiyeap100
139 天前
对于支付来讲,重复回调直接丢弃就行了。 (注意,如果在某些国家某些类型的支付如果有 REVERSE/REFUND 之类的,这类肯定不能简单的视为重复回调)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1002640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX