资金冻结完成
1. 接口介绍
功能简述:
本接口用于商户使用原资金冻结交易发起资金冻结完成扣款请求,支持部分资金冻结完成扣款,剩余资金继续处于冻结状态。
约束条件:
1、 存在冻结成功的交易,且冻结资金仍有效
2、 请求扣款金额不超过剩余有效冻结金额
正常流程:
1、 报文合性校验
2、 资金冻结完成扣款处理
3、 同步返回交易处理结果
异常流程:
1、 商户在招行侧开通IP白名单控制,请求源IP不在IP白单中
2、 报文验签失败
3、 报文参数非法
4、 无冻结交易
2. 请求地址
测试环境URL:
http://paytest.cmburl.cn:801/netpayment_directlink_nosession/CompleteFreeze.do
生产环境URL:
https://merchserv.netpay.cmbchina.com/merchserv/CompleteFreeze.do
3. 请求报文
请求报文参数 | 类型(长度) | 必填 | 描述 | 示例 |
---|---|---|---|---|
jsonRequestData | String | M | json格式的请求参数,详见jsonRequestData定义 |
jsonRequestData参数定义
参数名 | 类型(长度) | 必填 | 描述 | 示例 |
---|---|---|---|---|
version | String(3) | M | 固定为2.0 | 2.0 |
charset | String(8) | M | 编码格式,固定为UTF-8 | UTF-8 |
sign | String | M | 使用商户支付密钥对reqData内的数据进行签名 | |
signType | String | M | 固定为SHA-256 | SHA-256 |
reqData | 请求数据 | |||
dateTime | String(14) | M | 请求时间,商户发起该请求的时间,精确到秒。 格式: yyyyMMddHHmmss | 20160623101430 |
branchNo | String(4) | M | 商户分行号,4位数字 | 0755 |
merchantNo | String(6) | M | 商户号,6位数字 | 002346 |
merchantSerialNo | String(32) | M | 商户冻结完成交易流水号,全局唯一。6到32位数字或字母,商户生成。 | 2016062310143088 |
origDate | String(8) | M | 原商户资金冻结交易日期YYYYMMDD | 20160623 |
origOrderNo | String(32) | M | 原商户资金冻结订单号 | 2016062310143011 |
amount | String(16) | M | 冻结完成扣款金额,以元为单位,格式XXXX.XX | 200.00 |
subMerchantNo | String(30) | O | 二级商户编码。当前订单为商户的二级商户的订单时需要传送;必须为数字或英文字母 | |
subMerchantName | String(100) | O | 二级商户名称。当前订单为商户的二级商户的订单时需要传送 | |
subMerchantTPCode | String(7) | O | 当前订单为商户的二级商户的订单时需要传送;必须为数字或英文字母 | |
subMerchantTPName | String(100) | O | 当前订单为商户的二级商户的订单时需要传送;必须为数字或英文字母 | |
merchantPara | String(256) | O | 交易附加参数。请不要使用特殊字符+或\或“ | 停车费 |
请求示例:
json报文组织:
{ "version":"2.0", "sign":"d921860bd95c4f6f0eb8665951be85ca5d9d88d4e100a8d0678f309593b3b109", "signType":"SHA-256", "reqData":{ "dateTime":"20201217191323", "branchNo":"0731", "merchantNo":"000034", "merchantSerialNo":"99990000005", "origDate":"20201217", "origOrderNo":"9999000001", "amount":"0.01", "subMerchantNo":"", "subMerchantName":"", "subMerchantTPCode":"", "subMerchantTPName":"", "merchantPara":"" } }
表单组织:
<form action="请求地址" method="post" > <input type="hidden" name="jsonRequestData" value='以上json字符串' /> <input type="hidden" name="charset" value='UTF-8' /> </form>
待签名字符串(未包含支付密钥):
amount=0.01&branchNo=0731&dateTime=20201217191323&merchantNo=000034&merchantPara=&merchantSerialNo=99990000005&origDate=20201217&origOrderNo=9999000001&subMerchantName=&subMerchantNo=&subMerchantTPCode=&subMerchantTPName=
4. 响应报文
参数名 | 类型(长度) | 必填 | 描述 | 示例 |
---|---|---|---|---|
version | String(3) | M | 固定为2.0 | 2.0 |
charset | String(8) | M | 参数编码,固定为UTF-8 | UTF-8 |
sign | String | M | 报文签名,使用商户支付密钥 对rspData内的数据进行验签 | |
signType | String | M | 签名算法,固定为SHA-256 | SHA-256 |
rspData | 应答数据 | |||
rspCode | String | M | 处理结果返回码
| SUC0000 |
rspMsg | String | M | 处理结果返回码的描述信息 | |
dateTime | String(14) | M | 银行响应该请求的时间,格式yyyyMMddHHmmss | 20160623101430 |
merchantSerialNo | String(32) | M | 商户解冻交易请求流水号 | 2016062310143088 |
bankSerialNo | String(20) | M | 银行处理该请求的流水号 | 2016062310143099 |
bankDate | String(8) | M | 银行冻结完成处理日期,格式yyyyMMdd | 20160623 |
bankTime | String(6) | M | 银行冻结完成处理时间,格式HHmmss | 101430 |
amount | String | M | 冻结完成金额,格式XXXX.XX | 10.01 |
fee | String | C | 手续费金额,以元为单位,格式XXXX.XX | 0.01 |
settleAmount | String | M | 实际冻结完成金额,以元为单位,格式XXXX.XX | 10.01 |
discountAmount | String | M | 优惠金额,以元为单位,格式XXXX.XX | 10.01 |
以下字段联系招行配置控制参数后返回(默认不返回): | ||||
uniqueUserID | String(30) | C | 支付用户ID,由身份证+姓名生成(推荐使用) | UQwanCunLbp6cl1RbDFODrhLrAa48= |
expandUserID | String(30) | C | 一网通用户ID,由一网通ID生成(招行一网通用户的身份标识) | EUfirwdVQVKhffJmjQhMod0dS6GYY= |
相应示例:
正常json报文组织:
{ "sign":"见签名处理章节", "signType":"SHA-256", "version":"2.0", "charset":"UTF-8", "rspData":{ "expandUserID":"EUqF6oCJ1RZ3dW3jVCXVblyFk/hR8=", "uniqueUserID":"UQKqeWHDJKoO85gQhrobXHpTxWWeM=", "rspCode":"SUC0000", "rspMsg":"", "dateTime":"20201129150007", "merchantSerialNo":"99990000006", "bankSerialNo":"115W609A0003AD00000A", "bankDate":"20201129", "bankTime":"145948", "amount":"9.01", "fee":"0.09", "settleAmount":"9.01", "discountAmount":"0" } }
异常json报文组织:
{ "sign":"xxx", "signType":"SHA-256", "version":"2.0", "charset":"UTF-8", "rspData":{ "rspCode":"MSS3824", "rspMsg":"MSS3824.冻结完成失败.交易已完成划扣 [DJ141103]" } }
5. 错误码
错误码 | 描述 | 解决方案 |
MSS9900 | 请求数据Json转换异常 | 检验并修改请求报文数据 |
MSS9002 | 版本号错误 | Version固定为“1.0” |
MSS9003 | 签名算法错误 | 目前仅支持“SHA-256” |
MSS3411 | 签名错误 | 验证签名是否正确,请参考签名示例 |
MSS1016 | 分行号格式错误 | 分行号格式应为4位数字 |
MSS1017 | 商户号格式错误 | 商户号格式应为6位数字 |
MSS1020 | 金额格式错误 | 金额格式应xxxx.xx |
MSS1022 | 订单日期或者时间格式错误 | 日期应为yyyyMMdd格式, 时间应为yyyyMMddHHmmss格式 |
MSS1113 | 商户交易流水号格式错误 | 格式应为6—32位字母或数字 |
MSS8011 | 主机无此商户定义 | 检查商户号、分行号是否正确 |
MSS2038 | 非法商户:商户参数未定义 | 检查商户数据是否正确 |
MSS1104 | 请求时间延迟 | 检查dateTime参数,不能早于服务器时间前30分钟 |
MSS3209 | 该IP不允许发起此交易 | 请检查商户管理系统配置参数 |
MSS1114 | 原冻结交易商户订单号格式错误 | 格式应为6—32位字母或数字 |
MSS1098 | 二级商户号长度超长 | 不能超过30位 |
MSS1097 | 二级商户号格式不正确 | 必须全部为数字或字母 |
MSS1100 | 二级商户类型编码长度超长 | 不能超过7位 |
MSS1099 | 二级商户类型编码格式不正确 | 必须全部为数字 |
MSS1116 | 二级商户名称格式不正确 | 不能包含特殊字符 |
MSS1117 | 二级商户类型名称不正确 | 不能包含特殊字符 |
MSS1118 | 交易附加参数格式错误 | 长度不超过256位 |
MSS3824 | 冻结完成失败 | 具体失败原因参考报错信息 |