支付功能之代收代付
有很多老板问小编:“这个分账功能好是好,也能搞定项目中的二清问题和税务纠纷,但还是太复杂了,每次要添加被分账对象都需要提交材料进行审核,太繁琐了,有没有更方便快捷的支付产品来解决资金问题?”
那当然是有的,现在我们牛卡派推出了代收代付的支付功能,老板们只需要在后台添加姓名、银行卡和开户行无需审核即可输入具体的金额代发到其银行卡中,操作简单快捷,与分账不同,分账操作是根据每笔交易来进行下发资金,代收代付不按照比例分账,而是将具体的金额下发。
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...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
