对接示例 (Java)
以下示例展示基于 MnemoData 的通用 Java 接入流程,包含业务参数组装、signData 加密及 HTTP 请求发送。
加密流程:① 将业务参数序列化为 JSON → ② AES/CBC/PKCS5Padding 加密(IV 为 "ds" 左填充至 16 位)→ ③ Base64 编码 → ④ Hex 编码 → 最终得到 signData 字符串。
不同产品输入参数不同,详细参数请以对应接口文档为准。若接口参数要求 MD5 加密,可参考 Md5Util.java 单独处理后再放入 signData。
示例代码
package com.ds.demo;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.junit.Test;
import com.ds.utils.AesUtils;
import com.ds.utils.HttpRequest;
import com.ds.utils.JacksonUtils;
public class Demo {
/** 请求地址(测试环境) */
String url = "";
/** 密钥(测试环境与生产环境不同) */
String enkey = "";
/** 商户号(测试环境与生产环境不同) */
String memberCode = "";
/** 终端号 */
String terminalCode = "";
/** 手机号 */
String phone = "";
@Test
public void demo() throws Exception {
// 不同产品输入参数不同,详细参数请以对应接口文档为准
Map<String, String> predata = new HashMap<String, String>();
predata.put("memberCode", memberCode);
predata.put("terminalCode", terminalCode);
predata.put("phone", phone);
// 直客填写自己公司全称,非直客填写数据使用方公司全称
predata.put("subMemberDesc", "XXX信息技术有限公司");
// 请求渠道订单号(32 位无连字符 UUID,每次请求唯一且不超过 50 位)
predata.put("memberOrder", UUID.randomUUID().toString().replace("-", ""));
String msgData = JacksonUtils.serialObject(predata);
// AES 加密(IV 固定为 "ds")
byte[] data = AesUtils.encrypt(
msgData.getBytes(StandardCharsets.UTF_8),
enkey.getBytes(StandardCharsets.UTF_8),
"ds");
// Base64 编码
byte[] b64 = Base64.encodeBase64(data);
// Hex 编码
char[] hex = Hex.encodeHex(b64);
String signData = new String(hex);
// 构建请求体
String postJson = "{\"memberCode\":\"" + memberCode + "\"," +
"\"terminalCode\":\"" + terminalCode + "\"," +
"\"signData\":\"" + signData + "\"}";
// 发送 POST 请求
String postResult = HttpRequest.sendPostJson(url, postJson);
System.out.println(postResult);
}
}