Appearance
请求方式
所有的接口都以application/json方式请求
签名规则
所有参数按照字段名的 ASCII 码(字典序)从小到大排序后使用 QueryString 的格式(即key1=value1&key2=value2…)拼接而成,进行第一次MD5加密,加密后的字符串再加上秘钥 &key=key,再进行一次MD5加密,并把得到字符串全部转化为大写字符。 空值不参与签名
代码实例
java
public class SignUtils {
public static String sign(Map<String, Object> paramMap, String key) {
paramMap.remove("sign");
SortedMap<String, Object> sMap = new TreeMap(paramMap);
StringBuffer stringBuffer = new StringBuffer();
for (Map.Entry<String, Object> m : sMap.entrySet()) {
Object value = m.getValue();
if (value != null && StringUtils.isNotBlank(String.valueOf(value))) {
stringBuffer.append(m.getKey()).append("=").append(m.getValue()).append("&");
}
}
stringBuffer.delete(stringBuffer.length() - 1, stringBuffer.length());
String md5First = DigestUtils.md5Hex(stringBuffer.toString());
String argPreSign = md5First.concat("&key=").concat(key);
String signStr = DigestUtils.md5Hex(argPreSign).toUpperCase();
return signStr;
}
public static Boolean verifySignature(Map params, String secret) {
JSONObject bodyJson = new JSONObject(params);
String sign = bodyJson.getString("sign");
return sign(params, secret).equals(sign);
}
}
UPay