# 代码示例
# 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();
}
}