OpenUtil.java 5.75 KB
package com.cnlive.shenhe.utils;

import javax.servlet.ServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.*;

/**
 * @author Administrator
 */
public class OpenUtil {

	
	 //生成post方式的请求参数签名
    public static void main(String[] args) {
//    	String app_key = "ad101b9152817a79b5c33c3617b96ff91385096ff3b4ba";     //开发者帐号对应的key. 请开发者谨慎保管此值。
//    	Map<String, String> params = new HashMap<>();
//        params.put("appId", "769_jetja50p18");
//        params.put("emailAddr", "642522156@qq.com");
//        params.put("title", "新直播开播申请");
//        params.put("content", "李伟 __12001072345__中投视讯sdadadad__测试2测试2测试2测试2__2019-10-30 14:53:50__2019-10-30 14:55:15__花园桥花园桥花园桥花园桥花园桥花园桥__rtmp://sxzg.rtmpt2.cnlive.com/live-sxzg-82/82_newshen4?key=564329e44212e754__rtmp://sxzg.rtmpt2.cnlive.com/live-sxzg-82/82_newshen4");
//        params.put("templateId", "4017");
//        params.put("sign", sign(params,app_key));
//        HttpUtil httpUtil = HttpUtil.init();
//        httpUtil.setParamMap(params);
//        String URL = "http://sms.cnlive.com/CnliveM3/email/sendMoreVarEmail.action";
//        Map<String, String> post = httpUtil.post(URL);
//        System.out.println(post.get("result"));
    }   
    

    /**
     * 验证签名
     * 用于服务端
     */
    public static boolean validateSign(ServletRequest request, String spKey) {
        return validateSign(request, spKey, null);
    }

    /**
     * 验证签名
     */
    private static boolean validateSign(ServletRequest request, String spKey, String... ignore) {
        Map<String, String> map = getRequestParam(request);
        String sign = map.get("sign");
        map.remove("sign");
        if (ignore != null) {
            for (String key : ignore) {
                map.remove(key);
            }
        }
        map = order(map);
        String str = mapJoin(map, false);
        String mySign = SHA1.SHA1Digest(str + "&key=" + spKey).toUpperCase();
        return mySign.equals(sign);
    }

    /**
     * 生成get 请求 URL
     */
    public static String buildURL(String url, Map<String, String> params, String spKey) {
        Map<String, String> map = order(params);
        if (map.containsKey("sign")) {
            map.remove("sign");
        }
        String str = mapJoin(map, false);

        String sign = SHA1.SHA1Digest(str + "&key=" + spKey).toUpperCase();
        map.put("sign", sign);
        return url + "?" + mapJoin(map, true);
    }

    /**
     * 生成签名 sign
     */
    public static String sign(Map<String, String> params, String spKey) {
        Map<String, String> map = order(params);
        if (map.containsKey("sign")) {
            map.remove("sign");
        }
        String str = mapJoin(map, false);
        return SHA1.SHA1Digest(str + "&key=" + spKey).toUpperCase();
    }

    /**
     * 获取请求参数
     */
    private static Map<String, String> getRequestParam(ServletRequest request) {
        Map<String, String> map = new LinkedHashMap<>();
        Map<String, String[]> map2 = request.getParameterMap();
        for (String key : map2.keySet()) {
            if (map2.get(key) == null || map2.get(key).length == 0) {
                map.put(key, null);
            } else {
                try {
                    String value = URLDecoder.decode(map2.get(key)[0], "utf-8");
                    map.put(key, value);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }

    /**
     * 获取附加参数
     */
    public static Map<String, String> getAttachParam(ServletRequest servletRequest, boolean attachKey) {
        Map<String, String[]> maps = servletRequest.getParameterMap();
        Map<String, String> map = new LinkedHashMap<String, String>();
        for (String key : maps.keySet()) {
            String[] vk = key.split("\\.");
            if (vk.length == 2 && vk[0].equals("attach")) {
                map.put(attachKey ? key : vk[1], maps.get(key)[0]);
            }
        }
        return map;
    }


    /**
     * url 参数串连
     */
    private static String mapJoin(Map<String, String> map, boolean valueUrlencode) {
        StringBuilder stringBuilder = new StringBuilder();
        for (String key : map.keySet()) {
            if (map.get(key) != null && !"".equals(map.get(key))) {
                try {
                    stringBuilder.append(key)
                            .append("=")
                            .append(valueUrlencode ? URLEncoder.encode(map.get(key), "utf-8").replace("+", "%20") : map.get(key))
                            .append("&");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        if (stringBuilder.length() > 0) {
            stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        }
        return stringBuilder.toString();
    }


    /**
     * Map key 排序
     */
    private static Map<String, String> order(Map<String, String> map) {
        HashMap<String, String> tempMap = new LinkedHashMap<>();
        List<Map.Entry<String, String>> infoIds = new ArrayList<>(map.entrySet());

        infoIds.sort(new Comparator<Map.Entry<String, String>>() {
            @Override
            public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                return (o1.getKey()).compareTo(o2.getKey());
            }
        });

        for (Map.Entry<String, String> item : infoIds) {
            tempMap.put(item.getKey(), item.getValue());
        }
        return tempMap;
    }

}