Files
bigscreen/智慧社区/社区/js/http.js
zhangxiaohui 95cee2cd2d update
2021-04-14 13:57:08 +08:00

89 lines
2.0 KiB
JavaScript

(function(root) {
const APPKEY = 27182819;
const APPSECRET = "5920d4f5d0c04b23a1059d58a9410461"; //app密码, 有可能更改,所以设为全局
/**
* 创建api签名和时间戳
*
* @param {Number} appKey app key
* @param {String} appSecret app密码
* @param {Number} apiId api ID 每个请求的id不一样
* @param {Object} body body值固定
* @param {Object} head 默认值空对象
* @param {Object} query 默认值空对象
*/
let __body = { ds: 1 };
function createSig({
appKey = APPKEY,
appSecret = APPSECRET,
apiId,
body = __body,
head = {},
query = {}
}) {
let time = new Date().getTime();
const baseArr = [
["X-Auth-ActionId", apiId],
["X-Auth-Key", appKey],
["X-Auth-Timestamp", time]
];
let params = [
...baseArr,
...Object.entries(body),
...Object.entries(head),
...Object.entries(query)
]
.sort()
.map(([key, value]) => {
return `${key}=${value}`;
})
.concat(appSecret)
.join("&");
params = CryptoJS.MD5(params);
return {
sig: params,
time
};
}
/**
* 封装ajax请求
*
* @param {String} type 请求类型 默认都是post
* @param {String} url 请求url 必须
* @param {Object} data 请求参数 默认都是一样的
* @param {Function} callback 请求成功回调 必须
* @param {Number} apiId 请求id 必须
*/
function http({
type = "POST",
url,
data = JSON.stringify({
inFields: {
ds: "1"
}
}),
callback,
apiId
}) {
//生成签名和时间戳
let sig = createSig({
apiId
});
$.ajax({
type,
url,
data,
contentType: "application/json;charset=utf-8",
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Auth-Key", APPKEY);
xhr.setRequestHeader("X-Auth-ActionId", apiId);
xhr.setRequestHeader("X-Auth-Signature", sig.sig);
xhr.setRequestHeader("X-Auth-Timestamp", sig.time);
},
dataType: "json",
success: callback,
error: function() {}
});
}
root.__http = typeof window ? http : f => f;
}(window));