signUtil.js
2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import md5 from 'js-md5';
function jsonString (obj) {
if (isObject(obj)) {
return sortObjByKey(obj);
} else if (isArray(obj)) {
var sortArray = [];
for (var i = 0; i < obj.length; i++) {
if (isObject(obj[i])) {
sortArray.push(sortObjByKey(obj[i]));
} else {
return obj;
}
}
return sortArray;
} else {
return obj;
}
}
// 将通讯录按照 ABCD字母的顺序排序
function sortObjByKey (obj) {
var keys = Object.keys(obj).sort();
var newObj = {}
for (var i = 0; i < keys.length; i++) {
var index = keys[i];
newObj[index] = jsonString(obj[index]);
}
return newObj;
}
//判断是否是数组
function isArray (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
//判断是否是对象
function isObject (obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
export default {
/**
* 第一步,将data中参数,按key升序,排除null值,用&拼接,得tempSignStr
* 第二步,"time=%s&" + tempSignStr + "&token=%s"
* 第三步,md5(第二步结果)
*/
sign: function (token, data) {
if (typeof (data) == "undefined" || data == null) {
data = {};
}
var gatewayRequest = {};//currentPage pageSize orderBy data time token sign isFrom
var time = new Date().getTime();
//找出data中值非null的key,同时排除分页参数
//ignoreKeyList data中哪些key不参与签名
var dataKeyArray = [];
var excludeKeyArray = ['currentPage', 'pageSize', 'orderBy', 'ignoreKeyList'];
for (var key in data) {
if (data[key] == null) {
continue;
}
if (excludeKeyArray.indexOf(key) >= 0) {
gatewayRequest[key] = data[key];
delete data[key];
if (key === 'ignoreKeyList') {
//遍历ignoreKeyList,不参与签名校验
for (var i = 0; i < data[key].length; i++) {
delete data[data[key][i]];
}
}
continue;
}
dataKeyArray.push(key);
}
//将key按升序排列
dataKeyArray.sort();
//生成签名串"time=%s&" + tempSignStr + "&token=%s"
var tempSignStr = "time=" + time;
for (var i = 0; i < dataKeyArray.length; i++) {
var key = dataKeyArray[i];
var value = data[key];
tempSignStr += "&";
tempSignStr += key;
tempSignStr += "=";
tempSignStr += JSON.stringify(jsonString(value));
}
tempSignStr += "&token=";
tempSignStr += token;
var signStr = md5(tempSignStr);
gatewayRequest['data'] = data;
gatewayRequest['time'] = time;
gatewayRequest['token'] = token;
gatewayRequest['sign'] = signStr;
gatewayRequest['isFrom'] = "PC";
return gatewayRequest;
}
}
/**
* 密码加盐后MD5
* @param {HTMLElement} elm
*
*/
export function transPsw (val) {
return md5(val + 'gaea')
}