Authored by xuqi

Merge branch 'develop' into feature/m-product

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
  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 +};