SignUtils.ts
2.62 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
import { Md5 } from "../lib/md5";
import { GAMEDATA } from "../base/SDKConst";
import SDKUtils from "./SDKUtils";
export default class SignUtils {
private static instance: any;
static get I(): SignUtils {
return this.instance || (this.instance = new SignUtils());
}
createSign(params: any) {
let signStr = this.createQuery(params) + '' + GAMEDATA.appkey;
//console.error("signStr",signStr)
return Md5.hashStr(signStr);
}
private ksort(inputArr: any) {
let tmp_arr = {},
keys: any[] = [],
sorter, i, k: any,
strictForIn = false,
populateArr = {};
sorter = function (a, b) {
let aFloat = parseFloat(a),
bFloat = parseFloat(b),
aNumeric = aFloat + '' === a,
bNumeric = bFloat + '' === b;
if (aNumeric && bNumeric) {
return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
} else if (aNumeric && !bNumeric) {
return 1;
} else if (!aNumeric && bNumeric) {
return -1;
}
return a > b ? 1 : a < b ? -1 : 0;
};
// Make a list of key names
for (k in inputArr) {
if (inputArr.hasOwnProperty(k)) {
keys.push(k);
}
}
keys.sort(sorter);
// Rebuild array with sorted key names
for (i = 0; i < keys.length; i++) {
k = keys[i];
tmp_arr[k] = inputArr[k];
if (strictForIn) {
delete inputArr[k];
}
}
for (i in tmp_arr) {
if (tmp_arr.hasOwnProperty(i)) {
populateArr[i] = tmp_arr[i];
}
}
return strictForIn || populateArr;
}
private createQuery(params) {
params = params || {};
// 1、ksort排序参数对象
let keys = Object.keys(this.ksort(params));
// 2、拼贴字符串
let key = '';
let query = '';
for (let i = 0, len = keys.length; i < len; i++) {
// 为空,为 0的参数不参与签名,参数名为ver,pkv的参数不参与签名, 字符集为 utf-8
if (params[keys[i]] === '' || params[keys[i]] === '0' || params[keys[i]] === 0 || keys[i] === 'ver'|| keys[i] === 'pkv') continue
key = keys[i];
i && (query += '');
if(SDKUtils.isArray(params[key])){
query += `${key}=${JSON.stringify(params[key])}`;
}else{
query += `${key}=${params[key]}`;
}
}
return query;
}
}