mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-17 16:36:03 +08:00
智慧宿舍系统小程序
This commit is contained in:
107
wechat/miniprogram/utils/request.js
Normal file
107
wechat/miniprogram/utils/request.js
Normal file
@@ -0,0 +1,107 @@
|
||||
const CryptoJs = require('crypto-js');
|
||||
const HmacSHA1 = require('crypto-js').HmacSHA1;
|
||||
const { Base64,Utf8 } = require('crypto-js').enc;
|
||||
const application = 'YoWrZ2mYoZc'; //app_key
|
||||
const appSecret = 'qGJEtGEyfj'; //app_secret
|
||||
|
||||
//获取服务器返回的时间戳
|
||||
const getTimestamp=()=>{
|
||||
return new Promise((resolve,reject)=>{
|
||||
wx.request({
|
||||
url: 'https://ag-api.ctwing.cn/echo',
|
||||
timeout: 0,
|
||||
success: (result) => {
|
||||
resolve(result.header['x-ag-timestamp'])
|
||||
},
|
||||
fail: (err)=>{
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
};
|
||||
//计算时间偏移量offset
|
||||
const getOffset = async ()=>{
|
||||
const start = (new Date()).valueOf(); //获取当前系统时间戳
|
||||
const time = await getTimestamp();
|
||||
const end = (new Date()).valueOf();
|
||||
const offset = Math.round(time - (start + end)/2);
|
||||
return offset;
|
||||
};
|
||||
|
||||
//对象按名称ASCII码排序
|
||||
function sort_ASCII(obj){
|
||||
var arr = new Array();
|
||||
var num = 0;
|
||||
for (var i in obj) {
|
||||
arr[num] = i;
|
||||
num++;
|
||||
}
|
||||
//sort方法让数组元素按ASCII码排序
|
||||
var sortArr = arr.sort();
|
||||
var sortObj = {};
|
||||
for (var i in sortArr) {
|
||||
sortObj[sortArr[i]] = obj[sortArr[i]];
|
||||
}
|
||||
return sortObj;
|
||||
}
|
||||
|
||||
//将公共参数封装到请求中
|
||||
//url 请求地址 + 路径
|
||||
//method 请求方式
|
||||
//version API版本号
|
||||
//data 对象格式 非公共请求参数,如果不是必选参数,可以给其赋予空值,例如 { "pageSize":"" }
|
||||
//body 请求体参数
|
||||
export const request = async (url,method,version,data,body)=>{
|
||||
data = (sort_ASCII(data)) || null;
|
||||
const offset = await getOffset();
|
||||
const timestamp = (new Date()).valueOf() + offset;
|
||||
let params = data;
|
||||
let Data = {
|
||||
'application':application,
|
||||
'timestamp':timestamp,
|
||||
...data
|
||||
};
|
||||
//生成要签名的字符串
|
||||
let dataStr = JSON.stringify(Data).replace(/[\"|\{]/g,'').replace(/[\,|\}]/g,'\n');
|
||||
if(body && body!== {}){
|
||||
dataStr += (JSON.stringify(body).concat('\n'));
|
||||
params = body;
|
||||
if (data && Object.keys(data).length>1) {
|
||||
let query = '';
|
||||
for(let k in data){
|
||||
if (k === 'MasterKey') {
|
||||
continue;
|
||||
}
|
||||
query += `${ k }=${ data[k] }&`;
|
||||
}
|
||||
url = `${ url }?${ query }`
|
||||
}
|
||||
}
|
||||
|
||||
//生成签名
|
||||
const signature = Base64.stringify(HmacSHA1(dataStr.toString(Utf8),appSecret));
|
||||
let header = {
|
||||
'application':application,
|
||||
'signature':signature,
|
||||
'timestamp':timestamp,
|
||||
'version':version
|
||||
};
|
||||
if (data.MasterKey) {
|
||||
header.MasterKey = data.MasterKey;
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
wx.request({
|
||||
url: `https://${ url }`,
|
||||
method:method,
|
||||
data: params,
|
||||
//公共参数封装到请求头
|
||||
header:header,
|
||||
success: (result) => {
|
||||
resolve(result);
|
||||
},
|
||||
fail: (res) => {
|
||||
reject(res);
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user