最近在项目对接(后台java)中,发现一些常见的问题。post的header、传参几种形式的不同:
- x-www-form-urlencoded
response = await axios({
method: type,
url: url,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'signature': signature,
},
transformRequest: [function (data) {
data = qs.stringify(data)
return data
}],
data: params
})
- formData
let formData = new FormData();
for (let key in params) {
formData.append(key, params[key])
}
response = await axios({
method: type,
url: url,
headers: {
'Content-Type': 'application/json',
'signature': '',
},
data: formData
})
- json 这种相对简单
data: JSON.stringify(data) 这样即可
安利一波加密签名~
为了安全,我们在项目中采取了加密签名算法。下面封装了几种方法:
ps:具体的方法操作就不透漏啦 ^ ^
//排序的函数
// {name: 'a', age: 12} => {age:12, name: 'a}
function objKeySort(obj) {
var newkey = Object.keys(obj).sort();
//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
var newObj = {}; //创建一个新的对象,用于存放排好序的键值对
for (var i = 0; i < newkey.length; i++) { //遍历newkey数组
newObj[newkey[i]] = obj[newkey[i]]; //向新创建的对象中按照排好的顺序依次增加键值对
}
return newObj; //返回排好序的新对象
}
/**
* 分解拼接参数
* @param {String} param
* @param {*} key
*/
function parseParam(param, key) {
if (param == null) return '';
var paramStr = '';
var t = typeof (param);
if (t == 'string' || t == 'number' || t == 'boolean') {
paramStr += '&' + key + '=' + (param);
} else {
for (var i in param) {
// var k = key ? i : key + (param instanceof Array ? '[' + i + ']' : (param instanceof Object ? '.' : '') + i);
// var k = key ? i : key + i;
// paramStr += parseParam(param[i], k);
paramStr += parseParam(param[i], i);
}
}
return paramStr;
}
网友评论