|
@@ -1,137 +1,137 @@
|
|
|
-package com.zswl.cloud.springBtach.server.core.api.dfy;
|
|
|
-
|
|
|
-import cn.hutool.core.codec.Base64Encoder;
|
|
|
-import cn.hutool.crypto.SecureUtil;
|
|
|
-import cn.hutool.json.JSONArray;
|
|
|
-import cn.hutool.json.JSONObject;
|
|
|
-import cn.hutool.json.JSONUtil;
|
|
|
-import com.zswl.cloud.springBtach.server.core.api.dfy.request.ScenicRequest;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-/**
|
|
|
- * API签名工具类
|
|
|
- */
|
|
|
-public class Signature {
|
|
|
-
|
|
|
- private static final String API_SIGNATURE_KEY = "sign";
|
|
|
-
|
|
|
- public static void main(String[] args) {
|
|
|
-
|
|
|
-
|
|
|
- ScenicRequest scenicRequest = new ScenicRequest();
|
|
|
- ScenicRequest.Scenic scenic = new ScenicRequest.Scenic();
|
|
|
- scenic.setKey("南京");
|
|
|
- scenic.setPage("1");
|
|
|
- scenic.setPageSize("10");
|
|
|
-
|
|
|
-
|
|
|
- scenicRequest.setData(scenic);
|
|
|
-//71C6F9A4927718E2E0B94D9D834875F2
|
|
|
-//71C6F9A4927718E2E0B94D9D834875F2
|
|
|
-
|
|
|
- String SecretKey="aaaaaaaa";
|
|
|
-
|
|
|
- System.out.println(JSONUtil.toJsonStr(scenicRequest));
|
|
|
- String signature = getSignature(JSONUtil.parseObj(scenicRequest), SecretKey);
|
|
|
- System.out.println(signature);
|
|
|
- String data = Base64Encoder.encode(JSONUtil.parseObj(scenicRequest).get("data").toString());
|
|
|
- System.out.println(data);
|
|
|
- System.out.println(scenicRequest.getTimestamp());
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据入参和密钥获取签名
|
|
|
- */
|
|
|
- public static String getSignature(JSONObject data, String secretKey) {
|
|
|
-
|
|
|
- // 第一步:获取并排序json数据
|
|
|
- //忽略签名
|
|
|
- data.remove("sign");
|
|
|
-
|
|
|
- //递归获取json结构中的键值对,组合键值并保存到列表中
|
|
|
- List<String> keyValueList = new ArrayList<String>();
|
|
|
- propertyFilter(null, data, keyValueList);
|
|
|
-
|
|
|
- //对列表进行排序,区分大小写
|
|
|
- Collections.sort(keyValueList);
|
|
|
-
|
|
|
-
|
|
|
- // 第二步:格式化数据,用&分割
|
|
|
- String formatText = StringUtils.join(keyValueList, "&");
|
|
|
-
|
|
|
- //在首尾加上秘钥,用&分割
|
|
|
- String finalText = secretKey + "&" + formatText + "&" + secretKey;
|
|
|
-
|
|
|
- // 第三步:MD5加密并转换成大写的16进制(finalText为utf-8编码)
|
|
|
-
|
|
|
- String upperCase = SecureUtil.md5(finalText).toUpperCase();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- return upperCase;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private static String byte2hex(byte[] bytes) {
|
|
|
- StringBuilder sign = new StringBuilder();
|
|
|
- for (int i = 0; i < bytes.length; i++) {
|
|
|
- String hex = Integer.toHexString(bytes[i] & 0xFF);
|
|
|
- if (hex.length() == 1) {
|
|
|
- sign.append("0");
|
|
|
- }
|
|
|
- sign.append(hex.toUpperCase());
|
|
|
- }
|
|
|
- return sign.toString();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * PropertyPreFilter
|
|
|
- * 与jsonObjectPropertyFilter,jsonArrayPropertyFilter配合完成键值对的抽取组合
|
|
|
- */
|
|
|
- private static void propertyFilter(String key, Object value, List<String> list) {
|
|
|
- if (null == value) {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (value instanceof JSONObject) {
|
|
|
- jsonObjectPropertyFilter(key, (JSONObject) value, list);
|
|
|
- } else if (value instanceof JSONArray) {
|
|
|
- jsonArrayPropertyFilter(key, (JSONArray) value, list);
|
|
|
- } else {
|
|
|
- if (value != null && value.toString().length() > 0) {
|
|
|
- list.add(key.trim() + "=" + value);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * jsonObjectPropertyFilter 过滤json对象
|
|
|
- */
|
|
|
- private static void jsonObjectPropertyFilter(String key, JSONObject value, List<String> list) {
|
|
|
- JSONObject jsonObject = value;
|
|
|
- if (jsonObject.isEmpty()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- for (String str : jsonObject.keySet()) {
|
|
|
- propertyFilter(str, jsonObject.get(str), list);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * jsonArrayPropertyFilter 过滤json数组
|
|
|
- */
|
|
|
- private static void jsonArrayPropertyFilter(String key, JSONArray value, List<String> list) {
|
|
|
- JSONArray jsonArray = value;
|
|
|
- if (jsonArray.isEmpty()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- for (Object json : jsonArray) {
|
|
|
- propertyFilter(key, json, list);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
+//package com.zswl.cloud.springBtach.server.core.api.dfy;
|
|
|
+//
|
|
|
+//import cn.hutool.core.codec.Base64Encoder;
|
|
|
+//import cn.hutool.crypto.SecureUtil;
|
|
|
+//import cn.hutool.json.JSONArray;
|
|
|
+//import cn.hutool.json.JSONObject;
|
|
|
+//import cn.hutool.json.JSONUtil;
|
|
|
+//import com.zswl.cloud.springBtach.server.core.api.dfy.request.ScenicRequest;
|
|
|
+//import org.apache.commons.lang3.StringUtils;
|
|
|
+//import java.util.ArrayList;
|
|
|
+//import java.util.Collections;
|
|
|
+//import java.util.List;
|
|
|
+//
|
|
|
+///**
|
|
|
+// * API签名工具类
|
|
|
+// */
|
|
|
+//public class Signature {
|
|
|
+//
|
|
|
+// private static final String API_SIGNATURE_KEY = "sign";
|
|
|
+//
|
|
|
+// public static void main(String[] args) {
|
|
|
+//
|
|
|
+//
|
|
|
+// ScenicRequest scenicRequest = new ScenicRequest();
|
|
|
+// ScenicRequest.Scenic scenic = new ScenicRequest.Scenic();
|
|
|
+// scenic.setKey("南京");
|
|
|
+// scenic.setPage("1");
|
|
|
+// scenic.setPageSize("10");
|
|
|
+//
|
|
|
+//
|
|
|
+// scenicRequest.setData(scenic);
|
|
|
+////71C6F9A4927718E2E0B94D9D834875F2
|
|
|
+////71C6F9A4927718E2E0B94D9D834875F2
|
|
|
+//
|
|
|
+// String SecretKey="aaaaaaaa";
|
|
|
+//
|
|
|
+// System.out.println(JSONUtil.toJsonStr(scenicRequest));
|
|
|
+// String signature = getSignature(JSONUtil.parseObj(scenicRequest), SecretKey);
|
|
|
+// System.out.println(signature);
|
|
|
+// String data = Base64Encoder.encode(JSONUtil.parseObj(scenicRequest).get("data").toString());
|
|
|
+// System.out.println(data);
|
|
|
+// System.out.println(scenicRequest.getTimestamp());
|
|
|
+//
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 根据入参和密钥获取签名
|
|
|
+// */
|
|
|
+// public static String getSignature(JSONObject data, String secretKey) {
|
|
|
+//
|
|
|
+// // 第一步:获取并排序json数据
|
|
|
+// //忽略签名
|
|
|
+// data.remove("sign");
|
|
|
+//
|
|
|
+// //递归获取json结构中的键值对,组合键值并保存到列表中
|
|
|
+// List<String> keyValueList = new ArrayList<String>();
|
|
|
+// propertyFilter(null, data, keyValueList);
|
|
|
+//
|
|
|
+// //对列表进行排序,区分大小写
|
|
|
+// Collections.sort(keyValueList);
|
|
|
+//
|
|
|
+//
|
|
|
+// // 第二步:格式化数据,用&分割
|
|
|
+// String formatText = StringUtils.join(keyValueList, "&");
|
|
|
+//
|
|
|
+// //在首尾加上秘钥,用&分割
|
|
|
+// String finalText = secretKey + "&" + formatText + "&" + secretKey;
|
|
|
+//
|
|
|
+// // 第三步:MD5加密并转换成大写的16进制(finalText为utf-8编码)
|
|
|
+//
|
|
|
+// String upperCase = SecureUtil.md5(finalText).toUpperCase();
|
|
|
+//
|
|
|
+//
|
|
|
+//
|
|
|
+// return upperCase;
|
|
|
+// }
|
|
|
+//
|
|
|
+//
|
|
|
+// private static String byte2hex(byte[] bytes) {
|
|
|
+// StringBuilder sign = new StringBuilder();
|
|
|
+// for (int i = 0; i < bytes.length; i++) {
|
|
|
+// String hex = Integer.toHexString(bytes[i] & 0xFF);
|
|
|
+// if (hex.length() == 1) {
|
|
|
+// sign.append("0");
|
|
|
+// }
|
|
|
+// sign.append(hex.toUpperCase());
|
|
|
+// }
|
|
|
+// return sign.toString();
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * PropertyPreFilter
|
|
|
+// * 与jsonObjectPropertyFilter,jsonArrayPropertyFilter配合完成键值对的抽取组合
|
|
|
+// */
|
|
|
+// private static void propertyFilter(String key, Object value, List<String> list) {
|
|
|
+// if (null == value) {
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// if (value instanceof JSONObject) {
|
|
|
+// jsonObjectPropertyFilter(key, (JSONObject) value, list);
|
|
|
+// } else if (value instanceof JSONArray) {
|
|
|
+// jsonArrayPropertyFilter(key, (JSONArray) value, list);
|
|
|
+// } else {
|
|
|
+// if (value != null && value.toString().length() > 0) {
|
|
|
+// list.add(key.trim() + "=" + value);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * jsonObjectPropertyFilter 过滤json对象
|
|
|
+// */
|
|
|
+// private static void jsonObjectPropertyFilter(String key, JSONObject value, List<String> list) {
|
|
|
+// JSONObject jsonObject = value;
|
|
|
+// if (jsonObject.isEmpty()) {
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// for (String str : jsonObject.keySet()) {
|
|
|
+// propertyFilter(str, jsonObject.get(str), list);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * jsonArrayPropertyFilter 过滤json数组
|
|
|
+// */
|
|
|
+// private static void jsonArrayPropertyFilter(String key, JSONArray value, List<String> list) {
|
|
|
+// JSONArray jsonArray = value;
|
|
|
+// if (jsonArray.isEmpty()) {
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// for (Object json : jsonArray) {
|
|
|
+// propertyFilter(key, json, list);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+//}
|