开发者中心 › 验签规则
签名算法
签名生成的通用步骤如下:
第一步:排序拼接
设所有发送或者接收到的数据为集合 M,将集合 M 内非空参数值的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA。
特别注意以下重要规则:
◆ 参数名 ASCII 码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或支付中心主动通知签名时,传送的 sign 参数不参与签名,将生成的签名与该 sign 值作校验;
◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段。
第二步:MD5 加密
在 stringA 最后拼接上 key(即 StringA + "&key=" + 私钥)得到 stringSignTemp 字符串,并对 stringSignTemp 进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值 signValue。
示例代码(Java)
Java
Map<String, String> signMap = new HashMap<>();
signMap.put("platId", "1000");
signMap.put("mchOrderNo", "P0123456789101");
signMap.put("amount", "10000");
signMap.put("clientIp", "192.168.0.111");
signMap.put("returnUrl", "https://www.baidu.com");
signMap.put("notifyUrl", "https://www.baidu.com");
signMap.put("reqTime", "20190723141000");
signMap.put("version", "1.0");
签名过程示例
待签名值:
amount=10000&clientIp=192.168.0.111&mchOrderNo=P0123456789101¬ifyUrl=https://www.baidu.com&platId=1000&reqTime=20190723141000&returnUrl=https://www.baidu.com&version=1.0&key=EWEFD123RGSRETYDFNGFGFGSHDFGH
签名结果:4A5078DABBCE0D9C4E7668DACB96FF7A
最终请求支付系统参数:
amount=10000&clientIp=192.168.0.111&mchOrderNo=P0123456789101¬ifyUrl=https://www.baidu.com&platId=1000&reqTime=20190723141000&returnUrl=https://www.baidu.com&version=1.0&sign=4A5078DABBCE0D9C4E7668DACB96FF7A
开发者中心 › 接口文档 › 代扣签约申请
代扣签约申请
该接口用于协议支付统一签约申请。
| 环境 | 地址 |
| 正式环境 | https://pay.mrlc.cn/api/pay/unifiedSignSms |
| 请求方式 | POST |
| 请求类型 | application/json |
请求参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 |
| mchOrderNo | str | true | 50 | 商户订单号,只能是数字、大小写字母,且在同一个商户号下唯一 | ABC123456789 |
| appId | str | true | 24 | 应用ID | |
| reqTime | str | true | long | 请求时间,13位时间戳 | |
| version | str | true | 3 | 接口版本号,固定:1.0 | |
| sign | str | true | 32 | 签名值,详见签名算法 | |
| signType | str | true | 32 | 签名类型,默认 MD5 | MD5 |
| mchNo | str | true | 12 | 商户号 | |
| acctNo | str | true | 19 | 签约卡号 | |
| mobileNo | str | true | 19 | 签约手机号 | |
| identityType | str | true | 19 | 证件类型 | |
| identityCode | str | true | 19 | 证件号 | |
| cvv2 | str | 信用卡不可空 | 10 | 信用卡 CVV2 | |
| validDate | str | 信用卡不可空 | 6 | 贷记卡有效期 | 202503 |
| customerName | str | true | 19 | 持卡人姓名 | |
| channelCode | str | true | 19 | 渠道标识(详情见附录6) | |
| attach | str | false | 256 | 附加数据,原样返回 | |
| ip | str | false | 16 | 客户端 IP | |
| extendParam | Object | false | 256 | 扩展参数 | {"field1":"xxx","field2":"xxx"} |
拓展参数说明
| 参数 | 类型 | 是否必输 | 描述 | 示例值 |
| merUserId | str | true | 商户用户 ID(渠道为01时必填) | |
| withholdType | str | true | 代收款项(渠道为01时必填)详情见附录7 | |
响应参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 |
| code | int | true | 20 | 调用成功返回 0,失败返回错误代码 |
| msg | str | true | 200 | 调用成功或错误信息 |
| data | str | false | - | 响应数据 |
data 数据
| 参数 | 是否必输 | 类型 | 描述 |
| verifyCode | true | String | 签约凭证单号 |
| mchOrderNo | true | String | 返回商户传入的订单号 |
| attach | true | String | 原样返回附加数据 |
开发者中心 › 接口文档 › 代扣签约确认
代扣签约确认
该接口用于协议支付统一签约确认。
| 环境 | 地址 |
| 正式环境 | https://pay.mrlc.cn/api/pay/signConfirm |
| 请求方式 | POST |
| 请求类型 | application/json |
请求参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 |
| mchOrderNo | str | true | 50 | 商户订单号,只能是数字、大小写字母 | ABC123456789 |
| appId | str | true | 24 | 应用ID | |
| reqTime | str | true | long | 请求时间,13位时间戳 | |
| version | str | true | 3 | 接口版本号,固定:1.0 | |
| sign | str | true | 32 | 签名值,详见签名算法 | |
| signType | str | true | 32 | 签名类型,默认 MD5 | MD5 |
| mchNo | str | true | 12 | 商户号 | |
| verifyCode | str | true | 32 | 触发短信返回的凭证单号 | |
| smsCode | str | true | 16 | 短信验证码 | |
| channelCode | str | true | 19 | 渠道标识(详情见附录6) | |
| cvv2 | str | 信用卡不可空 | 3 | 银行卡 CVV2,数字 | |
| validDate | str | 信用卡不可空 | 256 | 银行卡有效期 | |
| attach | str | false | 256 | 附加数据,原样返回 | |
| ip | str | false | 16 | 客户端 IP | |
| extendParam | Object | false | 256 | 扩展参数 | |
响应参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 |
| code | int | true | 20 | 调用成功返回 0,失败返回错误代码 |
| msg | str | true | 200 | 调用成功或错误信息 |
| data | str | false | - | 响应数据 |
data 数据
| 参数 | 是否必输 | 类型 | 描述 |
| bankCode | true | String | 银行简码 |
| mchOrderNo | true | String | 返回商户传入的订单号 |
| bizProtocolNo | true | String | 业务协议号 |
| payProtocolNo | false | String | 支付协议号 |
| shortCardNo | true | String | 卡号后四位 |
| signInfo | false | String | 特定渠道签约信息 |
| attach | true | String | 原样返回附加数据 |
开发者中心 › 接口文档 › 代扣协议解约
代扣协议解约
该接口用于协议支付解约。
| 环境 | 地址 |
| 正式环境 | https://pay.mrlc.cn/api/pay/signCancel |
| 请求方式 | POST |
| 请求类型 | application/json |
请求参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 | 示例值 |
| mchOrderNo | str | true | 50 | 商户订单号,只能是数字、大小写字母 | ABC123456789 |
| appId | str | true | 24 | 应用ID | |
| reqTime | str | true | long | 请求时间,13位时间戳 | |
| version | str | true | 3 | 接口版本号,固定:1.0 | |
| sign | str | true | 32 | 签名值,详见签名算法 | |
| signType | str | true | 32 | 签名类型,默认 MD5 | MD5 |
| mchNo | str | true | 12 | 商户号 | |
| bizProtocolNo | str | true | 32 | 签约返回的业务协议号 | |
| payProtocolNo | str | true | 16 | 签约返回的支付协议号 | |
| acctNo | str | false | 32 | 签约卡号 | |
| channelCode | str | true | 19 | 渠道标识(详情见附录6) | |
| attach | str | false | 256 | 附加数据,原样返回 | |
| ip | str | false | 16 | 客户端 IP | |
| extendParam | Object | false | 256 | 扩展参数 | |
拓展参数说明
| 参数 | 类型 | 是否必输 | 描述 |
| merUserId | str | true(渠道为01时) | 商户用户 ID |
| withholdType | str | true(渠道为01时) | 代收款项,详情见附录7 |
响应参数
| 参数 | 类型 | 是否必输 | 最大长度 | 描述 |
| code | int | true | 20 | 调用成功返回 0,失败返回错误代码 |
| msg | str | true | 200 | 调用成功或错误信息 |
| data | str | false | - | 响应数据 |
data 数据
| 参数 | 是否必输 | 类型 | 描述 |
| mchOrderNo | true | String | 返回商户传入的订单号 |
| attach | true | String | 原样返回附加数据 |
开发者中心 › 接口文档 › 统一下单
统一下单接口
创建支付订单,获取支付所需参数,支持微信、支付宝、银联、抖音等多种支付方式。
POST
/pay/unifiedOrder
Content-Type:application/json
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 | 示例值 |
| 商户号 | mchNo | 是 | String(30) | 商户号 | |
| 应用ID | appId | 是 | String(24) | 应用ID | |
| 请求时间 | reqTime | 是 | long | 请求接口时间,13位时间戳 | |
| 接口版本 | version | 是 | String(3) | 接口版本号,固定:1.0 | |
| 签名 | sign | 是 | String(32) | 签名值,详见签名算法 | |
| 签名类型 | signType | 是 | String(32) | 签名类型 | MD5 |
| 商户订单号 | mchOrderNo | 是 | String(30) | 商户生成的订单号 | |
| 支付方式 | wayCode | 是 | String(30) | 支付方式,详见附录1 | |
| 支付金额 | amount | 是 | int | 支付金额,单位:分 | |
| 货币代码 | currency | 是 | String(3) | 三位货币代码,人民币:cny | cny |
| 客户端IP | clientIp | 否 | String(32) | 客户端 IPv4 地址 | |
| 商品标题 | subject | 是 | String(64) | 商品标题 | |
| 商品描述 | body | 是 | String(256) | 商品描述 | |
| 异步通知地址 | notifyUrl | 否 | String(128) | 支付结果异步回调 URL,只有传了该值才会发起回调,不能带 query 参数 | |
| 跳转通知地址 | returnUrl | 否 | String(128) | 支付结果同步跳转通知 URL | |
| 失效时间 | expiredTime | 否 | int | 订单失效时间(秒),默认 2 小时。订单在(创建时间+失效时间)后失效 | 3600 |
| 渠道参数 | channelExtra | 否 | JSONObject(256) | 特定渠道发起的额外参数(变量按照 ASCII 排序)。openId 用户标识;subMchAppId 微信公众号/小程序 appid;subOpenId 用户标识。其他支付方式详见附录1 | |
| 扩展参数 | extParam | 否 | String(128) | 备注信息,原样返回 | |
响应参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 返回状态 | code | 是 | int | 0-处理成功;其他-处理有误,详见错误码 |
| 返回信息 | msg | 否 | String(128) | 具体错误原因,例如:签名失败、参数格式校验错误 |
| 签名信息 | sign | 否 | String(32) | 对 data 内数据签名,如 data 为空则不返回 |
| 返回数据 | data | 否 | Json | 返回下单数据,json 格式 |
data 数据格式
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 支付订单号 | payOrderId | 是 | String(30) | 返回支付系统订单号 |
| 商户订单号 | mchOrderNo | 是 | String(30) | 返回商户传入的订单号 |
| 订单状态 | orderState | 是 | int | 0-订单生成;1-支付中;2-支付成功;3-支付失败;4-已撤销;5-已退款;6-订单关闭 |
| 支付数据类型 | payDataType | 是 | String | 支付参数类型 |
| 支付数据 | payData | 否 | String | 发起支付用到的支付参数 |
| 渠道错误码 | errCode | 否 | String | 上游渠道返回的错误码 |
| 渠道错误描述 | errMsg | 否 | String | 上游渠道返回的错误描述 |
开发者中心 › 接口文档 › 查询支付方式
查询支付方式列表
获取当前商户可用的支付方式列表,包含支付渠道编码、支付方式编码及图标信息。
POST
/pay/queryPayway
Content-Type:application/json
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 | 示例值 |
| 商户号 | mchNo | 是 | String(30) | 商户号 | |
| 应用ID | appId | 是 | String(24) | 应用ID | |
| 请求时间 | reqTime | 是 | long | 请求接口时间,13位时间戳 | |
| 接口版本 | version | 是 | String(3) | 接口版本号,固定:1.0 | 1.0 |
| 签名 | sign | 是 | String(32) | 签名值,详见签名算法 | |
| 签名类型 | signType | 是 | String(32) | 签名类型 | MD5 |
返回参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 返回状态 | code | 是 | int | 0-处理成功;其他-处理有误 |
| 返回信息 | msg | 否 | String(128) | 具体错误原因 |
| 签名信息 | sign | 否 | String(32) | 对 data 内数据签名 |
| 返回数据 | data | 否 | Json | 返回下单数据,json 格式 |
data 数据格式
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 支付方式列表 | payways | 是 | JsonArray | 支付方式列表 |
payways 数据格式
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 支付渠道编码 | ifCode | 是 | String(30) | 支付渠道编码(小写英文) |
| 支付方式编码 | wayCode | 是 | String(30) | 支付方式编码(大写英文) |
| 支付方式图标 | icon | 是 | String(500) | 图标 URL |
| 支付方式名称 | wayName | 是 | String(100) | 支付方式名称 |
开发者中心 › 接口文档 › 查询支付订单
查询支付订单
根据商户订单号或支付中心订单号查询支付订单详情。
POST
/pay/query
Content-Type:application/json
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 | 示例值 |
| 商户号 | mchNo | 是 | String(30) | 商户号 | |
| 应用ID | appId | 是 | String(24) | 应用ID | |
| 请求时间 | reqTime | 是 | long | 请求接口时间,13位时间戳 | |
| 接口版本 | version | 是 | String(3) | 接口版本号,固定:1.0 | |
| 签名 | sign | 是 | String(32) | 签名值,详见签名算法 | |
| 签名类型 | signType | 是 | String(32) | 签名类型 | MD5 |
| 商户订单号 | mchOrderNo | 是 | String(30) | 商户生成的订单号,与 payOrderId 二者传一即可 | |
| 支付订单号 | payOrderId | 是 | String(30) | 支付中心生成的订单号,与 mchOrderNo 二者传一即可 | |
返回参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 返回状态 | code | 是 | int | 0-处理成功;其他-处理有误,详见错误码 |
| 返回信息 | msg | 否 | String(128) | 具体错误原因 |
| 签名信息 | sign | 否 | String(32) | 对 data 内数据签名,如 data 为空则不返回 |
| 返回数据 | data | 否 | Json | 返回数据,json 格式 |
data 数据格式
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 支付订单号 | payOrderId | 是 | String(30) | 返回支付系统订单号 |
| 商户号 | mchNo | 是 | String(30) | 商户号 |
| 应用ID | appId | 是 | String(24) | 应用ID |
| 商户订单号 | mchOrderNo | 是 | String(30) | 返回商户传入的订单号 |
| 支付接口 | ifCode | 是 | String(30) | 支付接口编码 |
| 支付方式 | wayCode | 是 | String(30) | 支付方式 |
| 支付金额 | amount | 是 | int | 支付金额,单位:分 |
| 货币代码 | currency | 是 | String(3) | 三位货币代码,人民币:cny |
| 订单状态 | state | 是 | int | 0-订单生成;1-支付中;2-支付成功;3-支付失败;4-已撤销;5-已退款;6-订单关闭 |
| 客户端IP | clientIp | 否 | String(32) | 客户端 IPv4 地址 |
| 商品标题 | subject | 是 | String(64) | 商品标题 |
| 商品描述 | body | 是 | String(256) | 商品描述 |
| 渠道订单号 | channelOrderNo | 否 | String | 对应渠道的订单号 |
| 渠道错误码 | errCode | 否 | String | 渠道下单返回错误码 |
| 渠道错误描述 | errMsg | 否 | String | 渠道下单返回错误描述 |
| 扩展参数 | extParam | 否 | String(512) | 商户扩展参数,回调时会原样返回 |
| 创建时间 | createdAt | 是 | long | 订单创建时间,13位时间戳 |
| 成功时间 | successTime | 否 | long | 订单支付成功时间,13位时间戳 |
| 退款成功时间 | rSuccessTime | 否 | long | 订单退款成功时间,13位时间戳 |
开发者中心 › 接口文档 › 支付通知回调
支付通知接口
支付成功后,支付系统主动向商户服务器发送支付通知(支付系统 → 商户)。
| 接口名称 | 请求 URL | 请求方式 | 请求类型 |
| 支付通知 | 通过统一下单接口提交的参数 notifyUrl 设置 | POST | application/x-www-form-urlencoded |
通知参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 支付订单号 | payOrderId | 是 | String(30) | 返回支付系统订单号 |
| 商户号 | mchNo | 是 | String(30) | 商户号 |
| 应用ID | appId | 是 | String(24) | 应用ID |
| 商户订单号 | mchOrderNo | 是 | String(30) | 返回商户传入的订单号 |
| 支付接口 | ifCode | 是 | String(30) | 支付接口编码 |
| 支付方式 | wayCode | 是 | String(30) | 支付方式,如微信小程序:WX_LITE |
| 支付金额 | amount | 是 | int | 支付金额,单位:分 |
| 货币代码 | currency | 是 | String(3) | 三位货币代码,人民币:cny |
| 订单状态 | state | 是 | int | 0-订单生成;1-支付中;2-支付成功;3-支付失败;4-已撤销;5-已退款;6-订单关闭 |
| 客户端IP | clientIp | 否 | String(32) | 客户端 IPv4 地址 |
| 商品标题 | subject | 是 | String(64) | 商品标题 |
| 商品描述 | body | 是 | String(256) | 商品描述 |
| 用户标识 | channelUser | 否 | String | 渠道用户标识,如微信 openId、支付宝账号、刷卡卡号 |
| 渠道订单号 | channelOrderNo | 否 | String | 对应渠道的订单号 |
| 渠道错误码 | errCode | 否 | String | 渠道下单返回错误码 |
| 渠道错误描述 | errMsg | 否 | String | 渠道下单返回错误描述 |
| 扩展参数 | extParam | 否 | String(512) | 商户扩展参数 |
| 创建时间 | createdAt | 是 | long | 订单创建时间,13位时间戳 |
| 成功时间 | successTime | 否 | long | 订单支付成功时间,13位时间戳 |
| 通知请求时间 | reqTime | 是 | String(30) | 通知请求时间,13位时间戳 |
| 签名 | sign | 是 | String(32) | 签名值 |
| 签名类型 | signType | 否 | String(32) | 签名类型 |
返回结果
业务系统处理后同步返回给支付系统,返回字符串 success 则表示成功,返回非 success 则表示处理失败,支付系统会再次通知业务。
注意:返回的字符串必须是小写,且前后不能有空格和换行符。
开发者中心 › 接口文档 › 统一退款
统一退款接口
对已支付成功的订单发起退款申请。
POST
/refund/refundOrder
Content-Type:application/json
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 | 示例值 |
| 商户号 | mchNo | 是 | String(30) | 商户号 | |
| 应用ID | appId | 是 | String(24) | 应用ID | |
| 请求时间 | reqTime | 是 | long | 请求接口时间,13位时间戳 | |
| 接口版本 | version | 是 | String(3) | 接口版本号,固定 1.0 | |
| 签名 | sign | 是 | String(32) | 签名值,详见签名算法 | |
| 签名类型 | signType | 是 | String(32) | 签名类型 | MD5 |
| 支付订单号 | payOrderId | 是 | String(30) | 支付中心生成的支付订单号 | |
| 商户订单号 | mchOrderNo | 是 | String(30) | 商户生成的支付订单号 | |
| 商户退款单号 | mchRefundNo | 是 | String(30) | 商户生成的退款单号 | |
| 退款金额 | refundAmount | 是 | int | 退款金额,单位:分 | |
| 货币代码 | currency | 是 | String(3) | 三位货币代码,人民币:cny | cny |
| 退款原因 | refundReason | 是 | String(64) | 退款原因 | |
| 客户端IP | clientIp | 否 | String(32) | 客户端 IPv4 地址 | |
| 异步通知地址 | notifyUrl | 否 | String(128) | 退款完成后回调该地址 | |
| 渠道参数 | channelExtra | 否 | String(256) | 特定渠道发起的额外参数 | |
| 扩展参数 | extraParam | 否 | String(512) | 商户扩展参数,回调时原样返回 | |
返回参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 返回状态 | code | 是 | int | 0-处理成功;其他-处理错误 |
| 返回信息 | msg | 否 | String(128) | 具体错误原因 |
| 签名信息 | sign | 否 | String(32) | 对 data 内数据签名 |
| 返回数据 | data | 否 | Json | 返回数据,json 格式 |
data 数据格式
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 退款订单号 | refundOrderId | 是 | String(30) | 返回退款订单号 |
| 商户退款单号 | mchRefundNo | 是 | String(30) | 返回商户传入的退款单号 |
| 退款状态 | state | 是 | int | 0-订单生成;1-退款中;2-退款成功;3-退款失败;4-退款关闭 |
| 渠道退款单号 | channelOrderNo | 否 | String | 对应渠道的退款单号 |
| 渠道错误码 | errCode | 否 | String | 上游渠道返回的错误码 |
| 渠道错误描述 | errMsg | 否 | String | 上游渠道返回的错误描述 |
开发者中心 › 接口文档 › 退款通知回调
退款通知接口
退款完成后,支付系统主动向商户服务器发送退款通知(支付系统 → 商户)。
| 接口名称 | 请求 URL | 请求方式 | 请求类型 |
| 退款通知 | 通过统一退款接口提交的参数 notifyUrl 设置 | POST | application/x-www-form-urlencoded |
通知参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
| 退款订单号 | refundOrderId | 是 | String(30) | 支付中心生成的退款单号 |
| 支付订单号 | payOrderId | 是 | String(30) | 返回支付系统订单号 |
| 商户号 | mchNo | 是 | String(30) | 商户号 |
| 应用ID | appId | 是 | String(24) | 应用ID |
| 商户退款单号 | mchRefundNo | 是 | String(30) | 商户生成的退款单号 |
| 支付金额 | payAmount | 是 | int | 支付金额,单位:分 |
| 退款金额 | refundAmount | 是 | int | 退款金额,单位:分 |
| 货币代码 | currency | 是 | String(3) | 三位货币代码,人民币:cny |
| 退款状态 | state | 是 | int | 0-订单生成;1-退款中;2-退款成功;3-退款失败;4-退款关闭 |
| 渠道订单号 | channelOrderNo | 否 | String | 对应渠道的订单号 |
| 渠道错误码 | errCode | 否 | String | 渠道返回错误码 |
| 渠道错误描述 | errMsg | 否 | String | 渠道返回错误描述 |
| 扩展参数 | extraParam | 否 | String(512) | 商户扩展参数,回调时会原样返回 |
| 创建时间 | createdAt | 是 | long | 订单创建时间,13位时间戳 |
| 成功时间 | successTime | 否 | long | 订单支付成功时间,13位时间戳 |
| 通知请求时间 | reqTime | 是 | String(30) | 通知请求时间,13位时间戳 |
| 签名 | sign | 是 | String(32) | 签名值,详见签名算法 |
| 签名类型 | signType | 否 | String(32) | 签名类型 |
返回结果
业务系统处理后同步返回给支付系统,返回字符串 success 则表示成功,返回非 success 则表示处理失败,支付系统会再次通知业务。
注意:返回的字符串必须是小写,且前后不能有空格和换行符。
开发者中心 › 附录 › 支付方式说明
附录1 · 支付方式说明
统一下单接口中 wayCode 参数取值说明:
| 编码 | 含义 | channelExtra 特殊传参 |
UN_QRU | 聚合H5收银台 | 需在 channelExtra 传递 scene(ONLINE:线上;OFFLINE:线下) |
ALI_PC | 支付宝PC网站 | — |
ALI_QR | 支付宝主扫 | — |
WX_JSAPI | 微信公众号 | — |
WX_LITE | 微信小程序 | — |
WX_MP | 渠道微信小程序收银台,对接指引详见附录5 | — |
WX_DX_MP | 平台微信小程序收银台,对接指引详见附录5 | — |
DY_APP | 抖音APP | 对接指引详见附录3 |
DY_H5 | 抖音H5 | 对接指引详见附录4;需在 channelExtra 传递 type(iOS、Android、Wap) |
开发者中心 › 附录 › 错误码说明
附录2 · 错误码说明
通用异常编码
统一下单接口异常编码
| 编码 | 类型 | 含义 |
| 1000 | 传参必填校验 | 参数有误 |
| 1000 | 传参是否正确校验 | 商户或商户应用不存在 |
| 1000 | 传参是否正确校验 | 商户信息不存在或商户状态不可用 |
| 1000 | 传参是否正确校验 | 商户应用不存在或应用状态不可用 |
| 1000 | 传参是否正确校验 | 参数 appId 与商户号不匹配 |
| 1001 | 签名校验 | 验签失败 |
| 1002 | 风控报错 | 风控告警:该商户… |
| 3001 | 校验支付参数 | 不支持的支付方式 |
| 3002 | 校验支付参数 | 商户订单【】已存在 |
| 1000 | 校验支付参数 | 异步通知地址协议仅支持 http:// 或 https:// ! |
| 1000 | 校验支付参数 | 同步通知地址协议仅支持 http:// 或 https:// ! |
| 1003 | 校验支付参数 | 获取商户应用信息失败 |
| 1003 | 校验支付参数 | 商户应用不支持该支付方式 |
| 1003 | 校验支付参数 | 无此支付通道接口 |
| 1003 | 校验支付参数 | 接口不支持该支付方式 |
| 1003 | 校验支付参数 | 商户应用参数未配置 |
| 1003 | 校验支付参数 | 特约商户参数未配置 |
| 1003 | 校验支付参数 | 服务商参数未配置 |
| 1004 | 风控轮询异常 | 多商户号轮询异常 |
| 1000 | 渠道检验异常 | 校验渠道传参是否正确 |
| 3003 | 渠道错误 | 渠道侧返回支付状态,ChannelState 返回异常 |
统一退款接口异常编码
| 编码 | 类型 | 含义 |
| 1000 | 传参必填校验 | 参数有误 |
| 1000 | 传参是否正确校验 | 商户或商户应用不存在 |
| 1000 | 传参是否正确校验 | 商户信息不存在或商户状态不可用 |
| 1000 | 传参是否正确校验 | 商户应用不存在或应用状态不可用 |
| 1000 | 传参是否正确校验 | 参数 appId 与商户号不匹配 |
| 1001 | 签名校验 | 验签失败 |
| 1000 | 校验支付参数 | mchOrderNo 和 payOrderId 不能同时为空 |
| 1000 | 校验支付参数 | 异步通知地址协议仅支持 http:// 或 https:// ! |
| 3004 | 订单状态校验 | 支付订单不存在 |
| 3005 | 订单状态校验 | 订单已完成退款,无法继续退款 |
| 3006 | 退款金额校验 | 订单状态不正确,无法完成退款 |
| 3007 | 退款金额校验 | 申请金额超出订单可退款余额,请检查退款金额 |
| 3008 | 退款金额校验 | 退款单已完成全部订单退款,本次申请失败 |
| 3009 | 订单状态校验 | 商户退款订单号【】状态不能重新发起退款! |
| 1003 | 校验支付参数 | 获取商户应用信息失败 |
| 1003 | 校验支付参数 | 当前通道不支持退款 |
统一查询接口异常编码
| 编码 | 类型 | 含义 |
| 1000 | 传参必填校验 | 参数有误 |
| 1000 | 传参是否正确校验 | 商户或商户应用不存在 |
| 1000 | 传参是否正确校验 | 商户信息不存在或商户状态不可用 |
| 1000 | 传参是否正确校验 | 商户应用不存在或应用状态不可用 |
| 1000 | 传参是否正确校验 | 参数 appId 与商户号不匹配 |
| 1001 | 签名校验 | 验签失败 |
| 1000 | 校验支付参数 | mchOrderNo 和 payOrderId 不能同时为空 |
| 3004 | 订单状态校验 | 订单不存在 |
开发者中心 › 附录 › 抖音APP前端对接指引
附录3 · 抖音APP支付前端对接指引
任何机型的APP首先都需要进行抖音 OpenSDK 的集成,具体请参考:抖音支付OpenSDK集成文档
一、iOS 调用支付
- 将「统一下单」接口中返回的 payData(json字符串)组装为一个 NSDictionary,作为参数拉起抖音支付。
- 在 Xcode 中,选择你的工程设置项,选中 "TARGETS"一栏,在 "info"标签栏下的 "Custom iOS Target Properties"里,设置 "Bundle name"或 "Bundle display name"(如果没有则添加)。
- 调用 openDypayWithInfo 拉起抖音支付。
Objective-C
// 组装调起支付sdk的参数(一般为商户的业务后端组装)
NSDictionary *params = @{
@"appid" : @"dy88888888", // 应用ID
@"partnerid" : @"1900000109", // 商户号
@"prepayid": @"dy1217758", // 预支付交易会话ID
@"package" : @"Sign=DYPay",
@"noncestr" : @"5a409aa667ee4ee6", // 随机字符串
@"timestamp" : @"1412000000", // 时间戳
@"sign" : @"your sign" // 签名
};
// 拉起抖音支付
[DypayAPI openDypayWithInfo:params
fromViewController:self
resultCallback:^(NSDictionary * _Nonnull resultDict) {
// resultDict的描述详见SDK回调错误码定义
}];
SDK 结果回调:支付结果将由抖音支付通过 URL 返回。
Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// 处理SDK回调结果
[DypayAPI processDypayResultWithURL:url callback:^(NSDictionary *resultDict) {
}];
}
resultDict 包含SDK回调错误码信息,示例如下:
{
@"resultCode": @"0"
}
// key: "resultCode",字符串类型。
// value:错误码,字符串类型,需要自己转换为整数。
二、Android 调用支付
- 将「统一下单」接口中返回的 payData(json字符串)组装为一个 Map<String, String>,作为参数拉起抖音支付。
- 拉起抖音支付,调用 DyPay(activity).pay(payInfoMap, callback) 拉起抖音支付。
Java
DyPay dyPay = new DyPay(activity);
// 唤端拉起抖音
dyPay.pay(payInfoMap, new IDyPayResultCallback(){
@Override
public void onResult(@NonNull Map<String, String> map) {
// 处理回调结果
}
}, true);
SDK 结果回调,回调的数据为一个 Map<String, String> 集合:
{
resultCode: // 详见SDK结果回调错误码定义
errorMsg: // 失败原因,可能为空串 ""
extraParams:// 扩展参数,JSON格式字符串,可能为空串 ""
}
三、HarmonyOS 调用支付
- 将「统一下单」接口中返回的 payData(json字符串)组装为一个 Map<String, String>,作为参数拉起抖音支付。
- 拉起抖音支付。
ArkTS
/**
* 拉起抖音支付
* @params prepayInfoMap:支付参数 Map
* @return resultMap:支付结果 Map
*/
DypayAPI.openDypay(prepayInfoMap)
.then(resultMap => {
// 处理支付结果
console.info(`openDypay callback.`);
}).catch((error: BusinessError) => {
// API调用失败,可以当支付失败处理
console.error(`openDypay failed.`);
})
四、SDK 结果回调错误码定义
SDK结果回调resultCode定义:
0: 成功,需调用订单查询接口进行最终的订单确认
1: 用户取消,商户自行处理
2: 其他错误,可能原因:签名错误、未注册 appid、网络错误等异常原因
3: 抖音未返回明确支付结果,建议商户使用服务端接口查询最终支付结果
100:未安装抖音App或者抖音版本过低,需要引导用户升级抖音
103:重复支付被拦截
注意:SDK 结果回调仅供商户参考,准确的订单支付状态请使用服务端接口查询,调用方法请见订单查询接口。
开发者中心 › 附录 › 抖音H5调起支付
附录4 · 抖音H5调起支付
一、调起支付步骤
- 商户通过统一下单接口获取到发起支付的必要参数 payData。
- 商户在配置了 H5支付域名的网页中跳转 h5_url,调起抖音支付收银台中间页。(若跳转 H5 支付链接的网页域名不是商户配置的 H5 支付域名,将会报错:「鉴权失败,请重试」)
- 抖音支付收银台中间页会进行 H5 权限的校验,安全性检查。校验通过后,用户可正常进行支付。
H5支付域名配置参考:抖音H5支付域名配置
二、业务流程图
主要步骤说明:
- 【1、2】用户选择抖音支付。
- 【3】由商户后台向抖音支付发起下单请求 H5 下单接口。
- 【4】返回支付跳转 url(参数名 "h5_url")给商户后台,商户在已配置了 H5 支付域名的页面通过 h5_url 调起抖音支付中间页。
- 【5、6、7】跳转到抖音支付中间页。
- 【8】抖音支付后台进行中间页相关验证。
- 【10、11】跳转到抖音 APP,完成支付。
- 【12】如支付成功,商户后台会接收到交易异步通知。
- 【13】用户支付完成,返回商户发起支付页(如果未支付完成,会停留在中间页让用户继续选择支付)。
- 【14】在商户展示页面,主动发起支付结果的查询。
- 【15】商户后台判断是否接收到支付结果通知。
- 【16】如未收到支付结果通知,后台调用查询订单接口确认订单状态。
- 【17、18】展示最终的订单支付结果给用户。
开发者中心 › 附录 › 微信小程序收银台对接
附录5 · 微信小程序收银台对接指引
一、对接说明
微信小程序收银台目前支持 APP、外部 H5 浏览器、小程序进行拉起,但由于渠道侧的部分限制,在对接之前需明确前端的支付场景,以便更快和技术人员完成整体对接工作。
二、对接指引
1. APP 调用
- 将「统一下单」接口中返回的 payData(json字符串)进行 json 转义,获取其中的 appParam 对象。
- 进行 appParam 对象中的 key 值判断:
① 如果存在 schemeCode,则使用 URL Scheme 微信官方的跳转方式完成收银台的跳转;
② 如果存在 gh_id 和 path 参数,则使用微信官方 app 跳转小程序的方法完成对接(需客户 APP 完成微信开放平台认证)。对接指南请参考:微信OpenSDK Android接入指南
- 如果 APP 未进行认证,则使用 payData 中的 h5Param 对象中的 schemeCode,使用 URL Scheme 微信官方的跳转方式完成收银台的跳转。
2. 外部 H5 调用
- 将「统一下单」接口中返回的 payData(json字符串)进行 json 转义,获取其中的 h5Param 对象。
- 解析 h5Param 对象中的 schemeCode,使用 URL Scheme 微信官方的跳转方式完成收银台的跳转。
3. 小程序跳转
- 将「统一下单」接口中返回的 payData(json字符串)进行 json 转义,获取其中的 miniParam 对象。
- 解析 miniParam 对象:appId(跳转目标小程序的 appid)、path(跳转目标小程序的路径)、extraData(跳转目标小程序时需要带的参数,可能为空,为空则不进行传递)。
开发者中心 › 附录 › 协议支付渠道标识
附录6 · 协议支付渠道标识
代扣签约接口中 channelCode 参数取值说明:
开发者中心 › 附录 › 代扣款项
附录7 · 代扣款项
代扣签约接口中 withholdType 参数取值说明:
| 代码 | 说明 |
| 01 | 移动电话 |
| 02 | 固定电话 |
| 03 | 水费 |
| 04 | 电费 |
| 05 | 煤气费 |
| 06 | 社保 |
| 07 | 小灵通 |
| 08 | 信用卡还款 |
| 09 | 烟草 |
| 10 | 信用卡中心 |
| 11 | 有线和付费电视 |
| 12 | 非投资型保险 |
| 13 | 政府服务税费 |
| 14 | 基金理财 |
| 15 | 银行账户充值 |
| 16 | 金融机构贷款还款 |
| 17 | 网络服务费 |
| 18 | 资金归集 |
| 19 | 教育费 |
| 20 | 物业管理费 |
| 21 | 公益捐款 |
| 22 | 供暖 |
| 23 | 废弃物处理费 |
| 24 | 交通出行 |
| 25 | 租金 |
| 26 | 会员费 |
| 27 | 小贷还款 |
| 28 | 投资型保险 |
| CS | 财税库银 |
| RZ | 商户实时入账 |
| OT | 其他 |