评论

无法收到回调全网最全图文指引,看完就能有效的解决你的问题!!!!

回调问题、接收不到微信回调通知的解决方法

前言:相信很多朋友在开发微信支付接口时遇到无法收到回调问题非常的懊恼,不知道从何下手,相信看完本文章基本就能解决你无法收到回调的问题了。阅读本文章前,建议提前看一下文章右侧的目录,帮助你更好的阅读此文章。

--------

提前需要准备的工具:postman(其他能调试API的工具也可以)

--------

特别说明:这里说的回调都是后端回调,跟前端的回调方法是没有关系,前端的方法需要到社区进行咨询,例如小程序支付的前端方法问题需要到社区小程序模块进行咨询

什么情况下才会有回调通知

1、 支付成功后微信侧才会发送支付结果回调通知

可参考官方文档:支付通知API

2、 申请退款成功后,只有退款状态为退款异常、退款关闭、退款成功才会发送退款回调通知

可参考官方文档:退款结果通知API

注意:

1.上面只是举例了两个接口,还要更多的回调接口,每个回调接口都会有对应的 通知频率回调触发条件

--------

2.支付结果回调 是异步队列加公网通知的,支付完成后会立即发送回调消息,以支付结果回调为准,不存在回调支付成功,查询接口却一直返回的是未支付

--------

3.退款回调 是异步的,申请退款接口返回的成功只是代表了申请退款这个操作成功了,退款整个流程可能经过银行等,所以 回调时长可能会长一些

--------

4.申请退款成功后,用户侧长时间未到账,或商户查询退款状态一直都是退款中,则可能是退款到用户银行卡中,需要经过银行,一般在7个工作内是比较正常的,若7个工作日后还是退款中,请拨打95017协助排查

--------

5.回调的作用是告诉商户结果是什么,商户应答回调是告诉接口已经成功收到回调,建议商户最好是按照文档要求去应答接口,若商户是自行查询接口来判断情况,而不是根据回调来判断,理论上是可以不去管回调(包括应答),但还是强烈建议按照正常流程正确的应答接口

--------

下面介绍一下每一种无法接受到回调的情况及对应的检查方法

--------

情况一:v3接口能支付成功,未设置APIv3密钥则无法收到回调(非常重要!!!非常重要!!!非常重要!!!一定要优先设置,只要是v3接口,不设置APIv3密钥则无法收到回调)

什么是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请求。

notify_url填写注意事项

--------

错误示例:

携带端口号: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

这种情况一般自己比较难排查吗,所以不要做域名转发,然后再进行测试,出现问题后再按照上述步骤进行检查(建议直接咨询自己的运维人员,他们知道如何处理

最后一次编辑于  2023-05-10  
点赞 3
收藏
评论

29 个评论

  • Starkwang
    Starkwang
    置顶评论2023-08-29

    可以试试云开发工作流来对接微信支付,以及接收回调:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/wechatpay/workflow.html

    2023-08-29
    赞同
    回复
  • 钞能力
    钞能力
    2023-08-01

    v3付款成功,收不到异步通知。

    ApiV3密钥也设置了,回调地址符合要求(https,无端口,无get参数),自己在多个网络环境下postman模拟均可以收到请求。

    而且,刚刚上线的时候一切正常的,跑了一端时间后突然不行了。

    2023-08-01
    赞同 2
    回复 1
    • 钞能力
      钞能力
      2023-08-11
      这个帖子凉了吗,都没人管理和交流吗?
      2023-08-11
      回复
  • 天赋给不了你闪电般的荷包蛋
    天赋给不了你闪电般的荷包蛋
    2022-10-27

    看完了还是没找到问题TAT,可以成功付款,回调的域名已备案,外网可以访问,外网也可以访问该控制类,与网络波动无关,是HTTPS并做了强制HTTPS处理,ssl证书和域名皆没有过期,url没有携带参数没有另外拼接端口,用的是v2接口,APIv2密钥已设置且无误,防火墙的80端口与443端口皆开放且没有做ip限制,无域名转发,依然无法在回调收到xml数据,但是定位半天还是没定位到实际问题

    2022-10-27
    赞同 2
    回复 4
    • HOPE
      HOPE
      2022-10-28
      私信发一下你的订单号给我
      2022-10-28
      回复
    • 田超
      田超
      2022-11-04
      你的问题解决了吗,我出现和你同意的情况
      2022-11-04
      回复
    • HOPE
      HOPE
      2022-11-09回复田超
      他的是代码问题,接收的类有些问题
      2022-11-09
      回复
    • 蔡小菜的搞笑日常
      蔡小菜的搞笑日常
      2022-11-10
      我也遇到了该问题,调试了很久都不通,想问下楼主是怎么解决的
      2022-11-10
      回复
  • A꧁༺ཌ独遁其流ད༻꧂
    A꧁༺ཌ独遁其流ད༻꧂
    2023-06-22

    看完了还是没找到问题TAT,可以成功付款,回调的域名已备案,外网可以访问,外网也可以访问该控制类,与网络波动无关,是HTTPS并做了强制HTTPS处理,ssl证书和域名皆没有过期,url没有携带参数没有另外拼接端口,用的是v2接口,APIv2密钥已设置且无误,防火墙的80端口与443端口皆开放且没有做ip限制,无域名转发,依然无法在回调收到xml数据,但是定位半天还是没定位到实际问题

    2023-06-22
    赞同 1
    回复
  • 郝高伟
    郝高伟
    2023-05-29

    v3可以支付成功 ,退款成功 就是收不到通知

    2023-05-29
    赞同 1
    回复
  • 哈哈哈哈。
    哈哈哈哈。
    2023-05-08

    所以到底支持Ipv6吗,全文没有介绍,问了技术说支持,但是回调确实没反应,用postman不同网络下可以访问,

    2023-05-08
    赞同 1
    回复
  • Tim
    Tim
    2023-08-15

    情况三(硬性条件,不要抱着侥幸心理!!!):回调地址不规范,回调地址规则:回调地址不能携带参数及端口号且不能是直接的ip,域名不能携带特殊符号(比如-等),请检查下单时的回调地址是否有携带参数或端口号,必须为 公网域名 且是 https 开头,现使用 http开头 、携带 端口号 或是 ip 能正常接收回调的用户,建议更换为 https 且去除 端口号 使用正常的域名,避免后期出现回调通知无法接收的情况,请求方式为post请求。

    。。。。。。。。。。。。。

    一百万个草泥马,域名里一个 “-” 坑死我了,终于在一堆文字里看到这个,这个不应该写在那个文档里吗?(还侥幸心理,首先你们要专业一点!!)


    2023-08-15
    赞同
    回复
  • 小小
    小小
    2023-07-05

    支付回调地址需要设置支付授权目录吗?现在找不到问题在哪

    2023-07-05
    赞同
    回复
  • 郝高伟
    郝高伟
    2023-05-29

    v3支付收不到回调通知!可以支付成功!

    2023-05-29
    赞同
    回复
  • 默行莫废
    默行莫废
    2023-05-17

    从哪可以看微信回调报的错?

    2023-05-17
    赞同
    回复

正在加载...

登录 后发表内容