7
7
*/
8
8
'use strict' ;
9
9
10
-
11
10
const crypto = require ( 'crypto' ) ;
12
11
13
12
/**
14
13
* 计算openapi签名
15
- * @param {[string] } method 请求方法 GET/POST
16
- * @param {[string] } pathname 请求路径
17
- * @param {[object] } data 请求数据
18
- * @param {[string] } appkey 应用appkey
19
- * @return {[string] } sig 签名结果
14
+ * @param {object } opt 签名数据
15
+ * @param {string } opt.method 请求方法 GET/POST
16
+ * @param {string } opt.pathname 请求路径
17
+ * @param {object } opt.data 请求数据
18
+ * @param {string } opt.appkey 应用appkey
19
+ * @return {string } sig 签名结果
20
20
*/
21
- this . signature = function ( opt ) {
21
+ this . signature = opt => {
22
22
opt = opt || { } ;
23
23
24
24
const queryArray = [ ] ;
25
25
26
26
const busidataArr = [ opt . method , encode ( opt . pathname ) ] ; // HTTP请求方式 & encode(uri) & encode(a=x&b=y&...)
27
27
28
- let i ;
29
- for ( i in opt . data ) {
30
- i !== 'sig' && queryArray . push ( i + '=' + opt . data [ i ] ) ;
28
+ for ( const i in opt . data ) {
29
+ // i !== 'sig' && queryArray.push(i + '=' + opt.data[i]); // 过滤掉undefined value的key,因为发送的时候data,会做JSON.stringify, 没有定义值的key会被过滤掉
30
+ if ( typeof opt . data [ i ] !== 'undefined' && i !== 'sig' ) {
31
+ queryArray . push ( i + '=' + opt . data [ i ] ) ;
32
+ }
31
33
}
32
34
33
- queryArray . sort ( function ( val1 , val2 ) {
35
+ queryArray . sort ( ( val1 , val2 ) => {
34
36
if ( val1 > val2 ) {
35
37
return 1 ;
36
- }
37
-
38
- if ( val1 < val2 ) {
38
+ } else if ( val1 < val2 ) {
39
39
return - 1 ;
40
40
}
41
-
42
41
return 0 ;
43
42
} ) ;
44
43
@@ -49,14 +48,14 @@ this.signature = function(opt) {
49
48
} ;
50
49
51
50
// encode
52
- function encode ( str ) {
51
+ const encode = ( str = '' ) => {
53
52
let res = encodeURIComponent ( str ) ;
54
53
55
54
// 0~9 a~z A~Z !*()
56
- res = res . replace ( / [ ^ 0 - 9 a - z A - Z \- _ . % ] / g , function ( $0 ) {
57
- // 不用考虑一位数了
58
- return '%' + $0 . charCodeAt ( 0 ) . toString ( 16 ) . toUpperCase ( ) ;
59
- } ) ;
55
+ // 不用考虑一位数了
56
+ res = res . replace ( / [ ^ 0 - 9 a - z A - Z \- _ . % ] / g , ( $0 ) =>
57
+ '%' + $0 . charCodeAt ( 0 ) . toString ( 16 ) . toUpperCase ( )
58
+ ) ;
60
59
61
60
return res ;
62
- }
61
+ } ;
0 commit comments