使用postman工具调试接口时,需要编写Pre-request Script脚本进行签名。具体方法如下:
- 复制如下脚本到Pre-request Script中:
//设置accessKey和secretKey
var accessKey = "*************";
var secretKey = "*************";
//生成当前时间戳
var timestamp = Math.round(new Date().getTime());
//定义一个随机数(32768, 65536)之间
var nonce = parseInt(Math.random()*(32769)+32768,10);
pm.environment.set("ak", accessKey);
pm.environment.set("random", nonce);
pm.environment.set("timestamp",timestamp);
var ss = new Array();
ss.push({"key": "accessKey", "value": accessKey});
ss.push({"key": "random", "value": nonce});
ss.push({"key": "timestamp", "value": timestamp});
var query = pm.request.url.query;
var queryStr = JSON.stringify(query);
var queryArr = JSON.parse(queryStr);
for(const item of queryArr){
if(item.disabled){
continue;
}
if(item.value){
ss.push({"key": item.key, "value": item.value});
}
}
ss.sort(function(x,y){
return x.key.toString().localeCompare(y.key.toString());
});
var str = "";
for(const s of ss){
str += s.key + "=" + s.value + "&";
}
str += "key=" + secretKey;
var sign= CryptoJS.MD5(str).toString().toUpperCase();
pm.environment.set("sign", sign);
- 在header中增加四个参数,分别是:accessKey、timestamp、random、sign,如下图所示:
------------------------分割线---------------------------
后端调用Demo
1.引入sdk的包
2.在本地系统配置文件中配置ak、sk以及url,可以通过配置文件方式也可以定义常量。如下图。
3.编写调用方法,可以使用HttpClient或者RestTemplate进行接口调用。如下图。
@Value("${remote.url}")
private String baseUrl;
@Value("${remote.accessKey}")
private String accessKey;
@Value("${remote.secretKey}")
private String secretKey;
//获取平台获取的ak,sk可以使用配置文件或者常量方式
//AkSkProperties 为sdk对象
AkSkProperties properties = new AkSkProperties();
properties.setAccessKey(accessKey);
properties.setSecretKey(secretKey);
properties.setUrl(baseUrl);
//params为调用接口的请求参数
Map<String,String> params = new HashMap<>();
//通过传入请求参数,调用sdk方法排序、获取时间戳、随机数以及Sign签名
Map<String, String> map = AkSignUtils.getUrlSign(properties, params);
//设置请求头,accessKey、timestamp、random以及sign
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("accessKey", map.get("accessKey"));
requestHeaders.add("timestamp", map.get("timestamp"));
requestHeaders.add("random", map.get("random"));
requestHeaders.add("sign", map.get("sign"));
//使用RestTemplate进行接口调用
RestTemplate template = new RestTemplate();
HttpEntity<String> requestEntity = new HttpEntity<>(null, requestHeaders);
ResponseEntity<String> response = template.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);
String result = response.getBody();
System.out.println(result);