支付功能之代收代付
有很多老板问小编:“这个分账功能好是好,也能搞定项目中的二清问题和税务纠纷,但还是太复杂了,每次要添加被分账对象都需要提交材料进行审核,太繁琐了,有没有更方便快捷的支付产品来解决资金问题?”
那当然是有的,现在我们牛卡派推出了代收代付的支付功能,老板们只需要在后台添加姓名、银行卡和开户行无需审核即可输入具体的金额代发到其银行卡中,操作简单快捷,与分账不同,分账操作是根据每笔交易来进行下发资金,代收代付不按照比例分账,而是将具体的金额下发。
1.产品说明
1.1产品简介
三方支付机构的批量代付产品,用于商户向银行账户提出多笔转账交易。
1.2产品协议说明
- 支付请求是HTTP 协议请求,商户以POST 方式(Content-type 为:application/json)发
- 送到后台网站中。
- 此接口文档统一使用utf-8 编码方式。
- 请求参数列表中有必填/选填项,注意填写必填项。
- 参数名称和参数说明中规定的固定值必须与列表中完全一致(大小写敏感,除hmac参数值外)。
2数据交互
1.构造请求数据
- 商户根据支付机构提供的接口规则,通过程序生成得到签名结果及要传输给支付机构
- 的数据集合。
2.发送请求数据
- 把构造完成的数据集合,通过以JSON 的数据格式请求支付机构。
3.对请求数据进行处理
- 支付机构得到这些集合后,会先进行安全校验等验证,一系列验证通过后便会处理这
- 次发送过来的数据请求。
4.返回处理的结果数据
- 对于处理完成的交易,支付机构会以两种方式把数据反馈给商户网站。程序上自动进
- 行重新构造URL 地址链接,在用户当前页面上通过自动跳转的方式跳回商户在请求时设
- 定好的页面路径地址。
5.对返回数据进行处理
- 商户收到支付机构返回的结果数据后,可以结合自身网站的业务逻辑对数据进行处
- 理。
3.接口说明
3.1单笔代付接口
3.1.1业务功能
通过此接口商户可以付款到指定银行卡账户。
3.1.2交互模式
后台系统调用交互模式。
3.1.3请求参数列表
参数名称 | 参数含义 | 说明 | 数据类型 | 是否必填 | 签名顺序 |
userNo | 商户编号 | 商户编号和商户密钥在商户后台获取 | String | 是 | 1 |
tradeMerchantNo | 报备商户号 | 报备商户号 | String | 否 | 2 |
productCode | 产品类型 | 产品类型 | String | 是 | 3 |
requestTime | 交易请求时间 | 格式:yyyy-MM-dd HH:mm:ss 如:2018-05-28 18:00:00 | String | 是 | 4 |
merchantOrderNo | 商户订单号 | 全局唯一,由数字或字母组成,长度须控制在 12 到 25 之间,可包含边界 值 | String | 是 | 5 |
receiverAccountNo Enc | 收款账户号 | 收款人银行卡卡号 | String | 是 | 6 |
receiverNameEnc | 收款人 | 收款人银行卡持卡人名称 | String | 是 | 7 |
receiverAccountTyp e | 账户类型 | 对私账户:201 对公账户:204 | Integer | 是 | 8 |
receiverBankChann elNo | 收款账户联行号 | 对公账户必须填写此字段 | String | 否 | 9 |
paidAmount | 交易金额 | 单位:元,精确到分,保留两位小数。 | BigDec imal | 是 | 10 |
currency | 币种 | 人民币币种填写:201 | String | 是 | 11 |
isChecked | 是否复核 | 复核:201,不复核:202 (见注释 一) | String | 是 | 12 |
paidDesc | 代付说明 | 填写此次单笔代付的代付说明(长度 为 30 个字符以内) | String | 是 | 13 |
paidUse | 代付用途 | 代付用途 | String | 是 | 14 |
callbackUrl | 商户通知地址 | 代付完成后异步回调通知地址 | String | 否 | 15 |
firstProductCode | 优先使用产品 | 组合付必填,非组合付不用填写 | String | 否 | 16 |
hmac | 签名数据 | String | 是 |
- 注释一
- 是否审核→填写为201 时,需到商户后台进行审核,审核通过支付机构才会进行打款,审核不通过,则订单状态为订单已取消(没有异步);填写为202 时,不需要到商户后台进行审核,订单提交支付机构成功则开始打款。(代付金额:单位:元,精确到分,保留两位小数。例如:10.23)
- 注释二
- 产品类型:
- 普通代付:在工作日9:00-17:30 出款,使用“可取余额”,正常2 小时内到账,建议在17:00 前提交(并在商户后台审核)订单;
请求报文案例:
{
"userNo": "888100000004182",
"productCode": "BANK_PAY_ORDINARY_ORDER",
"hmac": "A5FFC45489254A0438D27628F346EC2C",
"requestTime": "2018-05-28 14:10:10",
"merchantOrderNo": "300000000001",
"receiverAccountNoEnc": "6225882010007926",
"receiverNameEnc": "支付机构",
"receiverAccountType": "201",
"receiverBankChannelNo": "",
"paidAmount": "1.00",
"currency": "201",
"isChecked": "202",
"paidDesc": "工资发放",
"paidUse": "201",
"callbackUrl":"http://10.10.10.10:8080/pay/merchantCallback"
}
3.1.4应答参数列表
参数名称 | 中文名称 | 说明 | 数据类型 | 是否必填 | 签名顺序 |
statusCode | 应答码 | 请求响应的应答码 | String | 是 | 1 |
message | 应答信息 | 请求响应的应答码信息描述 | String | 是 | 2 |
data | 应答数据 | 见应答数据域 | json 字符串 | 是 | |
应答信息域(data) | |||||
errorCode | 错误码 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 3 |
errorDesc | 错误描述 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 4 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识 | String | 是 | 5 |
merchantOrderN o | 商户订单号 | 全局唯一性,由商户生成并在发起代付 请求的时候传入 | String | 是 | 6 |
hmac | 签名数据 | String | 是 |
应答报文案例:
{
"statusCode": 2001,
"message": "受理成功",
"data": {
"errorCode": "",
"errorDesc": "",
"userNo": "888100000002985",
"merchantOrderNo": "3000000000001",
"hmac": "B326EF80B13649C15415C19748FA78D7"
}
}
注:响应数据的顺序不代表签名的顺序,签名顺序请查阅文档的表格所对应的顺序。
3.1.5异步通知参数列表
交易成功或交易失败时异步通知以POST 请求方式返回Json 数据。如若通知响应statusCode 为
2001,则我司系统将进行补发通知,补发频率为5, 20, 60, 120, 180, 240s。
接入方对异步通知需要作幂等处理
参数名称 | 中文名称 | 说明 | 数据类型 | 是否 必填 | 签名顺 序 |
status | 交易状态 | 代付明细的交易状态 | Integer | 是 | 1 |
errorCode | 错误码 | 交易失败对应错误码 | String | 否 | 2 |
errorCodeDesc | 错误描述 | 交易失败对应错误码描述 | String | 否 | 3 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 4 |
tradeMerchantNo | 报备商户号 | 报备商户号 | String | 否 | 5 |
merchantOrderNo | 商户订单号 | 全局唯一性,由商户生成并在发起 代付请求的时候传入 | String | 是 | 6 |
platformSerialNo | 平台流水号 | 全局唯一性,成功受理商户的代付 请求时生成的流水号 | String | 是 | 7 |
receiverAccountNoEn c | 收款账户号 | 收款账户号 | String | 是 | 8 |
receiverNameEnc | 收款人 | 收款人信息 | String | 是 | 9 |
paidAmount | 交易金额 | 交易金额 | BigDecimal | 是 | 10 |
fee | 手续费 | 计算受理成功的订单所需额外支付 的费用 | BigDecimal | 是 | 11 |
completeTime | 完成时间 | 代付完成时间,格式:yyyy-MM-dd HH:mm:ss 默认不返回,如果有此参数需求,请 联系支付机构客服。 | String | 否 | 12 |
hmac | 签名数据 | String | 是 |
返回报文案例:
{
"fee": 0.11,
"merchantOrderNo": "130000000006",
"paidAmount": 52.00,
"platformSerialNo": "30032018052900031256",
"receiverAccountNoEnc": "6225882010007926",
"receiverNameEnc": "支付机构",
"status": 205,
"userNo": "888100000002020"
"hmac":"XXXXX"
}
注:响应数据的顺序不代表签名的顺序,签名顺序请查阅文档的表格所对应的顺序
3.1.6商户返回确认信息
参数名称 | 中文名称 | 说明 | 数据类型 | 是否必 填 | 签名顺序 |
statusCode | 应答码 | 商户回调通知后返回的应答码 | String | 是 | 1 |
message | 应答信息 | 商户接收回调通知后处理失 败返回的错误描述 | String | 否 | 2 |
应答报文案例:
{
"statusCode": "2001",
"message": "成功"
}
3.2单笔代付查询接口
3.2.1请求参数列表
注:请求返回交易状态未知时,需要调用查询接口核实订单状态!
仅能查询15 天内的订单。
参数名称 | 中文名称 | 说明 | 数据类型 | 是否 必填 | 签名 顺序 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 1 |
merchantOrderNo | 商户订单号 | 全局唯一,由数字或字母组成,长度须控制在 12 到 25 之间,可包含边界值 | String | 是 | 2 |
hmac | 签名数据 | String | 是 |
请求报文案例:
{
"userNo": "888100000004182",
"merchantOrderNo": "880000000001",
"hmac": "81D3430BF3E4A1D05958FE99FB5434A4"
}
3.2.2应答参数列表
参数名称 | 中文名称 | 说明 | 数据类型 | 是否必填 | 签名 顺序 |
statusCode | 应答码 | 请求响应的应答码 | String | 是 | 1 |
message | 应答信息 | 请求响应的应答码信息描述 | String | 是 | 2 |
data | 应答数据 | 见应答信息域(应答信息域对象转成 json 字符串) | json 字符串 | 是 | |
应答信息域 | |||||
status | 状态 | 单笔代付查询请求的交易状态 | Integer | 是 | 3 |
errorCode | 错误码 | 交易失败返回错误码, | String | 否 | 4 |
errorDesc | 错误描述 | 受理失败、受理中会在应答中返回描述 | String | 否 | 5 |
userNo | 商户号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 6 |
tradeMerchantN o | 报备商户号 | 报备商户号 | String | 否 | 7 |
merchantOrder No | 商户订单号 | 全局唯一性,由商户生成并在发起代付请 求的时候传入 | String | 是 | 8 |
platformSerialN o | 平台流水号 | 全局唯一性,成功受理商户的代付请求时 生成的流水号 | String | 是 | 9 |
receiverAccount NoEnc | 收款账户号 | 收款账户号信息 | String | 是 | 10 |
receiverNameEn c | 收款人 | 收款人信息 | String | 是 | 11 |
paidAmount | 交易金额 | 交易金额 | BigDecimal | 是 | 12 |
fee | 手续费 | 计算受理成功的订单在该次代付交易中所 需额外支付的费用。 | BigDecimal | 否 | 13 |
completeTime | 完成时间 | 代付完成时间,交易成功或失败时返回, 默认不返回,如果有此参数需求,联系客服 | String | 否 | 14 |
hmac | 签名数据 | String | 是 |
应答报文成功案例:
{
"statusCode": 2001,
"message": "受理成功",
"data": {
"status": 203,
"errorCode": "",
"errorDesc": "",
"userNo": "888100000004182",
"merchantOrderNo": "880000000001",
"platformSerialNo": "30032018052900031237",
"receiverAccountNoEnc": "6225882010007926",
"receiverNameEnc": "支付机构",
"paidAmount": 1.00,
"fee": 0.11,
"hmac": "81D3430BF3E4A1D05958FE99FB5434A4"
}
}
应答报文订单不存在报文
{
"statusCode": 2001,
"message": "受理成功",
"data": {
"status": "214",
"errorCode": "300002014",
"errorDesc": "订单记录不存在",
"userNo": "888100000002720",
"merchantOrderNo": "8800eee00000001",
"platformSerialNo":"" ,
"receiverAccountNoEnc": "",
"receiverNameEnc": "",
"paidAmount": "",
"fee": "",
"hmac": "57396ca5bc0c1b6834f61bcb04bf0af2"
}
}
3.3批量代付接口
3.3.1请求参数列表
参数名称 | 中文名称 | 说明 | 数据类型 | 是否 必填 | 签名 顺序 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 1 |
productCode | 产品类型 | 产品类型 | String | 是 | 2 |
merchantBatchN o | 商户批次号 | 全局唯一,由数字或字母组成,长度须控 制在 12 到 25 之间,可包含边界值 | String | 是 | 3 |
requestCount | 请求总笔数 | 须商户传入请求代付的总笔数核计 | Integer | 是 | 4 |
requestAmount | 请求总金额 | 须商户传入请求代付的总金额核计 | BigDecima l | 是 | 5 |
requestTime | 交易请求时间 | 格式:yyyy-MM-dd HH:mm:ss 如:2018-05-28 18:00:00 | String | 是 | 6 |
callbackUrl | 商户通知地址 | 支付机构处理完请求后,处理结果页面跳 转到商户网站里指定的 http 地址。 | String | 否 | 7 |
firstProductCod e | 优先使用产品 | 组合付必填,非组合付不用填写 | String | 否 | 8 |
details | 代付明细数据 | 代付明细数据见子域(子域 List 转成json 字符串) | json 字符 串 | 是 | |
代付明细数据域 | |||||
userNo | 商户编号 | 商户入网后生成的数字字符串 | String | 是 | 9 |
tradeMerchantN o | 报备商户号 | 报备商户号 | String | 否 | 10 |
merchantOrderN o | 商户订单号 | 全局唯一,由数字或字母组成,长度须控 制在 12 到 25 之间,可包含边界值 | String | 是 | 11 |
receiverAccount NoEnc | 收款账户号 | 收款人银行卡卡号 | String | 是 | 12 |
receiverNameEn c | 收款人 | 收款人银行卡持卡人名称 | String | 是 | 13 |
receiverAccount Type | 账户类型 | 账户类型 | Integer | 是 | 14 |
receiverBankCh annelNo | 收款账户联行号 | 对公账户必须填写此字段 | String | 否 | 15 |
paidAmount | 交易金额 | 交易金额 | BigDecima l | 是 | 16 |
currency | 币种 | 人民币:201 | String | 是 | 17 |
isChecked | 是否复核 | 复核:201,不复核:202 | String | 是 | 18 |
paidDesc | 代付说明 | 填写此次单笔代付的代付说明(长度为 30 个字符以内) | String | 是 | 19 |
paidUse | 代付用途 | 代付用途 | String | 是 | 20 |
hmac | 签名数据 | String | 是 |
请求报文案例:
{
"userNo": "888100000004182",
"productCode": "BANK_PAY_ORDINARY_ORDER",
"hmac": "A47EB696F9C41EAE72010456B556CFDB",
"merchantBatchNo": "990000000001",
"requestCount": "2",
"requestAmount": "2.00",
"requestTime": "2018-05-28 14:10:10",
"callbackUrl":"http://10.10.10.10:8080/pay/merchantCallback",
"details": [{
"userNo": "888100000004182",
"merchantOrderNo": "880000000001",
"receiverAccountNoEnc": "6225882010007926",
"receiverNameEnc": "支付机构",
"receiverAccountType": "201",
"receiverBankChannelNo": "45545",
"paidAmount": "1.00",
"currency": "201",
"isChecked": "202",
"paidDesc": "工资发放",
"paidUse": "201"
},
{
"userNo": "888100000004182",
"merchantOrderNo": "880000000002",
"receiverAccountNoEnc": "6225882010007926",
"receiverNameEnc": "支付机构",
"receiverAccountType": "201",
"receiverBankChannelNo": "45545",
"paidAmount": "1.00",
"currency": "201",
"isChecked": "202",
"paidDesc": "工资发放",
"paidUse": "201"
}
]
}
3.3.2应答代付接口
参数名称 | 中文名称 | 说明 | 数据类 型 | 是否 必填 | 签名 顺序 |
statusCode | 应答码 | 请求响应的应答码 | String | 是 | 1 |
message | 应答信息 | 请求响应的应答码信息描述 | String | 是 | 2 |
data | 应答数据 | 代付数据见应答信息域(应答信息域对象转 成 json 字符串) | json 字符 串 | 是 | |
应答数据域 | |||||
errorCode | 错误码 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 3 |
errorDesc | 错误描述 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 4 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 5 |
merchantBatchN o | 商户批次号 | 全局唯一性,由商户生成并在发起代付请求 的时候传入 | String | 是 | 6 |
acceptSuccessC ount | 受理成功笔数 | 已受理商户批量请求笔数的累加 | Integer | 是 | 7 |
acceptFailCount | 受理失败笔数 | 没有受理商户批量请求笔数的累加 | Integer | 是 | 8 |
requestCount | 请求总笔数 | 商户请求的批量请求笔数总和 | Integer | 是 | 9 |
requestAmount | 请求总金额 | 商户请求的批量请求金额总和 | BigDeci mal | 是 | 10 |
hmac | 签名数据 | 参考 5.签名机制 | String | 是 |
应答报文案例:
{
"statusCode": 2001,
"message": "受理成功"
"data": {
"errorCode": "",
"errorDesc": "",
"userNo": "888100000004182",
"merchantBatchNo": "990000000001",
"acceptSuccessCount": 2,
"acceptFailCount": 0,
"requestCount": 2,
"requestAmount": 2.00,
"hmac": "81D3430BF3E4A1D05958FE99FB5434A4"
},
}
3.3.3异步通知参数列表
交易成功或交易失败时异步通知以 POST 请求方式返回 Json 数据。如若通知响应 statusCode 为
2001,则我司系统将进行二次补发通知,补发频率为 5, 20, 60, 120, 180, 240s。
接入方对异步通知需要作幂等处理。
参数名称 | 中文名称 | 说明 | 数据类型 | 是否 必填 | 签名 顺序 |
status | 状态 | 批量代付请求的交易状态 | Integer | 是 | 1 |
userNo | 商户号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 2 |
merchantBatchNo | 商户批次号 | 全局唯一性,由商户生成并在发起代付请 求的时候传入 | String | 是 | 3 |
platformBatchNo | 支付批次号 | 全局唯一性,成功受理商户的代付请求时 生成的批次号 | String | 否 | 4 |
successCount | 成功笔数 | 成功处理的笔数累加 | Integer | 是 | 5 |
successAmount | 成功金额 | 成功处理的金额累加 | BigDecimal | 是 | 6 |
failCount | 失败笔数 | 处理失败的笔数累加 | Integer | 是 | 7 |
failAmount | 失败金额 | 处理失败的金额累加 | BigDecimal | 是 | 8 |
processCount | 处理中笔数 | 在处理中的笔数累加 | Integer | 是 | 9 |
processAmount | 处理中金额 | 在处理中的金额累加 | BigDecimal | 是 | 10 |
requestCount | 请求总笔数 | 商户请求的批量请求笔数总和 | Integer | 是 | 11 |
requestAmount | 请求总金额 | 商户请求的批量请求金额总和 | BigDecimal | 是 | 12 |
acceptCount | 受理总笔数 | 受理商户批量请求笔数的累加 | Integer | 是 | 13 |
acceptAmount | 受理总金额 | 受理商户批量请求金额的累加 | BigDecimal | 是 | 14 |
feeSum | 总手续费 | 成功订单计算的手续费总和 | BigDecimal | 否 | 15 |
singleNotifyList | 批量明细列 表 | 代付明细数据见子域(子域 List 转成json 字符串) | json 数据字 符串 | 是 | 16 |
批量明细列表域 | |||||
status | 状态 | 代付明细交易状态 | Integer | 是 | 17 |
errorCode | 错误码 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 18 |
errorCodeDesc | 错误描述 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 19 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 20 |
tradeMerchantNo | 报备商户号 | 报备商户号 | String | 否 | 21 |
merchantOrderNo | 商户订单号 | 全局唯一性,由商户生成并在发起代付请求的时候传入 | String | 是 | 22 |
platformSerialNo | 平台流水号 | 全局唯一性,在成功受理商户的代付请求 时生成的流水号 | String | 否 | 23 |
receiverAccount NoEnc | 收款账户号 | 收款账户号信息 | String | 是 | 24 |
receiverNameEnc | 收款人 | 收款人信息 | String | 是 | 25 |
paidAmount | 交易金额 | 此订单交易金额 | BigDecimal | 是 | 26 |
fee | 手续费 | 此成功订单在该次代付交易中所需额外支 付的费用。 | BigDecimal | 否 | 27 |
completeTime | 完成时间 | 代付完成时间,格式:yyyy-MM-dd HH:mm:ss 默认不返回,如果有此参数需求,请联系客服。 | String | 是 | 28 |
hmac | 签名数据 | String | 是 |
请求报文案例:
{
"status": 203,
"successAmount": 2.00,
"successCount": 2,
"userNo": "888100000004182"
"hmac": "81D3430BF3E4A1D05958FE99FB5434A4"
"acceptAmount": 2.00,
"acceptCount": 2,
"failAmount": 0.00,
"failCount": 0,
"feeSum": 0.22,
"merchantBatchNo": "990000000001",
"platformBatchNo": "20022018053100002949",
"processAmount": 0.00,
"processCount": 0,
"requestAmount": 2.00,
"requestCount": 2,
"hmac": "81D3430BF3E4A1D05958FE99FB5434A4"
"singleNotifyList": [{ "fee": 0.11,
"merchantOrderNo": "880000000002",
"paidAmount": 1.00,
"platformSerialNo": "30032018053100031394",
"receiverAccountNoEnc": "6225882010007926", "receiverNameEnc": "支付机构",
"status": 205,
"userNo": "888100000004182"}, {"fee": 0.11,
"merchantOrderNo": "880000000001",
"paidAmount": 1.00,
"platformSerialNo": "30032018053100031393",
"receiverAccountNoEnc": "6225882010007926", "receiverNameEnc": "支付机构",
"status": 205,
"userNo": "888100000004182"}],
}
3.3.4商户返回确认信息
参数名称 | 中文名称 | 说明 | 数据类 型 | 是否 必填 | 签名 顺序 |
statusCode | 应答码 | 商户受理回调通知后返回的应答码 | String | 是 | 1 |
message | 应答信息 | 商户受理回调通知后处理失败返回的错 误描述 | String | 否 | 2 |
应答报文案例:
{
"statusCode": "2001",
" message ": "成功"
}
3.4余额查询
3.4.1请求参数列表
参数名称 | 中文名称 | 说明 | 数据类型 | 是否必填 | 签名 顺序 |
userNo | 商户编号 | 商户在支付平台系统的唯一身份标识。 | String | 是 | 1 |
hmac | 签名数据 | String | 是 |
请求报文案例:
{"userNo": "888100000000002","hmac": "484F1C01DED2A9176B17C6AFC11DA219"}
注:以上案例仅限于格式的参考,并不能作为真实数据发起请求。
3.4.2应答参数接口
参数名称 | 中文名称 | 说明 | 数据类型 | 是否 必填 | 签名 顺序 |
statusCode | 应答码 | 请求响应的应答码 | String | 是 | 1 |
message | 应答信息 | 请求响应的应答码信息 描述 | String | 是 | 2 |
data | 应答数据 | 数据见应答信息域(应答信息域对象转成 json 字符串) | json 字符串 | 是 | |
应答数据域(data) |
userNo | 商户号 | 商户在支付平台系统的 唯一身份标识。 | String | 是 | 3 |
userName | 商户名称 | 商户在支付平台系统注 册的名称 | String | 是 | 4 |
currency | 币种 | 余额账户统一记录的币种 人民币:201 | Integer | 是 | 5 |
useAbleSettAmount | 可取金额 | 除去风控冻结金额剩余 的可结算金额 | BigDecimal | 是 | 6 |
availableSettAmount Frozen | 可结算冻结金额 | 代付处理中的金额 | BigDecimal | 是 | 7 |
errorCode | 错误码 | 受理失败、受理中会在应答中返回错误码 | String | 否 | 8 |
errorDesc | 错误描述 | 受理失败、受理中会在应答中返回错误信息 | String | 否 | 9 |
hmac | 签名数据 | String | 是 |
应答报文案例:
{"data": {"userNo": "888100000004182","userName": "支付机构", "currency": 201,"useAbleSettAmount": 29233.05,"availableSettAmountFrozen": 82982.81, "errorCode": "","errorDesc": "","hmac": "484F1C01DED2A9176B17C6AFC11DA219"},"statusCode": 2001, "message": "查询成功"}
注:响应数据的顺序不代表签名的顺序,签名顺序请查阅文档的表格所对应的顺序
4.签名机制
为了保证数据传输过程中的数据真实性和完整性,我们需要对请求和返回数据进行签名,在接收签名数据之后进行签名校验。
签名按照参数的签名顺序将参数的值拼接后将密钥拼接在后面,生成签名的原始串,再按照相应的加密方法进行加密计算出签名的结果。
4.1待签名字符串
无论是请求还是应答,都按照以下方式拼接待签名字符串:
1、除hmac 字段外,所有参数按照文档要求的顺序设值,并参与拼接待签名字符串。
2、在待签名字符串中,字段名和字段值都采用原始值,不进行URL Encode。
3、空值及null 不参与验签。
4.2MD5签名
商户支付:签名方式,在商户入网时,由商户后台自行选择MD5 还是RSA 方式。
采用MD5 算法进行签名。在MD5 签名时需要商户密钥参与签名,商户密钥是以英文字母和数字组成的32 位字符串,商户可以登录汇聚支付门户系统,查看密钥信息。通过在待签名字符串后加商户密钥的内容,进行MD5 运算,形成的摘要字符串为签名结果。
相关文章:
支付功能之代收代付
有很多老板问小编:“这个分账功能好是好,也能搞定项目中的二清问题和税务纠纷,但还是太复杂了,每次要添加被分账对象都需要提交材料进行审核,太繁琐了,有没有更方便快捷的支付产品来解决资金问题࿱…...
QPixmap
pixel[ˈpɪksl]像素 QPixmap 是 Qt 框架中用于处理图像的一个类。它主要用于在屏幕上显示和处理图像,提供了许多实用的功能,如加载、保存、缩放、旋转、合并等。 绘制 从文件加载:从指定文件加载图像。 QPixmap pixmap(":/images/exam…...
Laravel门面之下:构建自定义门面应用的艺术
Laravel门面之下:构建自定义门面应用的艺术 在Laravel框架中,门面(Facade)提供了一种将类静态调用与面向对象代码解耦的优雅方式。门面是一个全局可访问的类,它为底层复杂的服务提供了一个简单的接口。然而࿰…...

智启万象 | 2024 Google 开发者大会直播攻略
8 月 7 日上午 9:30 2024 Google 开发者大会 主旨演讲直播将准时开启 想要在线上探索大会精彩内容? 快查收这份观看指南! 8 月 7 日上午 9:30 2024 Google 开发者大会开幕 锁定大会官网观看主旨演讲现场直播! 本次大会内容将同步于多个…...
技巧:print打印内容到控制台时信息显示不全
# 请求一个接口,res是响应内容,使用res.text打印的信息不全 #使用流式处理响应 #如果你需要流式处理大的响应,确保你在处理响应内容的同时不会提前结束流。resself.request_base(select_api,change_datachange_data)print("")# pri…...

3.表的操作
目录 创建表 创建表案例: 查看表结构 修改表 1.增加新列 2.修改列的属性 3.删除列 4.修改表名 5.修改列 删除表 创建表 语法: CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT 注释信息],field2 datatype2 [COMMENT 注释…...

AI回答:C#项目编译后生成部分文件的主要职责
【引入】以ConsoleApp1为例,请问C#编译之后以下文件有啥用 1.bin\runtimes 文件夹存放什么,有什么用? bin\runtimes 文件夹存放了项目的运行时相关文件,这些文件包括了各种目标平台的运行时库。 2.bin\生成的exe文件可以在别的电脑…...

RPC通信的简单流程
远程调用者假设需要调用Login方法,将调用的信息通过muduo库,同时进行了序列化和反序列化,发送到Rpcprovider上,RpcProvider通过对象和方法表来确定需要调用哪个服务对象的哪个方法。 UserRpcServiceRpc和UseRpcServiceRpcStub是继…...
前端发版(发包)缓存,需要强制刷新问题处理
问题原因: 浏览器问题 一、创建初始版本文件(public/version.json) { "version": "1722240835844" }二、设置版本判断(version.js) import axios from "axios";const isNewVersion () > {let baseUrl …...
洛谷练习(8.4/8.5)
题目 P2036 PERKET题目描述思路代码 P3799 小 Y 拼木棒题目描述思路代码 P1010 幂次方题目描述思路代码 P1498 南蛮图腾题目描述思路代码 P1928 外星密码题目描述思路代码 P2036 PERKET 题目描述 比较苦度和酸度的最小差值 思路 搜索最小差值 代码 void dfs(int sd,int k…...
DLMS/COSEM中的信息安全:加密算法(下)1
4.公钥算法 4.1概述 一般来说,公钥密码系统使用难以解决的问题作为算法的基础。RSA算法基于非常大的整数的素因子分解。椭圆曲线密码学(ECC)是基于求解椭圆曲线离散对数问题(ECDLP)的难度。与RSA相比,ECC提供了相似的安全级别,但密钥大小明显减少。ECC特别适用于嵌入式…...

ES6中的Promise、async、await,超详细讲解!
Promise是es6引入的异步编程新解决方案,Promise实例和原型上有reject、resolve、all、then、catch、finally等多个方法,语法上promise就是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果,本篇文章主要介绍了ES6中的P…...

Modbus poll和Modbus Mbslave的使用
读取Modbus Mbslave中的数据 首先创建COM1和COM2端口 然后 using System.IO.Ports; namespace 通信 {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");SerialPort serialPort new SerialPort("COM1",960…...

树莓集团的全球化征程:数字媒体产业的本土与国际布局
在全球数字化转型的浪潮中,树莓集团正稳步推进数字媒体产业从本土到国际的全球化布局。在数字媒体产业这一新兴且充满活力的领域中,树莓集团不仅在国内市场树立了标杆,更以其独特的全球化战略布局,引领着行业的未来趋势。 本土深耕…...
LeetCode面试150——274H指数
题目难度:中等 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 排序 3.2 排序时间优化(计数排序) 3.3 二分查找 参考文献 1 题目描述 给你一个整数数组 citations …...

【Linux】Linux重定向指南:探索输出重定向与追加重定向的奥秘!
欢迎来到 CILMY23 的博客 🏆本篇主题为:Linux重定向指南:探索输出重定向与追加重定向的奥秘! 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪…...

Spring AI -快速开发ChatGPT应用
Spring AI介绍 Spring AI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序,例如开发一款基于ChatGPT的对话、图片、音频等应用程序。 Spring AI已经集成了OpenAI的API,因此我们不需…...

Modern C++ 智能指针
Why? 原始指针存在缺陷,不符合现代编程语言的需要。 原始指针的缺陷: 指针指向一片内存,使用者无法得知到底是指向了什么,是数组还是对象?使用完指针是否需要销毁?什么时候销毁?如…...

Python的100道经典练习题,每日一练,必成大神!!!
Python的100道经典练习题是一个广泛而深入的学习资源,可以帮助Python初学者和进阶者巩固和提升编程技能 完整的100多道练习题可在下面图片免沸获取哦~ 整理了100道Python的题目,如果你是一位初学者,这一百多道题可以 帮助你轻松的使用Python…...

代码回滚命令
定位到当前分支 git branch回滚到指定的commit git reset --hard 85da0cb8322accad143cpush到远程分支 git push --force...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...