支付功能之代收代付
有很多老板问小编:“这个分账功能好是好,也能搞定项目中的二清问题和税务纠纷,但还是太复杂了,每次要添加被分账对象都需要提交材料进行审核,太繁琐了,有没有更方便快捷的支付产品来解决资金问题?”
那当然是有的,现在我们牛卡派推出了代收代付的支付功能,老板们只需要在后台添加姓名、银行卡和开户行无需审核即可输入具体的金额代发到其银行卡中,操作简单快捷,与分账不同,分账操作是根据每笔交易来进行下发资金,代收代付不按照比例分账,而是将具体的金额下发。
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...

[ASIS 2019]Unicorn shop1
打开题目 随便输入信息看一下 操作失败,只让输入一个字符 不妨抓包看一下,信息,发现 从中可以发现源代码是如何处理price的 使用的是unicodedata.numeric() 但我们查看页面源码时,看到源码处理方式是utf-8 所以,前…...

LangChain与泛型编程:探索代码生成的新维度
LangChain与泛型编程:探索代码生成的新维度 在软件开发领域,泛型编程是一种允许创建可重用组件的技术,这些组件可以在多种数据类型上工作的编程范式。LangChain作为一个假设的编程辅助工具,如果存在,它可能会支持泛型…...

day25
一、进程间通信(IPC) 1.1 进程间通信的引入 1> 对于多个线程之间通信,我们可以使用临界资源来完成,通过一个线程任务对临界资源进行修改,另一个线程也可以使用已经修改过的临界资源,但是要注意使用…...

红黑树的概念和模拟实现[C++]
文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…...

网络安全应急响应概述
前言 在网络安全领域,有一句广为人知的话:“没有绝对的安全”。这意味着任何系统都有可能被攻破。安全攻击的发生并不可怕,可怕的是从头到尾都毫无察觉。当系统遭遇攻击时,企业的安全人员需要立即进行应急响应,以将影响…...

【C++】链表操作技巧综合:重排链表(带你理顺链表的做题思路)
1.题目 2.算法思路 这是一道关于链表的综合题,一共涉及到三个步骤,其中每个步骤单拎出来就可以当一道单独的题目。所以需要大家对链表的操作十分熟悉,否则可能需要大量的时间做这道题目,而且还要很多的bug。 第一个步骤…...

行为型设计模式2:观察者/职责链/中介者/访问者
设计模式:观察者/职责链/中介者/访问者 (qq.com)...

叛逆,批判
1、对以往说法的批判之一(第一次这么公开批判是2004-2005年): 这部英文版的《数学百科全书》似乎是从俄语版翻译过来的?我查了三本引用的图书文献,都没有关于“nonsingular”和“singular”的类似下面的说法ÿ…...

Linux 命令,mkdir说明与使用
1:mkdir命令功用: 用于创建一个或多个目录,创建目录,必须在父目录中写上权限。 新目录的默认模式为0777,可以由系统或用的umask来修改。 2:命令构件: mkdir [options] directories 3:参数选项: -m&#x…...

24. 两两交换链表中的节点(Java)
目录 题目描述:示例 :代码实现: 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换&am…...