对接示例 (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);
    }
}