# 代码示例
签名方法
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);
}
}
}