这些文档本来保存在本地的,但后来想了想还是挑了个平台发表出来,话不多少来看看怎么使用的吧!
很多接口需要进行加密处理,比如对参数进行ASCII排序并进行MD5加密生成新的参数sign请求。常用的请求有两种:post和get
待签名字符的生成规则如下:
1. 请求参数都按照名称ASCII码,升序排列(参数名称不允许相同)
2. 如果参数值带有中文, 需要制定字符集编码为UTF-8
3. 如果参数值为空,那么该参数不参与签名
4. 秘钥作为最后一个参数, 参数名为:key 将请求参数按上述顺序用&拼接。 然后,用MD5算法,对待签名字符串进行加密, 生成的签名数据(32位小写字符), 即是参数中sign的值。
postman自动加密流程如下:
1.设置环境变量key;sign值随意设置(此过程可省略)
image
2.请求参数设置中,引用sign值
image
3.Pre-request-Script中写MD5加密签名规则的脚本
a.get脚本:
// 获取sign签名
console.log(request.url); //获取参数
var url = request.url;
var param = url.split("?")[1];
//排序
if (param != null){
param += "&sign_key=1234567890";
var params = param.split("&");
params.sort();
var keys = new Array(params.length);
var values = new Array(params.length);
for (var i = 0; i < params.length; i++) {
keys[i] = params[i].split("=")[0];
values[i] = params[i].split("=")[1];
}
var str = []
for (var p = 0; p < keys.length; p++) {
if (keys[p] == "sign" || values[p] === "") {
continue;
}
//参数中含有时间戳时可使用此方法替换
var temp;
if(values[p].indexOf("{{") != -1 && values[p].indexOf("}}") != -1) {
temp = values[p].replace("{{", "");
temp = temp.replace("}}", "");
if(temp == "$timestamp") {
values[p] = Math.round(new Date().getTime()/1000); //获取时间戳
console.log(values[p])
}
console.log(values[p]);
}
str.push(keys[p] + "=" + values[p]);
}
var sign = str.join("&");
console.log(sign);
pm.environment.set("sign", CryptoJS.MD5(sign).toString()); //将sign设置为环境变量
}
2.post方法
//获取sign签名
console.log(request.url); //获取参数
var url = request.url;
var param = url.split("?")[1];
if (param != null){
param += "&sign_key=1234567890"
var params = param.split("&");
params.sort();
var keys = new Array(params.length);
var values = new Array(params.length);
for (var i = 0; i < params.length; i++) {
keys[i] = params[i].split("=")[0];
values[i] = params[i].split("=")[1]; //取值
// console.log(values[i])
}
var str = []
for (var p = 0; p < keys.length; p++) {
if (keys[p] == "sign" || values[p] === "") {
continue;
}
var temp;
if(values[p].indexOf("{{") != -1 && values[p].indexOf("}}") != -1) {
temp = values[p].replace("{{", "");
temp = temp.replace("}}", "");
}
str.push(keys[p] + "=" + values[p]);
}
var sign = str.join("&");
console.log(sign);
pm.environment.set("sign", CryptoJS.MD5(sign).toString());
}
当然,上述脚本中也可将sign_key设置为全局变量,然后在获取
代码如下:
str.push('key=' + pm.environment.get("key"))
上述方法也有可优化之处,欢迎各位大神指正!
网友评论