实现开放接口 我们通常需要根据参数 及开发提供的密钥 生成一个签名
在根据解签签证成功后 请求接口
存在一下一个接口 需要用postman 获取签名 并且请求
接口名称:/api-open-center/open/gateway
请求方式:post
参数类型:form-data(其实json也是一样的)
根据常用的请求方式设置后({{XXX}}是获取变量参数)
类似api_request_id,timestamp参数都是实时获取的 ,此时我们就要实现预处理
在pre-request-Script 中写好预处理代码,代码段如下
let jsUrl = "https://gitee.com/lzq1357/various/raw/master/forge_min.js"
if (!pm.globals.has('forgeJS')) {
pm.sendRequest(jsUrl, function (err, res) {
if (err) {
console.error(err);
} else {
console.info("request forgs.js: Succeed, please try again");
pm.globals.set('forgeJS', res.text());
}
}
);
} else {
eval(pm.globals.get('forgeJS'));
let queryParam = pm.request.url.query.members;
let param = request.data;
//获取参数
let key = "-----BEGIN PRIVATE KEY-----\n" +
"我是私钥" +
"-----END PRIVATE KEY-----\n";
//Get & 合并GET和POST参数
for (let i in queryParam) {
param[queryParam[i].key] = queryParam[i].value;
}
//Post
//取key
var keys = [];
for (let k in param) {
if (k == 'sign' || k == 'sign_type') {
continue;
}
keys.push(k);
}
//排序
keys.sort();
//取value
var kv = [];
for (let k of keys) {
if (`timestamp` == k) {
let ts = Math.round(new Date().getTime())
pm.variables.set("timestamp", ts);
//获取时间戳 并且放置到timestamp参数中
param[k] = ts
}
if (`api_request_id` == k) {
let gid = pm.variables.replaceIn('{{$guid}}')
pm.variables.set("api_request_id", gid);
//获取guid 并且放置到api_request_id参数中
param[k] = gid
}
if (`content` == k) {
let con=pm.variables.get("content");
param[k] = con
}
kv.push(k + '=' + param[k]) //urlencode编码
}
//拼接
var signStr = kv.join('&');
console.log(signStr);
var prk = forge.pki.privateKeyFromPem(key);
const md = forge.md.sha1.create();
md.update(signStr, "utf8");
var sign64 = prk.sign(md);
var sign = forge.util.encode64(sign64)
console.log(sign);
// pm.variables.set("sign", sign);
pm.environment.set("sign",sign)
//获取sign 并且放置在环境变量中 哪里用到点哪里
}
以上就完成了带签名的请求了
点击执行 即可