request.js 7.17 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 {APP_VERSION, CLIENT_TYPE, PRIVATE_KEY} from '../libs/config';
let crypto =  require('./cryptojs/cryptojs.js').Crypto
let p1SecretKey = "yoho9646yoho9646"
let ClientInitConfigMehtod = "resources.simple.pice"
let ClientConfigHasRequested = 0

function request(method = 'GET') {
    return function(url, params = {}) {
        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 = APP_VERSION;
    let os_version = '';
    let client_type = CLIENT_TYPE;
    let screen_size = '';
    let privateKey = PRIVATE_KEY;
    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
    }

    // app_version = '5.6.0';
    // os_version = '10.3';
    // screen_size = '320x568';
    // let uid = '0';
    // let udid = 'acea1c6170ecca417c67979a406156950bcf4fe5';
    // let physical_channel = 1;


    return {
        app_version,
        os_version,
        client_type,
        screen_size,
        // physical_channel,
        // udid,
        v,
        // uid,
    };
}

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

function _signParam(params,opt) {
    let private_key = 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 = 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')