Skip to content
On this page

请求方式

所有的接口都以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);
    }
}