# 代码示例

# Python 示例

调用方式

timestamp = int(time.time() * 1000)

data = {"pid": pid, "appid": appid, "timestamp": timestamp}
data["key"] = value

signstr = get_end_string(data)
sign = md5str(signstr, sk)

data["sign"] = sign
data["token"] = last_token

r = requests.post(url, data)
print(r.text)

签名前参数拼接

def get_end_string(params):
    endstr = ''
    is_first = True
    try:
        for k, v in params.items():
            if k != "sign" and k != "token":
                startstr = "" if is_first else "&"
                endstr = endstr + startstr + k + '=' + str(v)
                is_first = False
    except:
        print()
    return endstr

MD5

def md5str(data, salt):
  	import hashlib
    md5 = hashlib.md5(data.encode(encoding='UTF-8'))
    md5.update(salt.encode(encoding='UTF-8'))
    sign = md5.hexdigest()
    return sign

# Java 示例

调用方式

Map<String, Object> map  = new TreeMap<>();
map.put("pid", pid);		// 奇点分配的 pid
map.put("appId", appId);		// 奇点分配的 appId
map.put("timestamp", System.currentTimeMillis());

map.put("key", value);		// 加入生理计算所需参数

String signContent = getSignContent(map);
// token 为选填参数,不参与签名。每次 api 调用成功会返回一个 token 和有效期,有效期内可重复使用
map.put("token", lastToken);	
// 加签之后,除了sign,不可再放入参数
map.put("sign", MD5.sign(signContent, sk));		// sk 为奇点分配的 SecureKey

String postData = HttpClients.post(Constants.baseUrl + getHealthAnalysePath(), map);

签名前参数拼接

public static String getSignContent(Map<String, Object> params) {
  StringBuilder str = new StringBuilder();
  boolean first = true;
  for (Map.Entry<String, Object> entry : params.entrySet()) {
    String k = entry.getKey();
    Object v = entry.getValue();
    System.out.println(k + " : " + v);
    str.append((first ? "" : "&") + k + "=" + v);
    first = false;
  }

  return str.toString();
}

MD5工具类

public class MD5 {

  private static final char[] hexCode = "0123456789ABCDEF".toCharArray();
 
  public static String sign(String input, String sk) throws NoSuchAlgorithmException {
    String str = input + sk;
    byte[] bytes = MessageDigest.getInstance("MD5").digest(str.getBytes());
    return printHexBinary(bytes);
  }
 
  public static String printHexBinary(byte[] data) {
    StringBuilder r = new StringBuilder(data.length * 2);
    for (byte b : data) {
      r.append(hexCode[(b >> 4) & 0xF]);
      r.append(hexCode[(b & 0xF)]);
    }
    return r.toString();
  }
}
Last Updated: 3/10/2022, 2:44:22 PM