回调通知注意事项

更新时间:2024.07.25

1. notify_url填写注意事项

  • notify_url需要填写商户自己系统的真实地址,不能填写接口文档或demo上的示例地址。

  • notify_url必须是以https://http://开头的完整全路径地址,并且确保URL中的域名和IP是外网可以访问的,不能填写localhost、127.0.0.1、192.168.x.x等本地或内网IP。

  • notify_url不能携带参数。

  • 常见错误举例:

错误描述

错误示例

URL中只有域名,缺少具体的路径

http://www.weixin.qq.com

URL不是以https://开头,缺少域名或IP

./PayNotify.aspx

URL中填写了本地或者内网IP

http://127.0.0.1/pay/notify.php

填写了不是URL格式的字符串

xxxxxxx1234567test

2. 回调处理逻辑注意事项

  • notify_url的代码处理逻辑不能做登录态校验。

  • 商户系统收到支付结果通知,需要在5秒内返回应答报文,否则微信支付认为通知失败,后续会重复发送通知。

  • 同样的通知可能会多次发送给商户系统,商户系统必须能够正确处理重复的通知。如果已处理过,直接给微信支付返回成功。

  • 商户侧对微信支付回调IP有防火墙策略限制的,需要对以下IP段开通白名单:

    上海电信出口网段:101.226.103.0/25

    上海联通出口网段:140.207.54.0/25

    上海CAP出口网段:121.51.58.128/25

    深圳电信出口网段:183.3.234.0/25

    深圳联通出口网段:58.251.80.0/25

    深圳CAP出口网段:121.51.30.128/25

    香港出口网段:203.205.219.128/25

    退款结果通知、分账动账通知IP(新增):
    175.24.214.208、 175.24.211.24、 175.24.213.135、109.244.180.23、 114.132.203.119、 43.139.43.69

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

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

    在验签失败的情况下,商户系统应返回失败(即应答 4xx 或 5xx 的状态码),等待微信支付携带正确签名重新发送通知回调。
    如果你有关于签名探测任何疑问,请通过在线技术咨询联系我们的技术支持。

3、商户接收回调失败常见场景

一、回调地址配置类问题

  1. 地址配置错误

    • 商户在微信支付商户平台 / 接口参数中,配置的回调通知地址(notify_url)存在拼写错误(如域名错写、路径漏填);

    • 地址未使用公网可访问的 HTTPS 协议(微信支付强制要求回调地址为 HTTPS);

    • 使用了内网地址(如192.168.x.xlocalhost),微信支付服务器无法穿透内网访问。

  2. 地址未完成备案 / 解析异常

    • 回调地址对应的域名未完成工信部 ICP 备案(国内服务器必选,境外服务器虽无需备案,但需确保域名解析正常);

    • 域名 DNS 解析失效(如解析记录过期、未配置正确的 A/AAAA 记录),导致微信支付服务器无法解析到商户服务器 IP。

二、网络与服务器连通性问题

  1. 商户服务器防火墙 / 安全组拦截

    • 商户服务器的防火墙(如 Linux iptables、Windows 防火墙)或云服务商安全组,未开放微信支付回调通知的入站请求;

    • 服务器开启了 CC 攻击防护、WAF(Web 应用防火墙)等安全策略,误将微信支付的回调请求判定为恶意请求并拦截。

  2. 网络链路故障

    • 商户服务器所在网络存在链路丢包、延迟过高(如超过 3 秒),导致微信支付发送的通知请求超时;

    • 商户使用的 CDN 或反向代理(如 Nginx、Cloudflare)配置异常,未将回调请求正确转发至后端业务服务器。

三、其他特殊场景

  1. 如果商户没有设置apiv3key微信支付不会发送回调通知。

  2. 未配置notify_url回调通知接收地址,所以微信支付不会发送通知