代收-批量代收
批量代收流程:
调用地址
使用HTTP协议,POST方式提交。
URL(测试环境):
URL(测试环境外网):https://test.wsmsd.cn/sit/api/v3/ipsdk/trans/batchCollection
URL(生产环境):https://s2.lakala.com/api/v3/ipsdk/trans/batchCollection
请求报文
| 字段名 | 中文名称 | 是否必填 | 类型 | 说明 |
|---|---|---|---|---|
| merchant_no | 商户号 | M | String(32) | 拉卡拉分配的商户号 |
| term_no | 终端号 | M | String(32) | 拉卡拉分配的业务终端号 |
| batch_no | 批次号 | M | String(4) | 批量交易时填写,当天唯一,0001-9999 |
| total_qty | 总笔数 | M | String(6) | 批量代收总笔数(最大1000) |
| total_amt | 总金额 | M | String(12) | 批量代收总金额 |
| file_name | 文件名称 | M | String(100) | 文件名及文件路径,比如 /OP00000003/20220411/DK_8223010594303A2_0001_I.txt |
| digest | 文件摘要 | M | String(256) | 文件的SM3摘要 |
响应报文
| 字段名 | 中文名称 | 是否必填 | 类型 | 说明 |
|---|---|---|---|---|
| txn_time | 发送时间 | M | String(14) | 发送时间 |
| batch_no | 批次号 | M | String(4) | 批量交易时填写,当天唯一,0001-9999 |
| total_qty | 总笔数 | M | String(6) | 批量代收总笔数(最大1000) |
| total_amt | 总金额 | M | String(12) | 批量代收总金额 |
文件名及文件路径
文件名规则:DK_商户号_ 日期(YYYYMMDD) _批次号(0001-9999) _文件类型(请求: I ,结果: O,拒绝: R).txt
文件路径规则:/APPID/YYYYMMDD/文件名
批量请求文件格式
请求文件头:总金额|总笔数|请求方保留域1|请求方保留域2请求文件体:商户号|外部请求流水号|交易币种|交易金额|协议号|附言|请求方保留域1|请求方保留域2merchantNo|outTradeNo|currencyCode|txnAmt|lklagreno|postscript|reqReserved1|reqReserved28223010594303A2|1649399896|156|500|202204081105000101A2000000002003|附言|保留域1|保留域2例如:600|2|| merchantNo|outTradeNo|currencyCode|txnAmt|lklagreno|postscript|reqReserved1|reqReserved28223010594303A2|202204100001000002|156|100|202204081105000101A2000000002003|附言|| 8223010594303A2|202204100001000003|156|500|202204081105000101A2000000002003|附言||复制
批量返回文件格式-成功
返回文件头:
批量返回文件格式-拒绝
拒绝文件体(无文件头):
文件摘要示例
Java :
复制
static{
try{
Security.addProvider(new BouncyCastleProvider());
}catch(Exception e){
e.printStackTrace();
}
}
public static String getDigestSM3(File file) throws Exception {
InputStream fis = null;
try {
fis = new FileInputStream(file);
byte buffer[] = new byte[1024];
MessageDigest md = MessageDigest.getInstance("SM3");
for (int numRead = 0; (numRead = fis.read(buffer)) > 0;) {
md.update(buffer, 0, numRead);
}
return Hex.toHexString(md.digest());
} finally {
if (fis != null)
fis.close();
}
}
