//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);
//        }
//    }
//
//}