版本
20220302
简介
开发者可以通过签名功能手动进行加签操作。生成签名(sign)后,开发者可与自己代码中请求生成的信息进行对比,了解数据是否正确,保护数据安全。
原理
&
字符连接起来,此时生成的字符串为待签名字符串。示例
[
"id" => 124,
"timestamp" => "1637847312",
"meta" => 1,
];
排序拼接后得到:
id=124&meta=1×tamp=1637847312
然后再拼接自己设置的密钥,MD5即可得到签名。
md5(id=124&meta=1×tamp=1637847312密钥)
配置密钥
.env 文件添加以下代码
API_KEY=
API_SIGN_NAME=sign
API_KEY : API接口密钥,一定要设置的复杂一些,建议包含大小写字符及数字
API_SIGN_NAME : 签名参数名,可以自定义,一般为sign
接口测试
推荐使用postman进行测试。
postman 自动生成签名
将以下代码复制进 postman 的 script 中,如下图。
let salt = "密钥";
let param = request.data; //post 参数
let queryParam = pm.request.url.query.members; //get中的参数
//将post和get合并,并且移除sign参数
for (let i in queryParam) {
if (queryParam[i].key == "sign" || queryParam[i].value == null || queryParam[i].value == '' || queryParam[i].disabled == true) {
continue;
}
param[queryParam[i].key] = queryParam[i].value;
}
//时间戳参数
param.timestamp = parseInt((new Date()).getTime() / 1000).toString();
//排序
var string = objSortToString(param);
var md5Str = CryptoJS.MD5(string+salt).toString();
postman.setGlobalVariable("sign", md5Str);
postman.setGlobalVariable("timestamp", param.timestamp);
//排序方法
function objSortToString(obj)
{
let keys = Object.keys(obj).sort();
let arr = [];
for (let i in keys) {
arr.push(keys[i]+"="+obj[keys[i]]);
}
return arr.join("&");
}
然后在参数中添加签名字段和时间戳字段,注意,如果修改了签名的默认名 sign,那么请求参数是也要同时修改。