代收-批量代收
批量代收流程:
調用地址
使用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();
}
}
