TTWUSA APIV2

开始使用

鉴权与签名

请求签名生成规则与安全建议。

说明

除 sign 外,将公共参数和业务参数按参数名升序排列,依次拼接参数名与参数值后进行 MD5 计算。

签名规则沿用旧版文档;上线前请以服务端当前鉴权实现为准完成核验。

鉴权说明

请参阅鉴权签名说明。

示例

PHP 签名示例
ksort($params);
$payload = '';
foreach ($params as $key => $value) {
    if ($key !== 'sign') $payload .= $key . $value;
}
$sign = md5($payload);
Java 签名示例
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;

public static String sign(Map<String, ?> params) throws NoSuchAlgorithmException {
    TreeMap<String, Object> sortedParams = new TreeMap<String, Object>();
    for (Map.Entry<String, ?> entry : params.entrySet()) {
        if (!"sign".equals(entry.getKey())) {
            sortedParams.put(entry.getKey(), entry.getValue());
        }
    }

    StringBuilder payload = new StringBuilder();
    for (Map.Entry<String, Object> entry : sortedParams.entrySet()) {
        payload.append(entry.getKey());
        payload.append(entry.getValue() == null ? "" : String.valueOf(entry.getValue()));
    }

    byte[] digest = MessageDigest.getInstance("MD5")
        .digest(payload.toString().getBytes(StandardCharsets.UTF_8));
    StringBuilder sign = new StringBuilder(32);
    for (byte value : digest) {
        sign.append(String.format("%02x", value & 0xff));
    }
    return sign.toString();
}