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>
微信没反应一样,还是继续给我通知
有遇到过这样的问题嘛?讨论一下
1
ming 2020-09-09 22:15:51 +08:00 1
微信让你回:
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml> |
2
ccsulzf0627 OP @ming 老哥,我上面描述错误了,是像你这么写的,res.setHeader('Content-Type','text/xml'); 我在 Postman 中测试也是返回的 XML 格式,就是不行,一直重复通知
|
3
Seanfuck 2020-09-09 22:42:27 +08:00
我遇到未支付的订单过几个月会发个支付成功的通知,实际上没有支付,不知道怎么回事,为了清掉这条记录?
|
4
ccsulzf0627 OP @Seanfuck 老哥,你在哪里监听支付回调的?
|
5
ccsulzf0627 OP 已解决:
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) |
6
aaronlam 2020-09-10 00:00:37 +08:00
@ccsulzf0627 最后问题的原因,还是因为一楼说的 xml 的内容不对吗?
|
7
dusu 2020-09-10 00:58:08 +08:00 via iPhone
可能微信回调坑!楼主可以检查一下,微信走的 http 回调,竟然不支持返回 content-encoding: gzip/br,曾经为了这个问题折腾了好几天,最后单独让 nginx 为这个接口原文返回。
大写的服。 只能说贵微信,真是神一样的团队。 |
8
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 |
9
kop1989 2020-09-10 06:39:45 +08:00 via iPhone
5 秒内返回的问题,确认收到支付回调,完成验真,写入缓存之后就可以返回 success 了。没必要和业务完全强关联
|
10
yuzo555 2020-09-10 06:53:39 +08:00
@dusu 你的服务端应该要根据客户端的 Accept-Encoding 来处理输出方式,而不是你在代码里面压缩输出然后手动设置 Content-Encoding,这是危险的操作。
|
11
ccsulzf0627 OP @kop1989 我是在小程序中,要点击完成才能触发回调 success 函数,我要有个支付成功的动作才行,所以用 notify_url 来完成
|
12
kop1989 2020-09-10 09:03:52 +08:00
@ccsulzf0627 #11 也就是说你返回回调 success 是由界面 ui 的 button 触发的?这个逻辑完全做歪了吧。
|
13
ccsulzf0627 OP @kop1989 小程序自己给了个方法,你先看看文档
|