扣款结果通知

更新时间:2024.11.14

该接口仅提供微信扣款服务申请扣款接口创建的订单进行扣款结果通知,支付完成后,微信会把相关支付结果及用户信息通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。

注意:

1、同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
推荐的做法是:当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

2、如果在所有通知频率(0/15/15/30/180/1800/1800/1800/1800/3600(单位:秒))后没有收到微信侧回调,商户应调用查询订单接口确认订单状态。

特别提醒:

1、商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄露导致出现“假通知”,造成资金损失。

2、当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。

接口说明

适用对象:服务商

请求URL:该链接是通过【申请扣款API】中提交的参数notify_url设置, 如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “http://pay.weixin.qq.com/wxpay/pay.action”

通知规则

支付完成后,微信会把相关支付结果和订单信息发送给商户,商户需要接收处理该消息,并返回应答。

对后台通知交互时,如果微信收到商户的应答不符合规范或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为:0/15/15/30/180/1800/1800/1800/1800/3600(单位:秒) )

扣款成功通知参数

参数名

变量

类型[长度限制]

必填

描述

返回状态码

return_code

string[1,16]

SUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
示例值:SUCCESS

返回信息

return_msg

string[1,128]

返回信息,如非空,为错误原因
如:签名失败 等。
示例值:签名失败

以下字段在return_code为SUCCESS的时候有返回

参数名

变量

类型[长度限制]

必填

描述

应用ID

appid

string[1,32]

服务商申请的公众号或移动应用appid。
示例值:wxcbda96de0b165486

商户号

mch_id

string[1,32]

商户号是商户在微信申请微信支付成功后分配的账号ID,登录平台为pay.weixin.qq.com
示例值:1200009811

子商户应用ID

sub_appid

string[1,32]

子商户号绑定的appid(非必填,如需操作,需要服务商在商户平台为子商户绑定)
示例值:wxcbda96de0b165489

子商户号

sub_mch_id

string[1,32]

微信支付分配的子商户号。
示例值:1900000109

设备号

device_info

string[1,32]

微信支付分配的终端设备号,
示例值:013467007045764

随机字符串

nonce_str

string[1,32]

随机字符串,不长于32位
示例值:5K8264ILTKCH16CQ2502SI8ZNMTM67VS

签名

sign

string[1,32]

签名,详见签名算法
示例值:C380BEC2BFD727A4B6845133519F3AD6

业务结果

result_code

string[1,16]

SUCCESS/FAIL
示例值:SUCCESS

错误代码

err_code

string[1,32]

错误返回的信息描述
示例值:SYSTEMERROR

错误代码描述

err_code_des

string[1,128]

错误返回的信息描述
示例值:系统错误

用户标识

openid

string[1,128]

用户在商户appid下的唯一标识
示例值:wxd930ea5d5a258f4f

用户子标识

sub_openid

string[1,32]

sub_appid下,用户的唯一标识
示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

是否关注公众账号

is_subscribe

string[1,1]

用户是否关注公众账号,枚举值:
Y:关注
N:未关注
仅在公众账号类型支付有效
示例值:Y

付款银行

bank_type

string[1,32]

银行类型,采用字符串类型的银行标识,银行类型见银行列表
示例值:CMC

总金额

total_fee

int

订单总金额,单位为分,详见支付金额,(trade_state为SUCCESS和REFUND时才有返回)
示例值:100

货币种类

fee_type

string[1,8]

货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
示例值:CNY

现金支付金额

cash_fee

int

现金支付金额订单现金支付金额,单位为分,详见支付金额
示例值:100

现金支付货币类型

cash_fee_type

string[1,16]

货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
示例值:CNY

交易状态

trade_state

string[1,32]

SUCCESS:支付成功
示例值:SUCCESS

代金券或立减优惠金额

coupon_fee

int

代金券或立减优惠金额<=订单总金额,订单总金额-代金券或立减优惠金额=现金支付金额,详见支付金额(预留功能,目前暂时没有返回此参数)
示例值:10

代金券或立减优惠使用数量

coupon_count

int

代金券或立减优惠使用数量 (预留功能,目前暂时没有返回此参数)
示例值:1

代金券或立减优惠ID

coupon_id_$n

string[1,20]

代金券或立减优惠ID,$n为下标,从0开始编号 (预留功能,目前暂时没有返回此参数)
示例值:10000

单个代金券或立减优惠支付金额

coupon_fee_$n

int

单个代金券或立减优惠支付金额,$n为下标,从0开始编号 (预留功能,目前暂时没有返回此参数)
示例值:100

微信支付订单号

transaction_id

string[1,32]

微信支付订单号
示例值:1217752501201407033233368018

商户订单号

out_trade_no

string[1,32]

商户系统的订单号,与请求一致。
示例值:1212321211201407033568112322

商家数据包

attach

string[1,128]

商家数据包,如果商户申请扣款有传,支付成功回调通知原样返回,支付失败回调通知暂不支持
示例值:123456

支付完成时间

time_end

string[1,14]

支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
示例值:20141030133525

委托代扣协议id

contract_id

string[1,32]

签约成功后,微信返回的委托代扣协议id
示例值:Wx15463511252015071056489715

通知示例:

示例

1
2<xml>
3  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
4  <attach><![CDATA[支付测试]]></attach>
5  <bank_type><![CDATA[CFT]]></bank_type>
6  <fee_type><![CDATA[CNY]]></fee_type>
7  <is_subscribe><![CDATA[Y]]></is_subscribe>
8  <mch_id><![CDATA[10000100]]></mch_id>
9  <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
10  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
11  <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
12  <out_trade_no><![CDATA[1409811653]]></out_trade_no>
13  <cash_fee><![CDATA[1000]]></cash_fee>
14  <trade_state><![CDATA[SUCCESS]]></trade_state>
15  <result_code><![CDATA[SUCCESS]]></result_code>
16  <return_code><![CDATA[SUCCESS]]></return_code>
17  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
18  <time_end><![CDATA[20140903131540]]></time_end>
19  <total_fee>1</total_fee>
20  <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
21  <contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>
22</xml> 
23                

扣款失败通知参数

参数名

变量

类型[长度限制]

必填

描述

返回状态码

return_code

string[1,16]

SUCCESS/FAIL
此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
示例值:SUCCESS

返回信息

return_msg

string[1,128]

返回信息,如非空,为错误原因
如:签名失败 等。
示例值:签名失败

以下字段在return_code为SUCCESS的时候有返回

参数名

变量

类型[长度限制]

必填

描述

应用ID

appid

string[1,32]

服务商申请的公众号或移动应用appid。
示例值:wxcbda96de0b165486

商户号

mch_id

string[1,32]

商户号是商户在微信申请微信支付成功后分配的账号ID,登录平台为pay.weixin.qq.com
示例值:1200009811

子商户应用ID

sub_appid

string[1,32]

子商户号绑定的appid(非必填,如需操作,需要服务商在商户平台为子商户绑定)
示例值:wxcbda96de0b165489

子商户号

sub_mch_id

string[1,32]

微信支付分配的子商户号
示例值:1900000109

随机字符串

nonce_str

string[1,32]

随机字符串,不长于32位
示例值:5K8264ILTKCH16CQ2502SI8ZNMTM67VS

签名

sign

string[1,32]

签名,详见签名算法
示例值:C380BEC2BFD727A4B6845133519F3AD6

业务结果

result_code

string[1,16]

SUCCESS/FAIL
示例值:SUCCESS

错误代码

err_code

string[1,32]

错误返回的信息描述
示例值:SYSTEMERROR

错误代码描述

err_code_des

string[1,128]

错误返回的信息描述
示例值:系统错误

商户订单号

out_trade_no

string[1,32]

商户系统的订单号,与请求一致。
示例值:1212321211201407033568112322

委托代扣协议id

contract_id

string[1,32]

签约成功后,微信返回的委托代扣协议id
示例值:Wx15463511252015071056489715

通知示例:

示例

1
2<xml>
3  <return_code><![CDATA[SUCCESS]]></return_code>
4  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
5  <mch_id><![CDATA[10000100]]></mch_id>
6  <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
7  <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
8  <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
9  <result_code><![CDATA[SUCCESS]]></result_code>
10  <bank_type><![CDATA[CFT]]></bank_type>
11  <fee_type><![CDATA[CNY]]></fee_type>
12  <is_subscribe><![CDATA[Y]]></is_subscribe>
13  <out_trade_no><![CDATA[1409811653]]></out_trade_no>
14  <contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>
15</xml> 
16                

商户通知应答

如果商户侧未返回正确的内容,微信会多次通知,为了避免给商户服务器造成过大的压力,请在得到微信签约结果通知之后,返回以下内容。(请求方式:post)

注意:当商户后台应答失败时,微信支付将记录下应答的报文,建议商户按照以下格式返回。

参数名

变量

类型[长度限制]

必填

描述

返回状态码

return_code

string[1,16]

SUCCESS/FAIL
状态码,SUCCESS为接收成功,其他状态码为失败。
示例值:SUCCESS

返回信息

return_msg

string[1,128]

返回信息,如非空,为错误原因
如:签名失败 等。
示例值:签名失败

返回示例:

示例

1
2<xml>
3  <return_code><![CDATA[SUCCESS]]></return_code>>
4  <return_msg><![CDATA[OK]]></return_msg>
5</xml>
6				

错误码

名称

描述

解决方案

ACCOUNTERROR

用户账户异常

请用户检查账户后再试

CONTRACT_NOT_EXIST

协议不存在,用户已解约

建议重新签约

RULELIMIT

用户账户支付已达上限

建议更换银行卡支付

BANKERROR

支付银行卡所在行渠道维护中

建议更换银行卡支付

NOTENOUGH

余额不足

建议更换银行卡支付

USER_ACCOUNT_ABNORMAL

用户账户异常

请确认扣款用户的微信账号是否正常

USER_NOT_EXIST

用户账户注销

请确认扣款用户的微信账号是否注销

TRADE_ERROR

订单错误

请检查用户账号是否异常、被风控、是否符合规则限制等

USER_ERROR

交易失败,该用户账号暂不可用

请用户检查账户后再试,如有疑问请联系微信客服检查账号状态