request.js 9.13 KB
import Promise from '../vendors/es6-promise';
import objectAssign from '../vendors/object-assign';
import trimObject from '../utils/trimObject';
import queryString from '../vendors/query-string';
import md5 from '../vendors/md5';
import config from './/config';
let crypto =  require('./cryptojs/cryptojs.js').Crypto
let p1SecretKey = "yoho9646yoho9646"
let ClientInitConfigMehtod = "resources.simple.pice"
let ClientConfigHasRequested = 0

function getPrivateKey(){
    return new Promise(function(resolve,reject){
        let app = getApp()
        let p2SecretKey = app && app.globalData && app.globalData.p2SecretKey;
        if (!p2SecretKey){
            p2SecretKey = wx.getStorageSync("p2SecretKey")
        }

        if (p2SecretKey){
            resolve(p2SecretKey)
        }else{

            let data = {
                "udid": app.globalData.udid,
                "method": 'resources.simple.pice'
            }
            let method = "GET"
            let header = {
                'Content-Type': 'application/x-www-form-urlencoded'
            }

            wx.request({
                url: config.constants.API_HOST,
                data,
                method,
                header: header,
                success: function (res) {
                    // console.log("res:", res)
                    if (res && res.data && res.data.data && res.data.data.sk) {
                        app.globalData.p2SecretKey = res.data.data.sk;
                        wx.setStorage({
                            key: "p2SecretKey",
                            data: res.data.data.sk
                        });

                        resolve(app.globalData.p2SecretKey)
                    }
                },
                fail: function (err) {
                    reject(err)
                    // console.log("err:",err)
                }
            });

        }
    })
}

function request(method = 'GET') {
    return function(url, params = {}) {
        return getPrivateKey()
            .then(key => {
                return new Promise(function(resolve, reject) {
                    let app = getApp();
                    if (params && !params.hasOwnProperty('uid')) {
                        let uid = app && app.globalData && app.globalData.userInfo && app.globalData.userInfo.uid ? app.globalData.userInfo.uid : 0;
                        params.uid = uid;
                    }
                    let sessionkey = app && app.globalData && app.globalData.sessionkey ? app.globalData.sessionkey : '';
                    params.session_key = sessionkey;
                    params.source_type="wechat";
                    params.client_type = "miniapp";
                    params.business_line= "miniapp";
                    params.user_source ="wechat"
        
                    if (params && !params.hasOwnProperty('udid')) {
                      let udid = app && app.globalData && app.globalData.udid ? app.globalData.udid : "";
                      if(udid.length==0){
                        udid=wx.getStorageSync('udid');
                      }
                      params.udid = udid;
                    }
        
                    let body = _createBody(params);
                    let queryStrigPair = _signParam(body,true);
                    let data = '';
        
                    if (method === 'GET' || method === 'HEAD' || method === 'DELETE') {
                        url = url + '?' + queryStrigPair;
                    }
        
                    if (method !== 'GET' && method !== 'HEAD') {
                        data = queryStrigPair;
                    }
        
                    //加签
                    let resultString = "";
                    if((params.hasOwnProperty("method") && params["method"] ===ClientInitConfigMehtod)){
                    }else{
                      let p2SecretKey = app && app.globalData && app.globalData.p2SecretKey ? app.globalData.p2SecretKey : '';
                      if (p2SecretKey == ''){
                        p2SecretKey = wx.getStorageSync("p2SecretKey")
                      }
                      // console.log("p2SecretKey:", p2SecretKey)
                      resultString = crypto.HMAC(crypto.SHA256,_signParam(body,false),p2SecretKey,"")
                    }
                    let header = {
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'x-yoho-verify' : resultString,
                        'Cookies': 'JSESSIONID=' + sessionkey,            }
        
                    wx.request({
                        url,
                        data,
                        method,
                        header: header,
                        success: function(res) {
                            let statusCode = res.statusCode,
                                errMsg = res.errMsg,
                                data = res.data;
                                
                            if (statusCode == 200) {
                                if (data.code === 508 && ClientConfigHasRequested===0){
                                    let app = getApp();
                                    app.getSimplePise()
                                    ClientConfigHasRequested =1
                                }
                                resolve(data);
                            } else {
                                let code = statusCode;
                                let message = res.errMsg ? res.errMsg : '';
                                reject({code, message});
                            }
                        },
                        fail: function(err) {
                            let code = err.code ? err.code : 800;
                            let message = err.message ? err.message : '';
                            reject({code, message});
                        }
                    });
                })
            });
    }
}

function uploadLogData(method = 'POST') {
  return function (url, params = {}) {
    return new Promise(function (resolve, reject) {
      let app = getApp();
      let data = { '_mlogs': JSON.stringify(params) }
      let sid = app && app.globalData && app.globalData.sid ? app.globalData.sid : '';
      let header = {
        'content-type': "application/x-www-form-urlencoded",
        'x-yoho-sid': md5(sid),
      }
      wx.request({
        url,
        data,
        method,
        header,
      });
    })
  }
}

function appReport(method = 'POST') {
  return function (url, params = {}) {
    return new Promise(function (resolve, reject) {
      let app = getApp();
      let data = JSON.stringify(params)
      let sid = app && app.globalData && app.globalData.sid ? app.globalData.sid : '';
      let header = {
        'content-type': "application/json",
        'x-yoho-sid': md5(sid),
      }
      wx.request({
        url,
        data,
        method,
        header,
      });
    })
  }
}

function _publicParams() {
    let app_version = config.constants.APP_VERSION;
    let os_version = '';
    let client_type = config.constants.CLIENT_TYPE;
    let screen_size = '';
    let privateKey = config.constants.PRIVATE_KEY;
    let union_type = config.unionType;
    let v = '7';

    try {
        let res = wx.getSystemInfoSync();
        screen_size = res.windowWidth + 'x' + res.windowHeight;
        os_version = res.version;
    } catch (e) {
        // Do something when catch error
    }

    return {
        app_version,
        os_version,
        client_type,
        screen_size,
        union_type,
        v
    };
}

function _createBody(body) {
    let defaultBody = _publicParams();
    let newBody = objectAssign(defaultBody, body);
    return newBody;
}

function _signParam(params,opt) {
    let private_key = config.constants.PRIVATE_KEY;
    let allParams = objectAssign(params, {private_key});

    allParams = trimObject(allParams);	// 去除首尾空格
    let paramsPair = queryString.stringify(allParams, {encode: false});
    let client_secret = md5(paramsPair);

    delete allParams.private_key;

    let resultParams = objectAssign(allParams, {client_secret});
    let resultString;
    if (opt === true){
        resultString = queryString.stringify(resultParams,{encode: true});
    }else{
        resultString = queryString.stringify(resultParams,{encode: false});
    }
    return resultString;
}

function _signParam(params,opt) {
    let private_key = config.constants.PRIVATE_KEY;
    let allParams = objectAssign(params, {private_key});

    allParams = trimObject(allParams);	// 去除首尾空格
    let paramsPair = queryString.stringify(allParams, {encode: false});
    let client_secret = md5(paramsPair);

    delete allParams.private_key;

    let resultParams = objectAssign(allParams, {client_secret});
    let resultString;
    if (opt === true){
        resultString = queryString.stringify(resultParams,{encode: true});
    }else{
        resultString = queryString.stringify(resultParams,{encode: false});
    }
    return resultString;
}

export const GET = request('GET');
export const POST = request('POST');
export const PUT = request('PUT');
export const DELETE = request('DELETE');
export const UPLOAD_LOG = uploadLogData('POST')
export const APP_REPORT = appReport('POST')