微信支付 notify_url 回调重复通知

2020-09-09 22:02:56 +08:00
 ccsulzf0627

notify_url 的代码处理逻辑不能做登录态校验。
商户系统收到支付结果通知,需要在 5 秒内返回应答报文,否则微信支付认为通知失败,后续会重复发送通知。。
同样的通知可能会多次发送给商户系统,商户系统必须能够正确处理重复的通知。如果已处理过,直接给微信支付返回成功。
商户侧对微信支付回调 IP 有防火墙策略限制的,需要对以下 IP 段开通白名单:。

101.226.103.0/25 、140.207.54.0/25 、103.7.30.0/25 (需要添加新网段 203.205.219.128/25 )、183.3.234.0/25 、58.251.80.0/25 。 。

现状: 我可以收到通知内容。
但是我返回 <xml><return_code></return_code><return_msg></return_msg></xml>
微信没反应一样,还是继续给我通知

有遇到过这样的问题嘛?讨论一下

2710 次点击
所在节点    问与答
13 条回复
ming
2020-09-09 22:15:51 +08:00
微信让你回:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
ccsulzf0627
2020-09-09 22:34:00 +08:00
@ming 老哥,我上面描述错误了,是像你这么写的,res.setHeader('Content-Type','text/xml'); 我在 Postman 中测试也是返回的 XML 格式,就是不行,一直重复通知
Seanfuck
2020-09-09 22:42:27 +08:00
我遇到未支付的订单过几个月会发个支付成功的通知,实际上没有支付,不知道怎么回事,为了清掉这条记录?
ccsulzf0627
2020-09-09 22:49:01 +08:00
@Seanfuck 老哥,你在哪里监听支付回调的?
ccsulzf0627
2020-09-09 23:04:28 +08:00
已解决:
const result = `<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>`;
res.writeHead(200, {'Content-Type': 'text/xml'});
res.end(result)
aaronlam
2020-09-10 00:00:37 +08:00
@ccsulzf0627 最后问题的原因,还是因为一楼说的 xml 的内容不对吗?
dusu
2020-09-10 00:58:08 +08:00
可能微信回调坑!楼主可以检查一下,微信走的 http 回调,竟然不支持返回 content-encoding: gzip/br,曾经为了这个问题折腾了好几天,最后单独让 nginx 为这个接口原文返回。

大写的服。

只能说贵微信,真是神一样的团队。
also24
2020-09-10 01:15:07 +08:00
@dusu #7
支持什么压缩方式,不应该在请求的 Accept-Encoding 里就给出了么?
还是说微信在回调请求的时候,直接发送了自己实际不支持的编码方式?

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Encoding
kop1989
2020-09-10 06:39:45 +08:00
5 秒内返回的问题,确认收到支付回调,完成验真,写入缓存之后就可以返回 success 了。没必要和业务完全强关联
yuzo555
2020-09-10 06:53:39 +08:00
@dusu 你的服务端应该要根据客户端的 Accept-Encoding 来处理输出方式,而不是你在代码里面压缩输出然后手动设置 Content-Encoding,这是危险的操作。
ccsulzf0627
2020-09-10 08:44:30 +08:00
@kop1989 我是在小程序中,要点击完成才能触发回调 success 函数,我要有个支付成功的动作才行,所以用 notify_url 来完成
kop1989
2020-09-10 09:03:52 +08:00
@ccsulzf0627 #11 也就是说你返回回调 success 是由界面 ui 的 button 触发的?这个逻辑完全做歪了吧。
ccsulzf0627
2020-09-10 13:42:13 +08:00
@kop1989 小程序自己给了个方法,你先看看文档

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

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

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

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

© 2021 V2EX