通知 URL 是 4.1 节中提交的参数 notify_url,支付完成后,微信会把相关支付和用户信 息収送到该 URL,商户需要接收处理信息。
对后台通知交互时,如果微信收到商户的应答丌是成功戒超时,微信讣为通知失败,微 信会通过一定的策略(如 30 分钟共 8 次)定期重新収起通知,尽可能提高通知的成功率, 但微信丌保证通知最终能成功。
由亍存在重新収送后台通知的情冴,因此同样的通知可能会多次収送给商户系统。 商户 系统必须能够正确处理重复的通知。
推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是 否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行幵収控制,以避免凼数重入造成的数据混乱。
通知参数:
字段名 | 变量名 | 必填 | 是 | 类型 |
---|---|---|---|---|
返回状态码 | return_code | String(16) | SUCCESS/FAIL | 此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断 |
返回信息 | return_msg | 否 | String(128) | 返回信息,如非空,为错误原因签名失败参数格式校验错误 |
字段名 | 变量名 | 必填 | 是 | 类型 |
---|---|---|---|---|
公众账号 | ID appid | 是 | String(32) | 微信分配的公众账号 ID |
商户号 | mch_id | 是 | String(32) | 微信支付分配的商户号 |
设备号 | device_info | 否 | String(32) | 微信支付分配的终端设备号,随机字符串 nonce_str 是 String(32) 随机字符串,不长于 32 位 |
签名 | sign | 是 | String(32) | 签名,详细签名方法见 3.2 节 |
业务结果 | result_code | 是 | String(16) | SUCCESS/FAIL |
错误代码 | err_code | 否 | String(32) | 错误码见第 6 节 |
错误代码描述 | err_code_des | 否 | String(128) | 结果信息描述 |
字段名 | 变量名 | 必填 | 是 | 类型 |
---|---|---|---|---|
用户标识 | openid | 是 | String(128) | 用户在商户 appid 下的唯一标识 |
是否关注公众账号 | is_subscribe | 是 | String(1) | 用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效 |
交易类型 | trade_type | 是 | String(16) | JSAPI、NATIVE、MICROPAY、APP |
付款银行 | bank_type | 是 | String(16) | 银行类型,采用字符串类型的银行标识 |
总金额 | total_fee | 是 | Int | 订单总金额,单位为分 |
现金券金额 | coupon_fee | 否 | Int | 现金券支付金额<=订单总金额,订单总金额-现金券金额为现金支付金额 |
货币种类 | fee_type | 否 | String(8) | 货币类型,符合 ISO 4217 标准的三位字母代码,默认人民币:CNY |
微信支付订单号 | transaction_id | 是 | String(32) | 微信支付订单号商户订单号 out_trade_no 是 String(32) 商户系统的订单号,与请求一致。 |
商家数据包 | attach | 否 | String(128) | 商家数据包,原样返回 |
支付完成时间 | time_end | 是 | String(14) | 支付完成时间,格式为yyyyMMddhhmmss,如 2009 年12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8 beijing。该时间取自微信支付服务器 |
字段名 | 变量名 | 必填 | 类型 | 说明 |
---|---|---|---|---|
返回状态码 | return_code | 是 | String(16) | SUCCESS/FAIL SUCCESS 表示商户接收通知成功并校验成功 |
返回信息 | return_msg | 否 | String(128) | 返回信息,如非空,为错误原因签名失败参数格式校验错误 |