# 代码示例

签名方法

   TreeMap<String, String> map = Maps.newTreeMap();//所有参数放在次map中,进行排序
   map.put("pid", pid);//支付中心颁发的pid
   map.put("appId", appId);//支付中心颁发的appId
   map.put("apiName","/trade/create");//调用的方法uri,比如/trade/create
   map.put("time", String.valueOf(System.currentTimeMillis()));
   map.put("version", "1.0.0");

   map.put("XXX","XXX");//加入支付所需参数
   String signContent = getSignContent(map);
   //加签之后,除了sign,不可再放入参数
   map.put("sign", MD5.sign(signContent, secret, "UTF-8").toUpperCase());//secret就是颁发的密钥

   String postData = HttpClients.post(centerPlatformConfiguration.getUrl() + centerPlatformConfiguration.getTradeCreate(), map);

签名字符串生成方法

   //使用了TreeMap进行排序后的参数map
   public static String getSignContent(TreeMap<String, String> params) {
        if (MapUtils.isEmpty(params)) {
            return null;
        }

        StringBuilder content = new StringBuilder();
        boolean first = true;
        for (String key : params.keySet()) {
            String value = params.get(key);
            if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value) && !key.equalsIgnoreCase("sign")) {
                content.append((first ? "" : "&") + key + "=" + value);
                first = false;
            }
        }

        return content.toString();
    }

MD5类:

   public class MD5 {

        /**
         * 签名字符串
         * @param text 需要签名的字符串
         * @param key 密钥
         * @param input_charset 编码格式
         * @return 签名结果
         */
        public static String sign(String text, String key, String input_charset) {
            text = text + key;
            return DigestUtils.md5Hex(getContentBytes(text, input_charset));
        }

        /**
         * 签名字符串
         * @param text 需要签名的字符串
         * @param sign 签名结果
         * @param key 密钥
         * @param input_charset 编码格式
         * @return 签名结果
         */
        public static boolean verify(String text, String sign, String key, String input_charset) {
            text = text + key;
            String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));
            if(mysign.equals(sign)) {
                return true;
            }
            else {
                return false;
            }
        }

        /**
         * @param content
         * @param charset
         * @return
         * @throws SignatureException
         * @throws UnsupportedEncodingException
         */
        private static byte[] getContentBytes(String content, String charset) {
            if (charset == null || "".equals(charset)) {
                return content.getBytes();
            }
            try {
                return content.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
            }
        }
    }