Merge branch 'develop' into feature/m-product
Showing
2 changed files
with
97 additions
and
3 deletions
1 | /** | 1 | /** |
2 | * 接口公共方法 | 2 | * 接口公共方法 |
3 | - * @author: xuqiMqi.xu@yoho.cn> | 3 | + * @author: xuqi<qi.xu@yoho.cn> |
4 | * @date: 2016/4/25 | 4 | * @date: 2016/4/25 |
5 | */ | 5 | */ |
6 | 6 | ||
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | const rp = require('request-promise'); | 9 | const rp = require('request-promise'); |
10 | const _ = require('lodash'); | 10 | const _ = require('lodash'); |
11 | 11 | ||
12 | -const ApiUrl = 'http://api.yoho.yohoops.org/'; | 12 | +const ApiUrl = 'http://testapi.yoho.cn:28078/'; |
13 | 13 | ||
14 | class API { | 14 | class API { |
15 | 15 | ||
@@ -18,7 +18,7 @@ class API { | @@ -18,7 +18,7 @@ class API { | ||
18 | * @param url String | 18 | * @param url String |
19 | * @param data Obejct | 19 | * @param data Obejct |
20 | */ | 20 | */ |
21 | - get(url, data) { | 21 | + get(url, data) {console.log(`${ApiUrl}${url}`);console.log(data); |
22 | return rp({ | 22 | return rp({ |
23 | url: `${ApiUrl}${url}`, | 23 | url: `${ApiUrl}${url}`, |
24 | qs: data | 24 | qs: data |
library/sign.js
0 → 100644
1 | +/** | ||
2 | + * 签名 | ||
3 | + * @author: bikai | ||
4 | + * @date: 2016/5/6 | ||
5 | + */ | ||
6 | + | ||
7 | +'use strict'; | ||
8 | + | ||
9 | +const _ = require('lodash'); | ||
10 | +const md5 = require('md5'); | ||
11 | + | ||
12 | +const privateKey = { | ||
13 | + android: 'fd4ad5fcfa0de589ef238c0e7331b585', | ||
14 | + iphone: 'a85bb0674e08986c6b115d5e3a4884fa', | ||
15 | + ipad: 'ad9fcda2e679cf9229e37feae2cdcf80', | ||
16 | + web: '0ed29744ed318fd28d2c07985d3ba633', | ||
17 | + yoho: 'fd4ad5fcsa0de589af23234ks1923ks', | ||
18 | + h5: 'fd4ad5fcfa0de589ef238c0e7331b585' | ||
19 | +}; | ||
20 | + | ||
21 | +/** | ||
22 | + * 排序参数 | ||
23 | + * @param {Object} argument 需要排序的参数对象 | ||
24 | + * @return {Object} 排序之后的参数对象 | ||
25 | + */ | ||
26 | +const packageSort = argument => { | ||
27 | + var newObj = {}; | ||
28 | + | ||
29 | + for (let k of Object.keys(argument).sort()) { | ||
30 | + newObj[k] = argument[k]; | ||
31 | + } | ||
32 | + | ||
33 | + return newObj; | ||
34 | +} | ||
35 | + | ||
36 | +/** | ||
37 | + * 生成签名 | ||
38 | + * @param {Object} argument 需要签名的数据 | ||
39 | + * @return {string} 生成的签名字符串 | ||
40 | + */ | ||
41 | +const makeSign = argument => { | ||
42 | + var qs = []; | ||
43 | + | ||
44 | + _.forEach(argument, function(value, key) { | ||
45 | + qs.push(key + '=' + _.trim(value)); | ||
46 | + }); | ||
47 | + | ||
48 | + return md5(qs.join('&')).toLowerCase(); | ||
49 | +} | ||
50 | + | ||
51 | +// 生成API签名,调用后端接口的时候有私钥校验 | ||
52 | +exports.apiSign = (params) => { | ||
53 | + | ||
54 | + /* eslint-disable */ | ||
55 | + var sign = packageSort(Object.assign({ | ||
56 | + client_type: 'h5', | ||
57 | + private_key: privateKey.h5, | ||
58 | + app_version: '3.8.2', | ||
59 | + os_version: 'yohobuy:h5', | ||
60 | + screen_size: '720x1280', | ||
61 | + v: '7' | ||
62 | + }, params)); | ||
63 | + | ||
64 | + /* eslint-enable */ | ||
65 | + | ||
66 | + return Object.assign(sign, { | ||
67 | + | ||
68 | + client_secret: makeSign(sign) // eslint-disable-line camelcase | ||
69 | + }); | ||
70 | +}; | ||
71 | + | ||
72 | +// 检查签名,APP 访问 H5 页面的时候需要检查 | ||
73 | +exports.checkSign = (params) => { | ||
74 | + var clientSecret = params.client_secret, // eslint-disable-line camelcase | ||
75 | + sortedParams; | ||
76 | + | ||
77 | + // 忽略部分参数 | ||
78 | + delete params.client_secret; | ||
79 | + delete params.q; | ||
80 | + delete params.debug_data; | ||
81 | + delete params['/api']; | ||
82 | + | ||
83 | + params.private_key = privateKey[params.client_type]; // eslint-disable-line camelcase | ||
84 | + sortedParams = packageSort(params); | ||
85 | + | ||
86 | + return clientSecret === makeSign(sortedParams); | ||
87 | +}; | ||
88 | + | ||
89 | +// 检查签名,APP 访问 H5 页面的时候需要检查, 有可能不同于上边的签名方式 | ||
90 | +exports.webSign = (params) => { | ||
91 | + var webPrivateKey = 'yohobuyapp'; | ||
92 | + | ||
93 | + return params.key === md5(md5(webPrivateKey) + params.uid); | ||
94 | +}; |
-
Please register or login to post a comment