RsRequestUtils.java 3.44 KB
package com.bsth.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.security.MessageDigest;
import java.util.*;

/**
 * RS 接口调用工具类
 * Created by panzhao on 2017/8/2.
 */
public class RsRequestUtils {

    private static String password;

    static {
        password = "e126853c7f6f43b4857fa8dfe3b28b5d90be9e68";
    }

    static Logger logger = LoggerFactory.getLogger(RsRequestUtils.class);

    /**
     * 生成参数字符串
     * @return
     */
    public static String getParams(){
        String rs="";
        try {
            String nonce = getNonce(6);
            long t = System.currentTimeMillis();

            Map<String, String> map = new HashMap<>();
            map.put("password", password);
            map.put("timestamp", t + "");
            map.put("nonce", nonce);

            String sign = getSHA1(map);

            rs = "?password="+password+"&timestamp="+t+"&nonce="+nonce+"&sign="+sign;
        }catch (Exception e){
            logger.error("", e);
        }
        return rs;
    }

    /**
     * 生成参数字符串
     * @return
     */
    public static String getParams(Map<String, String> paramMap){
        StringBuilder rs=new StringBuilder("?");
        try {
            String nonce = getNonce(6);
            long t = System.currentTimeMillis();

            paramMap.put("password", password);
            paramMap.put("timestamp", t + "");
            paramMap.put("nonce", nonce);

            String sign = getSHA1(paramMap);
            paramMap.put("sign", sign);

            Set<String> ks = paramMap.keySet();
            for(String k : ks){
                rs.append(k + "=" + paramMap.get(k) + "&");
            }
            rs.deleteCharAt(rs.length() - 1);
        }catch (Exception e){
            logger.error("", e);
        }
        return rs.toString();
    }

    /**
     * 生成随机字符串
     * @return
     */
    public static String getNonce(int length) {
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }

    private static String getSHA1(Map<String, String> map) throws Exception {
        try {
            String[] array = new String[map.size()];
            map.values().toArray(array);
            StringBuffer sb = new StringBuffer();
            // 字符串排序
            Arrays.sort(array);
            for (int i = 0; i < array.length; i++) {
                sb.append(array[i]);
            }
            String str = sb.toString();
            // SHA1签名生成
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(str.getBytes());
            byte[] digest = md.digest();
            StringBuffer hexStr = new StringBuffer();
            String shaHex;
            for (int i = 0; i < digest.length; i++) {
                shaHex = Integer.toHexString(digest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexStr.append(0);
                }
                hexStr.append(shaHex);
            }
            return hexStr.toString();
        } catch (Exception e) {
            throw e;
        }
    }
}