secretKey为商户平台设置的密钥key
params为非空参数集合
public static String genSignature(String secretKey, Map<String, String> params) throws UnsupportedEncodingException {
if (secretKey == null || params == null || params.size() == 0) {
return "";
}
// 1. 参数名按照ASCII码表升序排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 2. 按照排序拼接参数名与参数值
StringBuffer paramBuffer = new StringBuffer();
for (String key : keys) {
paramBuffer.append("&"+key).append(params.get(key) == null ? "" : "="+params.get(key));
}
// 3. 将secretKey拼接到最后
paramBuffer=paramBuffer.append("&key="+secretKey);
String pa =paramBuffer.substring(1);
// 4. MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
return DigestUtils.md5Hex(pa.getBytes("UTF-8")).toUpperCase();
}