调用示例
更新时间:2023-11-13
请看完API文档参考后再看本篇示例
AES版本调用示例(以银行卡四要素为例):
Plain Text
1@Test
2public void testApi() {
3 String localUrl = "见已购列表";
4 InvokeRequest invokeRequest = new InvokeRequest();
5 // appKey
6 Long timestamp = System.currentTimeMillis() / 1000;
7 Map<String, Object> paramMap = new HashMap<>();
8
9 String mobile = "手机号";
10 String name = "姓名";
11 String idNum = "身份证号";
12 String cardNo = "银行卡号";
13 paramMap.put("mobile", mobile);
14 paramMap.put("name", name);
15 paramMap.put("idNum", idNum);
16 paramMap.put("cardNo", cardNo);
17
18 String encrypt = AesEncryptUtil.encrypt(JSON.toJSONString(paramMap), "sk");
19 invokeRequest.setParamEncrypt(encrypt);
20 invokeRequest.setReqEncryptType(1);
21 String secretKey = "sk";
22 StringBuilder assemble = AssembleUtil.assembleParameters(new HashMap<>());
23 if (StringUtils.isNotEmpty(invokeRequest.getParamEncrypt())) {
24 assemble.append(invokeRequest.getParamEncrypt()).append("&");
25 }
26 assemble.append(timestamp).append("&").append(secretKey);
27 System.out.println("assemble:" + assemble.toString());
28 String signature = MD5Util.md5Encode(assemble.toString());
29 String bodyJson = JSON.toJSONString(invokeRequest);
30 List<Header> headers = new ArrayList<>();
31 Header appKeyHeader = new BasicHeader("appkey", "ak");
32 Header timeStampHeader = new BasicHeader("timestamp",
33 String.valueOf(timestamp));
34 Header msgEncryptionHeader = new BasicHeader("signature", signature);
35 headers.add(appKeyHeader);
36 headers.add(timeStampHeader);
37 headers.add(msgEncryptionHeader);
38 System.out.println(bodyJson);
39 System.out.println(HttpsUtil.post(localUrl, headers.toArray(new Header[]{}), bodyJson,
40 2000, 30000));
41}
42
43// assemble方法
44public class AssembleUtil {
45 public static <T> StringBuilder assembleParameters(Map<String, T> paramMap) {
46 StringBuilder result = new StringBuilder();
47 if (paramMap == null || paramMap.isEmpty()) {
48 return result;
49 }
50
51 paramMap.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEach(entry ->
52 result.append(entry.getKey()).append("=").append(entry.getValue()).append("&"));
53 return result;
54 }
55}
56
57// md5方法
58public static String md5Encode(String plainText) {
59 byte[] secretBytes;
60 try {
61 secretBytes = MessageDigest.getInstance("md5").digest(plainText
62 .getBytes());
63 } catch (NoSuchAlgorithmException e) {
64 throw new RuntimeException("无此md5算法");
65 }
66 String md5code = (new BigInteger(1, secretBytes)).toString(16);
67 return StringUtils.leftPad(md5code, 32, "0");
68}
69
70
71// AES加密方法
72Map<String, Object> paramMap = new HashMap<>();
73paramMap.put("mobile", mobile);
74String s = JSON.toJSONString(paramMap);
75String encrypt = AesEncryptUtil.encrypt(s, {secretKey});
76
77
78public static String encrypt(String content, String encryptKey) {
79 String key = encryptKey;
80 if (encryptKey.length() > 64) {
81 key = encryptKey.substring(0, DEFAULT_KEY_LEN);
82 }
83 try {
84 Cipher cipher = Cipher.getInstance("AES");
85 cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
86 byte[] b = cipher.doFinal(content.getBytes("utf-8"));
87 return Base64.encodeBase64String(b);
88 } catch (Exception e) {
89 log.info("AesEncryptUtil encrypt catch e: {}", e);
90 return null;
91 }
92
93}
明文版本调用示例(以银行卡三要素为例)
Plain Text
1@Test
2public void testTelecomApi() {
3 String localUrl = "见已购列表";
4 InvokeRequest invokeRequest = new InvokeRequest();
5
6 Long timestamp = System.currentTimeMillis() / 1000;
7 Map<String, Object> paramMap = new HashMap<>();
8
9 paramMap.put("mobile", "手机号");
10 paramMap.put("name", "姓名");
11 paramMap.put("idNum", "身份证号");
12 invokeRequest.setParameters(paramMap);
13 String secretKey = "提供的sk";
14 StringBuilder assemble = AssembleUtil.assembleParameters(paramMap);
15 assemble.append(timestamp).append("&").append(secretKey);
16 String signature = md5Encode(assemble.toString());
17 String bodyJson = JSON.toJSONString(invokeRequest);
18 List<Header> headers = new ArrayList<>();
19 Header appKeyHeader = new BasicHeader("appkey", "提供的ak");
20 Header timeStampHeader = new BasicHeader("timestamp",
21 String.valueOf(timestamp));
22 Header msgEncryptionHeader = new BasicHeader("signature", signature);
23 headers.add(appKeyHeader);
24 headers.add(timeStampHeader);
25 headers.add(msgEncryptionHeader);
26 System.out.println(HttpsUtil.post(localUrl, headers.toArray(new Header[]{}), bodyJson,
27 2000, 30000));
28}
29
30
31
32// assemble方法
33public class AssembleUtil {
34 public static <T> StringBuilder assembleParameters(Map<String, T> paramMap) {
35 StringBuilder result = new StringBuilder();
36 if (paramMap == null || paramMap.isEmpty()) {
37 return result;
38 }
39
40 paramMap.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEach(entry ->
41 result.append(entry.getKey()).append("=").append(entry.getValue()).append("&"));
42 return result;
43 }
44}
45
46// md5方法
47public static String md5Encode(String plainText) {
48 byte[] secretBytes;
49 try {
50 secretBytes = MessageDigest.getInstance("md5").digest(plainText
51 .getBytes());
52 } catch (NoSuchAlgorithmException e) {
53 throw new RuntimeException("无此md5算法");
54 }
55 String md5code = (new BigInteger(1, secretBytes)).toString(16);
56 return StringUtils.leftPad(md5code, 32, "0");
57}