跳到主要内容

接口说明

公共参数

当虹云的API,除上传接口外,一般都会包含5个公用参数action,accessKey,version,timestamp 和 signature。

参数描述
actionAPI名称
accessKey分配给用户的accessKey
versionAPI版本
timestamp时间戳(1970年1月1日以来的毫秒数,格林尼治时间)
signature根据签名规则生成的签名串

生成签名

签名串通过以下规则和步骤生成:

  1. 对所有参数按照名称排序(CASE_INSENSITIVE_ORDER)生成一个字符串,并在字符串头上加上secretKey;
  2. 对该字符串调用HmacSHA256 算法生成signature;
  3. 每一个API,根据输入参数的不同,生成的签名都是不同的;

示例

我们以 获取帐户信息为例来说明签名的生成,该接口的参数为accessKey,action,version,timestamp,signature 5个:​ accessSecret = "5GcXHNYdAVVdFW0yervG"

accessKey = "a020e193-0f1"
action = "getUser"
version = "2.0"
timestamp= "1466488681033"

那么调用该接口的signature值就是:

signature = hmacSHA256Encrypt("5GcXHNYdAVVdFW0yervGaccessKey=a020e193-0f1action=getUsertimestamp=1466488681033version=2.0", "5GcXHNYdAVVdFW0yervG") = 3d864184117e240ad4def677c48fbba509a1d0d48ea5dfb9e914c587ae3ce5bf

响应格式

返回值为JSON格式,如下:

{
"code": 0, // integer, error code (0 means success)
"message": "success", // string, error message or "success"
"result": ..., // string/json, return data
"success": true // boolean, true or false
}

示例代码

加密

SHA256 Hmac 签名生成64位字符串, 可参考如下代码:

public static String hmacSHA256Encrypt(String plainText, String accessSecret) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
byte[] secretByte = accessSecret.getBytes("UTF-8");
byte[] dataBytes = plainText.getBytes("UTF-8");
SecretKey secret = new SecretKeySpec(secretByte, "HMACSHA256");
mac.init(secret);
byte[] doFinal = mac.doFinal(dataBytes);
byte[] hexB = new Hex().encode(doFinal);
String signature = new String(hexB);
return signature;
}

签名

public static String generateSignature(HashMap<String, Object> param, String secret) throws Exception {
if (StringUtils.isBlank(secret) || MapUtils.isEmpty(param)) {
return null;
}
List<String> keyList = new ArrayList<String>(param.keySet());
Collections.sort(keyList, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder(secret);
for (String key :keyList) {
if (param.get(key) != null && !key.equals("signature")) {
sb.append(key);
sb.append("=");
sb.append(param.get(key));
}
}
String signature = hmacSHA256Encrypt(sb.toString(), secret);
return signature;
}

Api调用

String ACCESSKEY = "a020e193-0f1";
String ACCESSSECRT = "5GcXHNYdAVVdFW0yervG";
String URI = "http://api-az-cn.danghongyun.com/rest?" ;
HashMap<String,String> params = new HashMap<String,String>();
params.put("accessKey", ACCESSKEY);
params.put("signature", generateSignature(params, ACCESSSECRT));
String request = createURL(URI, params);
String httpReslut = HttpUtil.get(request);
System.out.println(httpReslut);
return JSON.parseArray(httpReslut);