评论

接收不到回调排查指引

接收不到回调排查指引

目前微信支付API v2 版本的SDK已停止维护,为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,微信支付官方推出了全新的微信支付API v3。并且提供了Java、php、go语言的相关业务SDK,该SDK已支持回调验签,接收解析回调通知的功能,若你有SDK需求,建议使用API v3版本,根据自己的需要选择对应的SDK使用,具体可参考:微信支付APIv3 SDK 介绍

V2版接口和V3版接口规则差异说明:

  • 参数格式:V2接口为XML,V3接口为JSON
  • 签名方式:V2接口为MD5或HMAC-SHA256,V3接口为非对称密钥SHA256-RSA
  • 回调加密:V2接口无需加密,V3接口为AES-256-GCM加密

本文章主要协助开发者定位接收不到微信支付回调的问题,开发者可根据以下步骤逐步排查。

情况一、使用V3接口未设置APIv3密钥

针对V3版本的接口,未设置APIv3密钥的情况下,微信侧不会发送异步通知,请务必保证先设置了APIv3密钥,功能介绍和设置指引可参考:什么是APIv3密钥?如何设置?

情况二、接口上传或商户平台配置的回调地址不规范

部分业务只能在商户平台配置回调地址,例如接收分账动账通知、委托代扣解约通知,具体的需要以各业务接口文档说明为准。

2.1请检查回调URL是否有携带后缀参数,如果携带了后缀参数,会导致无法接收到微信的回调通知信息

携带参数错误示例:http://www.qq.weixin.top/weixin/pay/callback/test?testid=000001

2.2请检查回调URL是否是自己系统的真实回调地址,有很多人这里在上传给微信支付时填错了回调地址,例如比系统的真实地址多了“空格”或“/“的情况

错误示例:系统真实回调地址:http://www.qqweixin.top/weixin/pay/callback/test

实际在接口上传或商户平台配置的是:http://www.qqweixin.top/weixin/pay//callback/test

比系统真实回调地址多了“/”(手动)

2.3请检查回调URL是否为https地址,如果是走专线接入,使用专线NAT IP或者私有回调域名才可使用http

2.4notify_url必须是以https://或http://开头的完整全路径地址,不能填写localhost、127.0.0.1、192.168.x.x等本地或内网IP。

情况三、有防火墙策略限制但未对微信IP段开通白名单

商户侧对微信支付回调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


情况四、回调URL外网无法访问或域名DNS解析失败

4.1请检查回调URL 中的域名和IP是不是外网可以访问的,如果外网不可以访问,会导致无法接收到微信的回调通知信息

4.2请检查回调URL中的代码处理逻辑是否做了登录态校验,如果做了这个校验,也会导致无法接收到微信的回调通知信息

4.3请检查回调URL 域名是否因为未实名认证、未备案、到期未续费等原因而出现异常状态,造成域名停止解析,找不到相关域名对应的IP,从而导致接收不到回调

如何检查域名是否有问题:回调地址是否可被外网访问,DNS是否能解析成功。

检查ip地址/域名是否可以ping通:如何ping域名,建议是在不同网络下进行操作,这样可以检查是否是内网ip,ping不通可能的原因是ip地址和域名没有映射成功或者是内网ip(同网络能ping通,不同网络不能ping通,一般就是内网ip),需要到注册的域名网站重新进行映射

成功示例:

异常示例:

情况五、订单未达到触发回调的状态

请按照对应的回调接口文档确认是否达到了触发回调条件,例如申请退款成功之后,长时间没有收到退款结果通知的回调,这种情况下,大概率是退款单还没得到明确的结果,例如退款还在处理中,退到银行卡(储蓄卡及信用卡)一般需要0-3个工作日,具体时间还需要以银行处理时间为准,像这种情况没回调就是正常的,商户可以通过调用查询退款API查到对应退款单的处理状态。

情况六、处理回调的代码有问题

如果你使用的开发语言是Java,go,php,建议使用微信支付官方提供的SDK


请检查使用的回调地址是否是线上正在使用的,如果线上正常使用,且对代码或者环境有修改后才出现问题,则说明大概率是代码层面或者环境的问题。可以使用postman等API调试工具模拟微信支付回调的格式测试,看看代码程序是否能正常接收到回调信息,v2接口的回调信息是xml格式,v3接口的回调格式json格式,两种格式都是以字符串形式发送的数据流

v2接口回调测试示例(固定为xml格式):

V2示例参数(可直接复制使用):

<xml>

<appid><![CDATA[wxa9d9651ae8212345]]> </appid>

<attach><![CDATA[内部商户号是 11312347]]></attach>

<bank_type><![CDATA[CITIC_CREDIT]]></bank_type>

<cash_fee><![CDATA[10]]></cash_fee>

<fee_type><![CDATA[CNY]]></fee_type>

<is_subscribe><![CDATA[N]]></is_subscribe>

<mch_id><![CDATA[1900010001]]></mch_id>

<nonce_str><![CDATA[vmall_230825163112_idc_3489]]></nonce_str>

<openid><![CDATA[oLTPCuLEY-noZj6MKWmyMn12345]]></openid>

<out_trade_no><![CDATA[vmall_230825163112_idc_3489]]></out_trade_no>

<result_code><![CDATA[SUCCESS]]></result_code>

<return_code><![CDATA[SUCCESS]]></return_code>

<sign><![CDATA[00199DB310C7D426EDADEE6A6E91B53D]]></sign>

<time_end><![CDATA[20230825163126]]></time_end>

<total_fee>10</total_fee>

<trade_type><![CDATA[JSAPI]]></trade_type>

<transaction_id><![CDATA[4200001905202308254305900001]]></transaction_id>

</xml>

v3接口回调测试示例(固定为json格式):

V3示例参数(可直接复制使用):

{

“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+8ctmM6L3kxqQ6JS56S7JkVFMiCvfcMGkQFM

tUifq09Wrt6+bNwMUNLKQ52zLyMLwS9uML2Y2Qmi1obactel3rwwTs+IXGir505F2eLBG9ruqtJxGd2dlsLQ+0

Sl7OUA/mMCnxMXUhfwJC84lv2oZDC3T827Mzy0BQ5YmXfdpgOA0OCTl+OwokWMXJz2DiGafE1n0pqH/R0V

gDyUCEAOb6l+dFRR7S0I1yVe7/6czAYp+i7mTgNrmudG7EgDoOVfGga9Wq9epO6PEew1ypK5M8PmIopNSzg3

4WEouFhOqvPZfi2paqib2gxexcqtniQQbdechavr4SH/3JSpg8Zbnnbeo3ClFDU7eRVO2FCAPQaMlcSmjU4zv

2H98dvB9TnIyon/so+QwSo/ZwWMnTKeztviuYd5ICbrtzAPoeeDrPlYlB0pwlFT8Tz3lqC0QZWKvL0+FIj0+9P+2/

JvZpr5aVrFosMI1Afb17P7zx69jnLFPFX0ph4AgBK/N8oRNg12uVqvJM3E07/4P7LWLKyrf9FySovQplbhlasA

yOf5PWb3aBwEv19hr71uMvAyuCll39zhIZ9M1CZTcSLpuyeWDOUwt3Y7ww0mOMruvK5a5mREuowqfP/

OVv73yX/mf/7MEo9wAvz2bNqAuS0c9xc2yn5EHN4rNSTgApcJh2OTNUVEZXu7sL04S/pKpApS4eXxTS1bnLeqVfk5

rePQagXFXwMFJVfAPmLyMRLsBLpdc2lO2LIof+nx8HnqjHvKYnolRgJYAlUuHx1mdjsPrZreDjK12b3cBznrfC7gac+3VW4

r42f2b533RCAvchchxb7l+sdzQSFImbxZ1IAZFO/ZozZEFFko2FypOh2SdZYigW6Rq6hxw8EFOrvp6GwKpkhGbb4xnQsGHupDA

Mte5QmiMb9M8KUP5DSIo7gCsO7FMWtXFrdetyQfLXsZ/CidA+JOlSGKL+8s/ISyajpl8YseGNhlq39Zci53GoQCETs/ixLPz4BO

TeTLC9FASUoEGPKet+OvYhdo4Xlopbhs95jl6jjgZcT6Bkr5ivG2ocqi2aP5hpnnVDXq/OwXvdofTHxlp2oydlYo9xqXhg+emzSQ8

woub6XXO22KOKuEcWMSCiSMWYm9gsP2v0QkCw54ZmJHuDoivV2jVrFQjdH9nO2m68SHj9I9PBj4eSbDG235d/gSxp6VrrH+UaP5

b4fjZi4xZ+9Nr1oUAc1Z6RRqqvCVLY1DTMpp2H/aXr9gNUs8fL8kkfuiWEKTkcoW/JKTZjiizzbHEkXSU3+dm4AITiKWrdvSUs80OGg==”,

“associated_data”: “certificate”,

“nonce”: “4de73afd28b6”

}

}

附录








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

3 个评论

  • Memory
    Memory
    2023-09-05

    其实他们都懒得去排查,只想给个420单号让你把具体错误给他们

    2023-09-05
    赞同 1
    回复 2
    • H、
      H、
      2023-09-06
      如果是这样就有点难顶了
      2023-09-06
      回复
    • H、
      H、
      2023-09-06回复Memory
      嗯嗯,这篇帖子中的”情况四“ 有说明这个问题。
      2023-09-06
      回复
  • void😀😀
    void😀😀
    06-29

    我用postman模拟是正常的,为啥真实付款后没有回调呢?比如这个订单:4200002180202406292587583221

    06-29
    赞同
    回复
  • 咸鱼不够甜
    咸鱼不够甜
    2023-10-23

    应答报文头呢?怎么没有头?建议给一个应答报文头,方便我模拟真实的操作场景

    2023-10-23
    赞同
    回复 1
登录 后发表内容