签约、解约结果通知

更新时间:2024.11.14

签约、解约成功后(包含用户主动解约),微信会把相关签约、解约信息异步通知给商户。

注意:

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

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

特别提醒:

1、商户系统对于签约、解约结果通知的内容一定要做签名验证,并校验返回的商户协议号和用户openid信息是否一致,防止数据泄露导致出现“假通知”,造成损失。

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

接口说明

适用对象:服务商

请求URL:签约结果通知路径为签约接口商户上传的notify_url字段,解约结果通知路径为商户配置委托扣款模板ID时填写的解约回调地址,必须为https协议。
如果链接无法访问,商户将无法接收到微信通知。 通知url必须为直接可访问的url,不能携带参数。示例: “http://pay.weixin.qq.com/wxpay/pay.action”

通知规则

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

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

通知参数

参数名

变量

类型[长度限制]

必填

描述

返回状态码

return_code

string[1,16]

SUCCESS/FAIL
非签约结果标识,签约发起是否成功需要查看result_code来判断。
示例值:SUCCESS

返回信息

return_msg

string[1,128]

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

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

参数名

变量

类型[长度限制]

必填

描述

业务结果

result_code

string[1,16]

SUCCESS/FAIL
示例值:SUCCESS

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

参数名

变量

类型[长度限制]

必填

描述

商户号

mch_id

string[1,32]

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

子商户号

sub_mch_id

string[1,32]

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

签约协议号

contract_code

string[1,128]

商户侧的签约协议号,由商户生成,只能是数字、大小写字母的描述。
示例值:100000

模板id

plan_id

string[1,28]

协议模板id,设置路径见开发步骤
示例值:12535

用户标识

openid

string[1,32]

同一个Appid下,用户的唯一标识 (注意:商户记录的签约用户的openid ,需以微信侧回调通知的openid为准,不建议商户使用自行记录的openid,避免扣款用户和签约用户对不上)
示例值:onqOjjmM1tad-3ROpncN-yUfa6ua

用户子标识

sub_openid

string[1,32]

sub_appid下,用户的唯一标识(注意:商户记录的签约用户的sub_openid ,需以微信侧回调通知的sub_openid为准,不建议商户使用自行记录的sub_openid,避免扣款用户和签约用户对不上)
示例值:oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

签名

sign

string[1,32]

详见签名生成算法
示例值:C380BEC2BFD727A4B6845133519F3AD6

变更类型

change_type

string[1,32]

枚举值:
ADD:签约
DELETE:解约
商户可通过该字段判断是签约回调还是解约回调
示例值:ADD

操作时间

operate_time

string[1,32]

操作时间
示例值:2015-07-01 10:00:00

委托代扣协议id

contract_id

string[1,32]

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

协议到期时间

contract_expired_time

string[1,32]

协议到期时间,当change_type为ADD时有返回(目前协议时间为长期有效,可以忽略该字段)
示例值:2016-07-01 10:00:00

协议解约方式

contract_termination_mode

int

当change_type为DELETE时有返回
1:有效期过自动解约(预留功能)
2:用户主动解约
3:商户API解约
4:商户平台解约
5:注销(用户微信账户注销)
7:用户联系客服发起的解约
示例值:3

请求序列号

request_serial

int64

商户请求签约时的序列号,要求唯一性。序列号主要用于排序,不作为查询条件,纯数字,范围不能超过int64的范围(9223372036854775807)。
示例值:1695

通知示例:

示例

1
2<xml>
3  <return_code><![CDATA[SUCCESS]]></return_code>
4  <result_code><![CDATA[SUCCESS]]></result_code>
5  <sign><![CDATA[C380BEC2BFD727A4B6845133519F3AD6]]></sign>
6  <mch_id>10010404</mch_id>
7  <sub_mch_id>10010405</sub_mch_id>
8  <contract_code>100001256</contract_code>
9  <openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6ua]]></openid>
10  <plan_id><![CDATA[123]]></plan_id>
11  <change_type><![CDATA[ADD]]></change_type>
12  <operate_time><![CDATA[2015-07-01 10:00:00]]></operate_time>
13  <contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>
14</xml>
15                

商户通知应答

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

微信支付签约、解约通知出口IP列表:

如果商户侧配置了防火墙,需要对商户回调通知功能开通下面白名单网段: 101.226.233.128/25

 

 

反馈
咨询
目录
置顶