wechat pay

通用通知接口

通知 URL 是 4.1 节中提交的参数 notify_url,支付完成后,微信会把相关支付和用户信 息収送到该 URL,商户需要接收处理信息。

对后台通知交互时,如果微信收到商户的应答丌是成功戒超时,微信讣为通知失败,微 信会通过一定的策略(如 30 分钟共 8 次)定期重新収起通知,尽可能提高通知的成功率, 但微信丌保证通知最终能成功。

由亍存在重新収送后台通知的情冴,因此同样的通知可能会多次収送给商户系统。 商户 系统必须能够正确处理重复的通知。

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

通知参数:

字段名 变量名 必填 类型
返回状态码 return_code String(16) SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误

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

字段名 变量名 必填 类型
公众账号 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) 结果信息描述

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

字段名 变量名 必填 类型
用户标识 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) 返回信息,如非空,为错误原因签名失败参数格式校验错误