评论

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

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

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

--------

提前需要准备的工具: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 个评论

  • W
    W
    2022-12-27

    我们更换了一个新的商户号后,就收不到回调了。。。

    所以能排除代码、dns、域名拼写规则,并且新的商户号也开通了apiv3!


    能帮忙看下吗,商户号是1636083847

    未收到回调的微信单号是4200001660202212275018231071

    2022-12-27
    赞同
    回复 1
    • HOPE
      HOPE
      2023-01-13
      先确认一下你是v及的接口。v3接口是设置APIv3密钥,不是开通
      2023-01-13
      回复
  • a
    a
    2022-12-19

    HDORDER262482815877121这笔订单号一直收不到回调信息,能帮忙看下吗

    2022-12-19
    赞同
    回复
  • ꕥ᭄张先生ꦿঞ
    ꕥ᭄张先生ꦿঞ
    2022-12-05

    我的微信支付用的也是apiv2秘钥,回调地址postman测试也通,支付成功就是收不到回调,走不到那个方法就,也做了Nginx的映射,项目中别的方法都可以正常调用

    2022-12-05
    赞同
    回复 1
    • HOPE
      HOPE
      2022-12-09
      那就要一下你的回调地址了
      2022-12-09
      回复
  • 干饭人
    干饭人
    2022-11-18

    小程序后台更换服务器地址后,域名指向也更新到最新服务器,但支付成功后,未收到回调信息

    2022-11-18
    赞同
    回复 1
    • HOPE
      HOPE
      2022-11-22
      这种情况一般就是没有指向成功,或者防火墙拦截了
      2022-11-22
      回复
  • 郭录军
    郭录军
    2022-11-07

    我们修改了回调地址后,发现回调还是跑去老地址,新地址确认是没有问题的(手动访问无问题),这种情况咋解决?

    老地址:https://xxx.xxxx.com/abc/pay

    新地址:https://xxx.xxxx.com/abcdef/pay

    我们暂时在web server上加了一个代理,把老地址代理到新地址,但这也不是个终究解决办法啊,老地址已经废弃了

    2022-11-07
    赞同
    回复 1
    • HOPE
      HOPE
      2022-11-07
      如果是支付接口,地址则是下单的时候携带的,所以你的每一笔订单都是根据下单的地址进行回调,不会通过你上一个订单的地址进行回调,所以应该就是你下单的时候地址没有更改过来
      2022-11-07
      回复
  • 何处寻何人
    何处寻何人
    2022-10-14

    突然有一单回调没有成功,其他单都正常,这种是什么问题呢

    2022-10-14
    赞同
    回复 1
    • HOPE
      HOPE
      2022-10-21
      这种情况一般是当时的网络波动导致没有接收到
      2022-10-21
      回复
  • 木瓜大盗
    木瓜大盗
    2022-08-03

    就是这个APIV3密钥没设置,导致一直收不到支付通知。终于解决了,多谢博主。

    2022-08-03
    赞同
    回复
  • 蓝贝贝
    蓝贝贝
    发表于移动端
    2022-04-21
    懂了,受益匪浅
    2022-04-21
    赞同
    回复
  • 蓝贝贝
    蓝贝贝
    发表于移动端
    2022-04-21
    懂了,受益匪浅
    2022-04-21
    赞同
    回复

正在加载...

登录 后发表内容