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

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...