文档名称

统一预授权接口文档

文档说明:

本文件描述微信或者支付宝用于预授权业务解决方案。供内部相关开发和技术支持人员与商户平台服务方技术人员使用。文档分别从交互模式、签名、接口、注意事项等方面详细介绍了工作方式和开发过程,可以帮助开发人员快速入门并掌握开发技能,同时也可以作为日后接口参数以及参数类型的速查手册。

文档版本:

版本号 修定人 制定日期 修订日期
1.0.0 杨铝杰 2020-04-22 2020-04-22
1.0.1 杨铝杰 2020-04-22 2020-08-14

文档变更说明:

2020年8月14日
查询接口添加新的参数,包括商户预授权完成单号,商户预授权完成撤销单号,商户预授权撤销单号,平台预授权完成单号,平台预授权撤销单号,平台预授权完成撤销单号。

背景介绍:

流程说明:

业务实现流程
小额支付业务
使用场景:

用于需要用到预授权业务的场景,比如酒店等

接口说明:

被扫预授权
业务功能

收银员使用扫码设备读取微信用户刷卡授权码以后, 二维码或条码信息传送至商户收银台, 由商户收银台或者商户后台调用该接口发起支付对用户进行预授权

交互模式

请求: 后台请求交互模式
返回结果: 后台请求交互模式

请求 url:

https://pay.xrtpay.cn/xrtpay/gateway

请求参数列表

POST XML 内容体进行请求

字段名 变量名 必填 类型 说明
业务参数 ———— ———— ———— ————
接口类型 service String(32) unified.pre_auth.micropay
版本号 version String(8) 默认值是 2.0
字符集 charset String(8) 可选值 UTF-8,默认为 UTF-8
签名方式 sign_type String(8) 取值:MD5 默认: MD5
商户号 mch_id String(32) 商户号, 由技术部分配
商户订单号 out_pre_auth_no String(32) 商户预授权订单号,确保在商户系统唯一
设备号 device_info String(32) 终端设备号(开头匹配类型统计)
商品描述 body String(127) 商品描述
附加信息 attach String(128) 商户附加信息,可做扩展参数, 255 字符内
总金额 pre_auth_fee Int 总金额,以分为单位,不允许包含任何字、符号
终端 IP mch_create_ip String(16) 订单生成的机器 IP
授权码 auth_code String(128) 扫码支付授权码, 设备读取用户展示的条码或者二维码信息
订单日期 trade_date String(8) 订单生成日期,如20200422
订单时间 trade_time String(8) 订单时间,如202020
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
签名 sign String(32) MD5 签名结果, 详见“ 下文数字签名 MD5 签名规则”
返回结果

数据按 XML 的格式实时返回

字段名 变量名 必填 类型 说明
版本号 version String(8) version 默认值是 2.0。
字符集 charset String(8) 可选值 UTF-8,默认为 UTF-8。
签名方式 sign_type String(8) 取值: MD5 默认: MD5
返回状态码 status String(16) 0 表示成功非0 表示失败此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断
返回信息 message String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误
以下字段在 status 为 0 的时候有返回
业务结果 result_code String(16) 0 表示成功非 0 表示失败
商户号 mch_id String(32) 商户号, 由技术部分配
设备号 device_info String(32) 终端设备号
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
错误代码 err_code String(32) 具体错误码请看文档最后错误码列表
错误代码描述 err_msg String (128) 结果信息描述
结果信息描述 sign String(32 MD5 签名结果, 详见“下文数字签名 签名规则”
以下字段在 status 和 result_code 都为 0 的时候有返回
用户标识 openid String(128) 用户在商户 appid 下的唯一标识
交易类型 trade_type String(16) pay.weixin.micropaypay.qq.micropaypay.alipay.micropay
预授权结果 pre_auth_result Int 0-成功,其它-失败
预授权结果信息 pre_auth_info String 预授权结果信息为 0-时,该字段为空
平台预授权订单号 pre_auth_no String(32) 平台预授权订单号,可用于后续预授权交易
授权标识应答码 authid_resp_code String(32) 成功时响应
商户预授权订单号 out_pre_auth_no String(32) 商户预授权订单号,可用于后续预授权交易
总金额 pre_auth_fee Int 总金额, 以分为单位, 不允许包含任何字、符号
用户 openid openid String(128) 用户在受理商户 appid 下的唯一标识
买家支付宝账号 buyer_logon_id String(128) 买家支付宝账号
买家支付宝用户 ID buyer_user_id String(128) 买家在支付宝的用户 id
卡号唯一标识(云 闪付) cardnod String(128) 买家卡号对应的唯一标识
脱敏卡号(云闪付) ds_cardno String(128) 脱敏后卡号,前 6 后 4,中间为*
附加信息 attach String(128) 商家数据包, 原样返回
是否原生支付 is_raw String(1) 是否原生支付 1-是 其他-否
预授权时间 time_end String(14) 完成预授权交易的时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8 beijing。该时间取自平台服务器

当调用扣款接口返回支付中或失败状态, 需要调用查询接口查询订单实际支付状态 。 当遇到用户超过日限额需要输入密码返回“支付中” 的状态, 建议 10 秒调一次查询, 调用 3 次后还未成功作支付超时处理。

预授权查询接口
业务功能

当支付返回失败, 或收银系统超时需要取消交易, 可以调用该接口。 接口逻辑 : 支付失败的关单, 支付成功的撤销支付。 注意: 支付成功的单如需实现相同功能请调用退款接口。

交互模式

请求: 后台请求交互模式
返回结果: 后台请求交互模式

请求 url:

https://pay.xrtpay.cn/xrtpay/gateway

请求参数列表

POST XML 内容体进行请求

字段名 变量名 必填 类型 说明
业务参数 ———— ———— ———— ————
接口类型 service String(32) unified.pre_auth.query
版本号 version String(8) 默认值是 2.0
字符集 charset String(8) 可选值UTF-8,默认为 UTF-8
签名方式 sign_type String(8) 取值:MD5 默认:MD5
商户号 mch_id String(32) 商户号,由技术部分配
商户预授权单号 out_pre_auth_no String(32) 商户预授权单号
商户预授权撤销单号 out_pre_auth_refund_no String(32) 商户预授权撤销单号
商户预授权完成单号 out_pre_auth_done_no String(32) 商户预授权完成单号
预授权完成撤销单号 out_pre_auth_done_refund_no String(32) 商户预授权完成单号
平台预授权单号 pre_auth_no String(32) 平台预授权单号
平台预授权撤销单号 pre_auth_refund_no String(32) 平台预授权撤销单号
平台预授权完成单号 pre_auth_done_no String(32) 平台预授权完成单号
平台预授权完成撤销单号 pre_auth_done_refund_no String(32) 平台预授权完成撤销单号
原订单日期 old_trade_date String(32) 原订单日期 YYYYMMDD,对应各个单号的发起日期
随机字符串 nonce_str String(32) 随机字符串,不长于32位
签名 sign String(32) MD5 签名结果,详见“下文数字签名 MD5 签名规则”
返回结果

数据按 XML 的格式实时返回

字段名 变量名 必填 类型 说明
版本号 version String(8) 默认值是 2.0。
字符集 charset String(8) 默认为 UTF-8。
签名方式 sign_type String(8) 取值: MD5 默认: MD5
返回状态码 status String(16) 0 表示成功非 0 表示失败此字段是通信标识, 非交易标识, 交易是否成功需要查看 result_code 来判断
返回信息 message String(128) 返回信息, 如非空,为错误原因签名失败参数格式校验错误
以下字段在 status 为 0 的时候有返回
业务结果 result_code String(16) 0 表示成功非 0 表示失败
商户号 mch_id String(32) 商户号, 由技术人员分配
设备号 device_info String(32) 商户号, 由技术人员分配
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
错误代码 err_code String(32) 具体错误码请看文档最后错误码列表
错误代码描述 err_msg String(128) 结果信息描述
签名 sign String(32) MD5 签名结果, 详见“下文数字签名 MD5 签名规则”
以下字段在 status 为 0 和result_code为0 的时候有返回
订单状态 trade_state String(31) 0—成功
1-失败
2-帐态未明

以下字段在 trade_state 为 “0” 是返回

查询交易类型为预授权订单时返回如下字段

商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权单号 pre_auth_no String(64) 平台预授权订单号
交易类型 trade_type String pay.weixin.micropay / pay.alipay.micropay
预授权交易时间 time_end String(14) 支付完成时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时 区为 GMT+8 beijing。该时间取自平台服务器
授权标识应答码 authid_resp_code String(32) 预授权成功时响应
用户openid openid String(128) 用户在受理商户 appid 下的唯一标识
买家支付宝账号 buyer_logon_id String(64) 买家支付宝账号
买家支付宝用户ID buyer_user_id String(28) 买家在支付宝的用户id

查询交易类型为预授权撤销订单时返回如下字段:

商户预授权撤销单号 out_pre_auth_refund_no String(64) 商户预授权撤销单号
平台预授权撤销单号 pre_auth_refund_no String(64) 平台预授权撤销单号
平台预授权单号 pre_auth_no String(64) 平台预授权订单号
商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
预授权金额 pre_auth_fee Int 以分为单位,不允许包含任何字、符号
预授权撤销时间 time_end String(14) 支付完成时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时 区为 GMT+8 beijing。该时间取自平台服务器
授权标识应答码 authid_resp_code String(32) 成功时响应

查询交易类型为预授权完成订单时返回如下字段:

商户预授权完成单号 out_pre_auth_done_no String(64) 商户预授权完成单号
平台预授权完成单号 pre_auth_done_no String(64) 平台预授权完成单号
商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权单号 pre_auth_no String(64) 平台预授权订单号
预授权金额 pre_auth_fee Int 以分为单位,不允许包含任何字、符号
预授权完成金额 pre_auth_done_fee Int 格式同上
预授权撤销时间 time_end String(14) 支付完成时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时 区为 GMT+8 beijing。该时间取自平台服务器
授权标识应答码 authid_resp_code String(32) 成功时响应

查询交易类型为预授权完成撤销订单时返回如下字段:

商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权单号 pre_auth_no String(64) 平台预授权订单号
商户预授权完成撤销单号 out_pre_auth_done_refund_no String(64) 商户预授权完成撤销单号,trade_state 为 1 且发起过预授 权完成撤销时存在
平台预授权完成撤销单号 pre_auth_done_refund_no String(64) 平台预授权完成撤销单号,trade_state 为 1 且发起过预授 权完成撤销时存在
预授权金额 pre_auth_fee Int 以分为单位,不允许包含任何字、符号
预授权完成撤销交易时间 pre_auth_done_refund_time String(14) 格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时 区为 GMT+8 beijing。该时间取自平台服务器
授权标识应答码 authid_resp_code String(32) 预授权成功时响应的授权标识应答码
预授权撤消接口
业务功能

根据当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还 给买家,银联将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。交易超 过约定时间(签约时设置的可退款时间)的订单无法进行退款。

交互模式

请求: 后台请求交互模式
返回结果: 后台请求交互模式

请求 url:

https://pay.xrtpay.cn/xrtpay/gateway

请求参数列表

POST XML 内容体进行请求

字段名 变量名 必填 类型 说明
业务参数 ———— ———— ———— ————
接口类型 service String(32) unified.micropay.pre_auth_refund
版本号 version String(8) 默认值是 2.0
字符集 charset String(8) 可选值UTF-8,默认为 UTF-8
签名方式 sign_type String(8) 取值:MD5 默认:MD5
商户号 mch_id String(32) 商户号,由技术部分配
订单日期 trade_date String(8) yyyymmdd,如 20190920
订单时间 trade_time String(6) HHMMSS,如 190209
商户预授权单号 out_pre_auth_no String(64) 商户系统内部的原预授权交易订单 号out_pre_auth_no和 pre_auth_no 至少一个必 填,同时存在时 pre_auth_no 优先
平台预授权单号 pre_auth_no String(64) 原预授权交易平台订单号, out_pre_auth_no 和 pre_auth_no 至少一个必填,同时存在时 pre_auth_no 优先
授权标识应答码 authid_resp_code String(32) 预授权成功时响应的授权标识应答码
商户预授权撤销单号 out_pre_auth_refund_no String(64) 商户预授权撤销单号,32 个字符内、可包含字母, 确保在商户系统唯一。同个预授权撤销单号多次请 求,平台当一个单处理,只会退一次款。如果出现退款不成功,请采用预授权撤销单号重新发起,避 免出现重复撤销。撤销金额与原预授权金额一致
原预授权订单日期 old_trade_date String(8) 原预授权订单日期 YYYYMMDD
随机字符串 nonce_str String(32) 随机字符串,不长于32位
签名 sign String(32) MD5 签名结果,详见“下文数字签名 MD5 签名规则”
返回结果

数据按 XML 的格式实时返回

字段名 变量名 必填 类型 说明
版本号 version String(8) 默认值是 2.0。
字符集 charset String(8) 默认为 UTF-8。
签名方式 sign_type String(8) 取值: MD5 默认: MD5
返回状态码 status String(16) 0 表示成功非 0 表示失败此字段是通信标识, 非交易标识, 交易是否成功需要查看 result_code 来判断
返回信息 message String(128) 返回信息, 如非空,为错误原因签名失败参数格式校验错误
以下字段在 status 为 0 的时候有返回
业务结果 result_code String(16) 0 表示成功非 0 表示失败
商户号 mch_id String(32) 商户号, 由技术人员分配
设备号 device_info String(32) 终端设备号
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
错误代码 err_code String(32) 具体错误码请看文档最后错误码列表
错误代码描述 err_msg String(128) 结果信息描述
签名 sign String(32) MD5 签名结果, 详见“下文数字签名 MD5 签名规则”
以下字段在 status 和 result_code 都为 0 的时候有返回
商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权单号 pre_auth_no String(64)
商户预授权撤销单号 out_pre_auth_refund_no String(64)
平台预授权撤销单号 pre_auth_refund_no String(64)
预授权金额 pre_auth_fee Int 以分为单位,撤销的预授权金额
预授权撤销时间 time_end String(14) 完成预授权撤销交易的时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8 beijing。该时间取自平台服务器
预授权完成接口
业务功能

根据当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还 给买家,银联将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。交易超 过约定时间(签约时设置的可退款时间)的订单无法进行退款。

交互模式

请求: 后台请求交互模式
返回结果: 后台请求交互模式

请求 url:

https://pay.xrtpay.cn/xrtpay/gateway

请求参数列表

POST XML 内容体进行请求

字段名 变量名 必填 类型 说明
业务参数 ———— ———— ———— ————
接口类型 service String(32) unified.micropay.pre_auth_done
版本号 version String(8) 默认值是 2.0
字符集 charset String(8) 可选值UTF-8,默认为 UTF-8
签名方式 sign_type String(8) 取值:MD5 默认:MD5
商户号 mch_id String(32) 商户号,由技术部分配
订单日期 trade_date String(8) yyyymmdd,如 20190920
订单时间 trade_time String(6) HHMMSS,如 190209
商户预授权单号 out_pre_auth_no String(64) 商户系统内部的原预授权交易订单 号, out_pre_auth_no和 pre_auth_no 至少一个必填,同时存在时 pre_auth_no 优先
平台预授权单号 pre_auth_no String(64) 原预授权交易平台订单号, out_pre_auth_no 和 pre_auth_no 至少一个必填,同时存在时 pre_auth_no 优先
授权标识应答码 authid_resp_code String(32) 预授权成功时响应的授权标识应答码
商户预授权完成单号 out_pre_auth_done_no String(64) 商户预授权完成单号,32 个字符内、可包含字母, 确保在商户系统唯一。
原预授权订单日期 old_trade_date String(8) 原预授权订单日期 YYYYMMDD
预授权完成金额 pre_auth_done_fee Int 订单总金额,单位为分,不能超过原预授权金额
随机字符串 nonce_str String(32) 随机字符串,不长于32位
签名 sign String(32) MD5 签名结果,详见“下文数字签名 MD5 签名规则”
返回结果

数据按 XML 的格式实时返回

字段名 变量名 必填 类型 说明
版本号 version String(8) 默认值是 2.0。
字符集 charset String(8) 默认为 UTF-8。
签名方式 sign_type String(8) 取值: MD5 默认: MD5
返回状态码 status String(16) 0 表示成功非 0 表示失败此字段是通信标识, 非交易标识, 交易是否成功需要查看 result_code 来判断
返回信息 message String(128) 返回信息, 如非空,为错误原因签名失败参数格式校验错误
以下字段在 status 为 0 的时候有返回
业务结果 result_code String(16) 0 表示成功非 0 表示失败
商户号 mch_id String(32) 商户号, 由技术人员分配
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
错误代码 err_code String(32) 具体错误码请看文档最后错误码列表
错误代码描述 err_msg String(128) 结果信息描述
签名 sign String(32) MD5 签名结果, 详见“下文数字签名 MD5 签名规则”
以下字段在 status 和 result_code 都为 0 的时候有返回
商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权单号 pre_auth_no String(64)
平台预授权完成单号 pre_auth_done_no String(64)
商户预授权完成单号 out_pre_auth_done_no String(64) 商户系统内部的订单号,用于预授权完成撤销
预授权金额 pre_auth_fee Int 以分为单位
预授权完成金额 pre_auth_done_fee Int 以分为单位
预授权完成时间 time_end String(14) 完成预授权完成交易的时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8 beijing。该时间取自平台服务器
预授权完成撤销接口
业务功能

根据当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还 给买家,银联将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。交易超 过约定时间(签约时设置的可退款时间)的订单无法进行退款。

交互模式

请求: 后台请求交互模式
返回结果: 后台请求交互模式

请求 url:

https://pay.xrtpay.cn/xrtpay/gateway

请求参数列表

POST XML 内容体进行请求

字段名 变量名 必填 类型 说明
业务参数 ———— ———— ———— ————
接口类型 service String(32) unified.micropay.pre_auth_done_refund
版本号 version String(8) 默认值是 2.0
字符集 charset String(8) 可选值UTF-8,默认为 UTF-8
签名方式 sign_type String(8) 取值:MD5 默认:MD5
商户号 mch_id String(32) 商户号,由技术部分配
订单日期 trade_date String(8) yyyymmdd,如 20190920
订单时间 trade_time String(6) HHMMSS,如 190209
商户预授权完成单号 out_pre_auth_done_no String(64) 商户系统内部的原预授权完成订单 号, out_pre_auth_done_no 和 pre_auth_done_no 至少一个必填,同时存在时 pre_auth_done_no 优先
平台预授权完成单号 pre_auth_done_no String(64) 原预授权完成平台订单 号, out_pre_auth_done_no 和 pre_auth_done_no 至少一个必填,同时存在时 pre_auth_done_no 优先
授权标识应答码 authid_resp_code String(32) 预授权成功时响应的授权标识应答码
商户预授权完成撤销单号 out_pre_auth_done_refund_no String(64) 商户预授权完成撤销单号,32 个字符内、可包含 字母,确保在商户系统唯一。
原预授权完成订单日期 old_trade_date String(8) 原预授权完成订单日期 YYYYMMDD
随机字符串 nonce_str String(32) 随机字符串,不长于32位
签名 sign String(32) MD5 签名结果,详见“下文数字签名 MD5 签名规则”
返回结果

数据按 XML 的格式实时返回

字段名 变量名 必填 类型 说明
版本号 version String(8) 默认值是 2.0。
字符集 charset String(8) 默认为 UTF-8。
签名方式 sign_type String(8) 取值: MD5 默认: MD5
返回状态码 status String(16) 0 表示成功非 0 表示失败此字段是通信标识, 非交易标识, 交易是否成功需要查看 result_code 来判断
返回信息 message String(128) 返回信息, 如非空,为错误原因签名失败参数格式校验错误
以下字段在 status 为 0 的时候有返回
业务结果 result_code String(16) 0 表示成功非 0 表示失败
商户号 mch_id String(32) 商户号, 由技术人员分配
随机字符串 nonce_str String(32) 随机字符串, 不长于 32 位
错误代码 err_code String(32) 具体错误码请看文档最后错误码列表
错误代码描述 err_msg String(128) 结果信息描述
签名 sign String(32) MD5 签名结果, 详见“下文数字签名 MD5 签名规则”
以下字段在 status 和 result_code 都为 0 的时候有返回
商户预授权单号 out_pre_auth_no String(64) 商户预授权订单号
平台预授权完成单号 pre_auth_done_no String(64)
平台预授权完成撤销单号 pre_auth_done_refund_no String(64)
商户预授权完成撤销单号 out_pre_auth_done_refund_no String(64)
预授权完成金额 pre_auth_done_fee Int 以分为单位,撤销的预授权完成金额
预授权完成撤销时间 time_end String(14) 完成预授权完成交易的时间,格式为 yyyyMMddHHmmss,如 2009 年 12 月 27 日 9 点 10 分 10 秒表示为 20091227091010。时区为 GMT+8 beijing。该时间取自平台服务器

数据格式:

采用 HTTPS 标准的 POST 协议, 为了保证接收方接收数据正确,传输数据必须签名。

<xml>
<service>unified.trade.micropay</service>
<attach><![CDATA[att]]></attach>
<body><![CDATA[支付测试]]></body>
<device_info>1000</device_info>
<mch_id>10000100</mch_id>
<nonce_str>adf880d5c8986bd0deb6423c92c9d948</nonce_str>
<out_trade_no>1406046836</out_trade_no>
<spbill_create_ip>127.0.0.1</spbill_create_ip>
<total_fee>1</total_fee>
<sign><![CDATA[F53145E553092CE52E4CAA4D2B49A91C]]></sign>
</xml
XML 数据格式

采用标准 XML 协议, 所有参数只存在一级节点中, 不采用多级节点嵌套。
协议级错误返回:

<xml>
<status>500</status>
<message><![CDATA[SYSERR]]></message>
</xml>

正确返回数据:

<xml>
<status>0</status>
<message><![CDATA[OK]]></message>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<device_info><![CDATA[1000]]></device_info>
<nonce_str><![CDATA[FvYSnPuFFPkAr77M]]></nonce_str>
<sign><![CDATA[63238039D6E43634297CF2A6EB5F3B72]]></sign>
<result_code>0</result_code>
<openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<trade_type><![CDATA[MICROPAY]]></trade_type>
<bank_type><![CDATA[CCB_CREDIT]]></bank_type>
<total_fee>1</total_fee>
<coupon_fee>0</coupon_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<transaction_id><![CDATA[1008450740201407220000058756]]></transaction_id>
<out_trade_no><![CDATA[1406033828]]></out_trade_no>
<attach><![CDATA[att]]></attach>
<time_end><![CDATA[20140722160655]]></time_end>
</xml>

业务级错误返回:

<xml>
<status>0</status>
<message><![CDATA[OK]]></message>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<device_info><![CDATA[1000]]></device_info>
<nonce_str><![CDATA[sthBJ9QyUG6vkrjJ]]></nonce_str>
<sign><![CDATA[6277A96D7875D4FF23AA7B6A4C3046AB]]></sign>
<result_code>1</result_code>
<err_code><![CDATA[AUTHCODE_EXPIRE]]></err_code>
<err_code_des><![CDATA[二维码已过期, 请刷新再试]]></err_code_des>
</xml>

一般有返回有 status 参数, 0 表示调用成功; 非 0 表示调用失败。

数字签名:

为了保证数据传输过程中的数据真实性和完整性, 我们需要对数据进行数字签名, 在接收签名数据之后进行签名校验。
数字签名有两个步骤, 先按一定规则拼接要签名的原始串, 再选择具体的算法和密钥计算出签名结果。
一般失败的结果不签名。

签名原始串

无论是请求还是应答, 签名原始串按以下方式组装成字符串:
1、 除 sign 字段外, 所有参数按照字段名的 ascii 码从小到大排序后使用 QueryString 的格式(即key1=value1&key2=value2…) 拼接而成, 空值不传递, 不参与签名组串。
2、 签名原始串中, 字段名和字段值都采用原始值, 不进行 URL Encode。
3、 …返回的应答或通知消息可能会由于升级增加参数, 请验证应答签名时注意允许这种情况。
举例:
调用某个接口, 接口有如下字段:

<xml><body><![CDATA[测试支付]]></body>
<mch_create_ip><![CDATA[127.0.0.1]]></mch_create_ip>
<mch_id><![CDATA[001075552110006]]></mch_id>
<nonce_str><![CDATA[1409196838]]></nonce_str>
<notify_url><![CDATA[http://227.0.0.1:9001/javak/sds?123&23=3]]></notify_url>
<out_trade_no><![CDATA[141903606228]]></out_trade_no>
<service><![CDATA[unified.trade.micropay]]></service>
<sign><![CDATA[83684D9546F261997EFF2ECFAC372583]]></sign>
<total_fee><![CDATA[1]]></total_fee>
</xml>
正确的签名字段排序为:
body=测试支付
&mch_create_ip=127.0.0.1&mch_id=001075552110006&nonce_str=1409196838&notify_url=http://227.0.0.1:9001/javak/sds?123&23=3&out_trade_no=141903606228&service=pay.
weixin.scancode&total_fee=1
签名算法

目前暂只支持 MD5 签名
MD5 签名
MD5 是一种摘要生成算法, 通过在签名原始串后加上商户通信密钥的内容, 进行 MD5 运算, 形成的摘要字符串即为签名结果。 为了方便比较, 签名结果统一转换为大写字符。
注意: 签名时将字符串转化成字节流时指定的编码字符集应与参数 charset 一致。
MD5 签名计算公式:
sign = Md5(原字符串&key=商户密钥). toUpperCase
如:
假设以下为 XML 传入参数:

<xml><body><![CDATA[测试支付]]></body>
<mch_create_ip><![CDATA[127.0.0.1]]></mch_create_ip>
<mch_id><![CDATA[001075552110006]]></mch_id>
<nonce_str><![CDATA[1409196838]]></nonce_str>
<notify_url><![CDATA[http://227.0.0.1:9001/javak/sds?123&23=3]]></notify_url>
<out_trade_no><![CDATA[141903606228]]></out_trade_no>
<service><![CDATA[unified.trade.micropay]]></service>
<sign><![CDATA[83684D9546F261997EFF2ECFAC372583]]></sign>
<total_fee><![CDATA[1]]></total_fee>
</xml>

假设商户密钥为: e1cf0ddcf6b47b59c351565d8ad717af
i: 经过 a 过程 URL 键值对字典序排序后的字符串 string1 为:
body=测试支付
&mch_create_ip=127.0.0.1&mch_id=001075552110006&nonce_str=1409196838&notify_url=http://227.0.0.1:9001/javak/sds?123&23=3&out_trade_no=141903606228&service=pay.weixin.scancode&total_fee=1
ii: 经过 b 过程后得到 sign 为:
sign=md5(string1&key=e1cf0ddcf6b47b59c351565d8ad717af).toUpperCase
=md5(body=测试支付
&mch_create_ip=127.0.0.1&mch_id=001075552110006&nonce_str=1409196838&notify_url=http://227.0.0.1:9001/javak/sds?123&23=3&out_trade_no=141903606228&service=unified.trade.micropay&total_fee=1&key=e1cf0ddcf6b47b59c351565d8ad717af).toUpperCase()
=”83684D9546F261997EFF2ECFAC372583”

注意事项:

1、 所有涉及到金额的单位都是分,最小的单位是 1 分,不能有小数出现
2、 其它注意事项
( 1) 参数大小写问题
请留意文档中要求的字符大小写问题, 如 “ md5 运算后, 字符串的字符要转换为大写” 。
( 2) 参数格式问题
所有传入参数,均为字符串类型,请注意文档中各处的具体要求。
( 3) 时间戳问题
请使用 Linux 时间戳, 注意为字符串格式。 精确到秒, 不需要到毫秒, 即 10 位数字。
( 4) 同一商户订单号支付问题
商户的 out_trade_no 必须全局唯一, 调试和生产环境, 都需要使用唯一的订单号。 注意:
当商户的同一个商户号绑定了多种支付方式也需要加标识来区分,不能出现重复。当发起支付返回失败时一定要用原订单的 out_trade_no 而不能重新生成新的订单号发起支付,避免同一单重复支付。

错误码 说明 类型
66227001 商户签名校验失败 QQ 钱包
66227002 商户没有 QQ 钱包支付权限 QQ 钱包
66227003 不在扫码支付的允许列表 QQ 钱包
66227004 字符集转换失败 QQ 钱包
66227005 需要用户输入支付密码 QQ 钱包
66227006 用户授权码无效 QQ 钱包
66227007 用户证书非法 QQ 钱包
66227008 余额不足 QQ 钱包
66227009 撤单失败, 订单已撤单 QQ 钱包
66227010 撤单失败, 订单已支付成功 QQ 钱包
66227011 撤单失败, 订单已退款 QQ 钱包
TRADE_SETTLE_ERROR 分账信息校验失败 支付宝
TRADE_BUYER_NOT_MATCH 交易买家不匹配 支付宝
CONTEXT_INCONSISTENT 交易信息被篡改 支付宝
TRADE_HAS_SUCCESS 交易已经支付 支付宝
TRADE_HAS_CLOSE 交易已经关闭 支付宝
REASON_ILLEGAL_STATUS 交易的状态不合法 支付宝
EXIST_FORBIDDEN_WORD 订单信息中包含违禁词 支付宝
ACCESS_FORBIDDEN 没有权限使用该产品 支付宝
SELLER_NOT_EXIST 卖家不存在 支付宝
BUYER_NOT_EXIST 买家不存在 支付宝
BUYER_ENABLE_STATUS_FORBID 买家状态非法, 无法继续交易 支付宝
BUYER_SELLER_EQUAL 卖家买家账号相同, 不能进行交易 支付宝
INVALID_PARAMETER 参数无效 支付宝
INVALID_RECEIVE_ACCOUNT 卖家不在设置的收款账户列表之中 支付宝
SYSTEMERROR 接口返回( 系统) 错误 微信
PARAM_ERROR 参数错误 微信
ORDERPAID 订单已支付 微信
NOAUTH 商户无权限 微信
AUTHCODEEXPIRE 二维码已过期, 请用户在微信上刷新后再试 微信
NOTENOUGH 余额不足 微信
NOTSUPORTCARD 不支持卡类型 微信
ORDERCLOSED 订单已关闭 微信
ORDERREVERSED 订单已撤销 微信
BANKERROR 银行系统异常 微信
USERPAYING 用户支付中, 需要输入密码 微信
AUTH_CODE_ERROR 授权码参数错误 微信
AUTH_CODE_INVALID 授权码检验错误 微信
XML_FORMAT_ERROR XML 格式错误 微信
REQUIRE_POST_METHOD 请使用 post 方法 微信
Signature error 签名错误 微信
LACK_PARAMS 缺少参数 微信
NOT_UTF8 编码格式错误 微信
BUYER_MISMATCH 支付帐号错误 微信
APPID_NOT_EXIST APPID 不存在 微信
MCHID_NOT_EXIST MCHID 不存在 微信
OUT_TRADE_NO_USED 商户订单号重复 微信
APPID_MCHID_NOT_MATCH appid 和 mch_id 不匹配 微信
ORDERNOTEXIST 此交易订单号不存在 微信

问题排查:

备注:

  • 更多返回错误代码请看首页的错误代码描述
文档更新时间: 2021-03-06 11:16   作者:EricYang