本文档提供了针对接口调用的通用指南和说明。
QA 开放平台接口调用
开放平台上的接口调用需要依托于在 Quick Audience 开放平台上创建的应用。成功创建应用后,系统将自动生成应用ID、AccessKey 和 AccessSecret,这些关键参数是执行接口调用时必需的凭证。
签名
当您的应用获得了相应的接口权限后,您可以按照以下步骤进行调用:在发起请求的接口URL中附加appId、accessKey和timestamp(即时间戳参数)。同时,您需要在请求头(header)中添加经过签名的Authorization字段。
公共参数说明
参数 | 说明 | 位置 |
appId | 开放平台的应用id | 请求URI中的参数部分 |
accessKey | 开放平台的应用的ak | 请求URI中的参数部分 |
timestamp | 当前时间戳(毫秒) | 请求URI中的参数部分 |
Authorization | 生成的签名 | 请求的header中 |
用户在访问时,按照下面的方法对请求进行签名处理:
使用请求参数构造规范化的请求字符串(Canonicalized Query String)
按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数)进行排序。 注:当使用GET方法提交请求时,这些参数就是请求URI中的参数部分(即URI中"?"之后由"&"连接的部分),生成签名的参数中还需要accessSecret。
名称和值要使用UTF-8字符集进行编码。
url的参数都需要使用urlEncode。
代码示例
其中签名的生成逻辑如下 java代码示例:
String appId="tttt";
String accessKey = "xxxx";
String accessSecret ="yyyy";
String timeStamp = "1708235644862";
SortedMap<String, String> map = new TreeMap<>();
map.put("appId", appId);
map.put("accessKey", accessKey);
map.put("accessSecret",accessSecret );
map.put("timestamp", timeStamp);
//如果是get请求,还有其他的query参数,那么继续加
String aa = getCanonicalQueryString(map);
System.out.println(aa);
String authorization = org.apache.commons.codec.digest.DigestUtils.md5Hex(aa);
System.out.println(authorization);
public static String getCanonicalQueryString(SortedMap<String, String> paramsMap) {
StringBuilder queryString = new StringBuilder();
boolean isFirstParameter = true;
for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
String paramName = entry.getKey();
String value = entry.getValue();
if (!isFirstParameter) {
queryString.append("&");
} else {
isFirstParameter = false;
}
queryString.append(paramName).append("=").append(value);
}
return queryString.toString();
}
示例如下:
curl --location -g --request POST 'http://{quick audience 公网域名}/openapi/apipath/xxxx?appId=aaa&accessKey=xxx×tamp=yyy' \
--header 'Authorization: demosign'
quick audience 会根据以上的参数进行验签,如果应用不存在,签名不正确等都会拦截接口请求,其他的接口参数详见具体的接口文档。
域名
环境 | 域名 | |
张家口 | quicka.aliyun.com | |
上海 | quicka-shanghai.aliyun.com |
异常码
异常code | 说明 | |
ES05910010001 | APP不存在 | 请确认在开放平台创建的APP是否存在 |
ES05910010002 | 签名不正确 | 请确认生成签名的方式是否正确 |
ES05910010003 | 时间戳校验不通过 | 生成的时间戳需要在30分钟内调用,否则校验不通过 |
ES05910010004 | 应用没有当前接口权限 | 应用需要订阅接口api才可以使用 |
ES05910010005 | 检查appId, accessKey, timestamp 传参是否正确 | 开放平台的接口,公共参数appId, accessKey, timestamp必须传,且按照平台的规范 |