前言:相信很多朋友在开发微信支付接口时遇到无法收到回调问题非常的懊恼,不知道从何下手,相信看完本文章基本就能解决你无法收到回调的问题了。阅读本文章前,建议提前看一下文章右侧的目录,帮助你更好的阅读此文章。
--------
提前需要准备的工具:postman(其他能调试API的工具也可以)
--------
特别说明:这里说的回调都是后端回调,跟前端的回调方法是没有关系,前端的方法需要到社区进行咨询,例如小程序支付的前端方法问题需要到社区小程序模块进行咨询
什么情况下才会有回调通知
1、 支付成功后微信侧才会发送支付结果回调通知
可参考官方文档:支付通知API
2、 申请退款成功后,只有退款状态为退款异常、退款关闭、退款成功才会发送退款回调通知
可参考官方文档:退款结果通知API
注意:
1.上面只是举例了两个接口,还要更多的回调接口,每个回调接口都会有对应的 通知频率 和 回调触发条件
--------
2.支付结果回调 是异步队列加公网通知的,支付完成后会立即发送回调消息,以支付结果回调为准,不存在回调支付成功,查询接口却一直返回的是未支付
--------
3.退款回调 是异步的,申请退款接口返回的成功只是代表了申请退款这个操作成功了,退款整个流程可能经过银行等,所以 回调时长可能会长一些
--------
4.申请退款成功后,用户侧长时间未到账,或商户查询退款状态一直都是退款中,则可能是退款到用户银行卡中,需要经过银行,一般在7个工作内是比较正常的,若7个工作日后还是退款中,请拨打95017协助排查
--------
5.回调的作用是告诉商户结果是什么,商户应答回调是告诉接口已经成功收到回调,建议商户最好是按照文档要求去应答接口,若商户是自行查询接口来判断情况,而不是根据回调来判断,理论上是可以不去管回调(包括应答),但还是强烈建议按照正常流程正确的应答接口
--------
下面介绍一下每一种无法接受到回调的情况及对应的检查方法
--------
情况一:v3接口能支付成功,未设置APIv3密钥则无法收到回调(非常重要!!!非常重要!!!非常重要!!!一定要优先设置,只要是v3接口,不设置APIv3密钥则无法收到回调)
注意(APIv2密钥以前也叫API密钥):
1.v2接口 使用的是 APIV2密钥,v2接口 下单能成功 说明就设置好了APIv2密钥。
--------
2.APIv3密钥 与 APIV2密钥 是隔离的,设置APIv3密钥时,不会导致APIV2密钥发生变化,且 对v2接口没有影响。
--------
情况二:下单时实际填写的回调地址跟自己实际想要的回调地址不一致,可能多了 / 或者 空格 (注意退款接口需要填写退款回调地址, 不然无法收到回调)
--------
比如想要的是:http://www.qqweixin.top/weixin/pay/callback/test
--------
实际的填写的:http://www.qqweixin.top/weixin/pay//callback/test
--------
可以重新下一笔新的订单,仔细确认下单时传递的地址跟实际需要的地址是否一致
情况三(硬性条件,不要抱着侥幸心理!!!):回调地址不规范,回调地址规则:回调地址不能携带参数及端口号且不能是直接的ip,域名不能携带特殊符号(比如-等),请检查下单时的回调地址是否有携带参数或端口号,必须为 公网域名 且是 https 开头,现使用 http开头 、携带 端口号 或是 ip 能正常接收回调的用户,建议更换为 https 且去除 端口号 使用正常的域名,避免后期出现回调通知无法接收的情况,请求方式为post请求。
--------
错误示例:
携带端口号:http://www.qqweixin.top:443/weixin/pay/callback/test
携带参数:http://www.qqweixin.top/weixin/pay/callback/test?id=10086
使用ip地址:192.168.x.x
非公网域名:(一定要使用公网ip映射的域名)
--------
如何检查域名是否有问题:核实回调地址是否可被外网访问,是否有DNS解析成功。
(检查ip地址/域名是否可以ping通:如何ping域名,建议是在不同网络下进行操作,这样可以检查是否是内网ip,ping不通可能的原因是ip地址和域名没有映射成功或者是内网ip(同网络能ping通,不同网络不能ping通,一般就是内网ip),需要到注册的域名网站重新进行映射)
成功示例:
失败示例:
--------
情况四:开通了防火墙,拦截了回调
(是否开通了防火墙导致回调地址被拦截了,开通防火墙后设置一下白名单,回调IP段白名单)
--------
情况五:商户侧网络波动导致部分回调丢失
商户侧由于网络波动导致部分部分回调数据没有正常存储或数据丢失等,可以按照网络监测工具检查
1.一般商户侧出现就部分订单的回调丢失就是这种情况,微信侧目前没有出现过支付成功后未给商户发送回调的情况,若极端情况下出现,官方也肯定是会在第一时间通知商户,所以基本都是商户自身网络问题导致
网络排查工具
2.商户业务层已经对回调处理完成并成功应答, 但商户侧自身系统问题,导致这条回调数据丢失,需要商户自身排查
--------
情况六:程序代码问题(若使用的回调地址本身是在正常使用的回调地址,是对代码或者环境修改后出现的问题,则说明是代码层面或者环境的问题)
使用postman等API调试工具模拟微信支付回调的格式测试,检查代码是否能正常接收回调信息,v2接口的回调信息是xml格式,v3接口的回调格式json格式,上述两种格式都是以字符串的形式发送的数据流,特殊情况:只要是在商户平台进行 手动退款的回调通知都是xml格式。
(注意测试时,发送回调和接收回调尽量不要在同一网络当中,避免都是在是同一网络测试结果不准确,注意:接收到回调为空的现象一般都是接收格式的问题,比如xml格式的数据使用json格式接收)
v2接口回调格式(固定为xml格式,v2部分接口需要解密,比如:退款接口,详情会在接口特别说明说明中有描述,退款结果通知)
示例:
<xml>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<attach><![CDATA[支付测试]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
<openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
<out_trade_no><![CDATA[1409811653]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
<time_end><![CDATA[20140903131540]]></time_end>
<total_fee>1</total_fee>
<coupon_fee><![CDATA[10]]></coupon_fee>
<coupon_count><![CDATA[1]]></coupon_count>
<coupon_type><![CDATA[CASH]]></coupon_type>
<coupon_id><![CDATA[10000]]></coupon_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>
v3接口回调格式(固定为json格式,格式固定,内容不一样,需要解密)
示例:
{
“id”: “EV-2018022511223320873”,
“create_time”: “2015-05-20T13:29:35+08:00”,
“resource_type”: “encrypt-resource”,
“event_type”: “TRANSACTION.SUCCESS”,
“summary”: “支付成功”,
“resource”: {
“original_type”: “transaction”,
“algorithm”: “AEAD_AES_256_GCM”,
“ciphertext”: “3TxpOF8YqF5Zy2cYQWrZNnmC1FWrxwIPvIv4WejUr+8ctmM6L3kxqQ6JS56S7JkVFMiCvfcMGkQFMtUifq09Wrt6+bNwMUNLKQ52zLyMLwS9uML2Y2Qmi1obactel3rwwTs+IXGir505F2eLBG9ruqtJxGd2dlsLQ+0Sl7OUA/mMCnxMXUhfwJC84lv2oZDC3T827Mzy0BQ5YmXfdpgOA0OCTl+OwokWMXJz2DiGafE1n0pqH/R0VgDyUCEAOb6l+dFRR7S0I1yVe7/6czAYp+i7mTgNrmudG7EgDoOVfGga9Wq9epO6PEew1ypK5M8PmIopNSzg34WEouFhOqvPZfi2paqib2gxexcqtniQQbdechavr4SH/3JSpg8Zbnnbeo3ClFDU7eRVO2FCAPQaMlcSmjU4zv2H98dvB9TnIyon/so+QwSo/ZwWMnTKeztviuYd5ICbrtzAPoeeDrPlYlB0pwlFT8Tz3lqC0QZWKvL0+FIj0+9P+2/JvZpr5aVrFosMI1Afb17P7zx69jnLFPFX0ph4AgBK/N8oRNg12uVqvJM3E07/4P7LWLKyrf9FySovQplbhlasAyOf5PWb3aBwEv19hr71uMvAyuCll39zhIZ9M1CZTcSLpuyeWDOUwt3Y7ww0mOMruvK5a5mREuowqfP/OVv73yX/mf/7MEo9wAvz2bNqAuS0c9xc2yn5EHN4rNSTgApcJh2OTNUVEZXu7sL04S/pKpApS4eXxTS1bnLeqVfk5rePQagXFXwMFJVfAPmLyMRLsBLpdc2lO2LIof+nx8HnqjHvKYnolRgJYAlUuHx1mdjsPrZreDjK12b3cBznrfC7gac+3VW4r42f2b533RCAvchchxb7l+sdzQSFImbxZ1IAZFO/ZozZEFFko2FypOh2SdZYigW6Rq6hxw8EFOrvp6GwKpkhGbb4xnQsGHupDAMte5QmiMb9M8KUP5DSIo7gCsO7FMWtXFrdetyQfLXsZ/CidA+JOlSGKL+8s/ISyajpl8YseGNhlq39Zci53GoQCETs/ixLPz4BOTeTLC9FASUoEGPKet+OvYhdo4Xlopbhs95jl6jjgZcT6Bkr5ivG2ocqi2aP5hpnnVDXq/OwXvdofTHxlp2oydlYo9xqXhg+emzSQ8woub6XXO22KOKuEcWMSCiSMWYm9gsP2v0QkCw54ZmJHuDoivV2jVrFQjdH9nO2m68SHj9I9PBj4eSbDG235d/gSxp6VrrH+UaP5b4fjZi4xZ+9Nr1oUAc1Z6RRqqvCVLY1DTMpp2H/aXr9gNUs8fL8kkfuiWEKTkcoW/JKTZjiizzbHEkXSU3+dm4AITiKWrdvSUs80OGg==”,
“associated_data”: “certificate”,
“nonce”: “4de73afd28b6”
}
}
--------
情况七:域名(url)转发导致的DNS解析失败
域名转发:所谓域名(url)转发,是通过服务器的特殊设置,将访问您当前域名的用户引导到您指定的另一个网络地址。 地址转向(也可称“URL转发”)即将一个域名指向到另外一个已存在的站点,英文称为“ URL FORWARDING ”。
DNS解析失败:解析失败就是找不到相关域名对应的IP
这种情况一般自己比较难排查吗,所以不要做域名转发,然后再进行测试,出现问题后再按照上述步骤进行检查(建议直接咨询自己的运维人员,他们知道如何处理)
所以回调支持ipv6吗,全文没有说明,我问了技术说支持,但是我做了上面说的各种测试都接收不到回调,回调方法也没有问题,apipost 做过测试。
地址在postman上面可以访问,也可以正常支付但无法收到回调,使用的v3接口
1628968832
使用的V3支付,可以支付成功但是获取不到回调。确认回调链接无误,可以正常访问
商户号1602289557
这个商户从3月15日之后一部分的微信回调就收不到了
这是其中一个订单号4200059243202303186963470185
由于各种限制不能用postman调试
我这边是突然无法收到支付通知。3月3日前都是正常的,3月5日开始就一直没有收到支付通知
客服在哪啊,麻烦看到回下,谢谢
看完了还是没找到问题TAT,可以成功付款,回调的域名已备案,外网可以访问,外网也可以访问该控制类,与网络波动无关,是HTTPS并做了强制HTTPS处理,ssl证书和域名皆没有过期,url没有携带参数没有另外拼接端口,用的是v2接口,APIv2密钥已设置且无误,防火墙的80端口与443端口皆开放且没有做ip限制,无域名转发,依然无法在回调收到xml数据,但是定位半天还是没定位到实际问题
我的回调接收也有问题,回调报错IllegalArgumentException: Invalid character,排查了一下确实没发现问题。求助,联系了技术支持,是回调我的接口报401。
但是我本地用postman是可以调通的,真是太奇怪了。
不一定是对的
能不能帮忙看一下,我这也一直收不到微信回调,地址是没问题的呢,其中一单为:
商户订单号 wxpay202302041132530005274055
支付单号 4200001689202302049618818474APPIDwx898bcd4fc1d77af7
微信支付商户号 1635889920
交易时间 2023-02-04 11:32:58
更新时间 2023-02-04 11:32:59
支付时间 2023-02-04 11:32:59
支付场景 APP支付
交易状态 买家已支付
我也是吐了,给的域名里面有一条杠 - ,结果就接收不到了,