123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import APIClient from './APIClient';
- import userDataStorage from '../userDataStorage';
- import Utils from '../Utils';
- class AJAXHelper {
- constructor() { }
- static genMockDataUrl(name) {
- let config = require('../../res/values/api.json');
- return config.mock_url + name + '.json';
- }
- static genAPIUrl(path, method, data) {
- const cfg = require('../../res/values/api.json');
- if (method == 'GET' && data) {
- let queryStrArr = [];
- for (let key in data) {
- queryStrArr.push(`${key}=${data[key]}`);
- }
- return `${cfg.api_url}${path}?${queryStrArr.join('&')}`;
- } else {
- return `${cfg.api_url}${path}`;
- }
- }
- static whenAJAXResponse(url, method, data, httpRequest, callback) {
- if (httpRequest.readyState != 4) {
- return;
- }
- let res = JSON.parse(httpRequest.responseText);
- // Token失效,使用deviceCode刷新Token后再继续请求
- if (res.code === 31003) {
- const params = { deviceCode: localStorage.getItem('deviceCode') };
- AJAXHelper.put('/token', params, (isTrue, res) => {
- if (!isTrue) return;
- if (!res.success) return;
- userDataStorage.setData(res.data);
- AJAXHelper.request(url, method, data, callback);
- });
- } else {
- callback(httpRequest.status == 200, res);
- }
- }
- static request(path, method, data, callback) {
- //读取本地用户信息,生成本次请求所需参数
- const { token = '', uid = '', eid = '' } = userDataStorage.getData() || {};
- const forSignStr = `path=${path}&uid=${uid}&eid=${eid}&${token}`;
- const sign = CryptoJS.MD5(forSignStr).toString();
- const requestId = Utils.uuid(32, 16);
- //判断当前平台
- let platform = 'tv';
- if (!window.efunbox) {
- platform = 'web';
- }
- let url = AJAXHelper.genAPIUrl(path, method, { eid, uid, terminal: platform, ...data });
- let xmlHttpReq = new XMLHttpRequest();
- xmlHttpReq.open(method, url, true);
- //构造请求头(每个请求都带的公共参数)
- xmlHttpReq.setRequestHeader('eid', eid);
- xmlHttpReq.setRequestHeader('uid', uid);
- xmlHttpReq.setRequestHeader('sign', sign);
- xmlHttpReq.setRequestHeader('terminal', platform);
- xmlHttpReq.setRequestHeader('merchant','baby');
- xmlHttpReq.setRequestHeader('requestId', requestId);
- xmlHttpReq.setRequestHeader('Authentication', sign); //header中增加Authentication以兼容老版本
- xmlHttpReq.setRequestHeader('Content-Type', 'application/' + (method == 'POST' || method == 'PUT' ? 'json' : 'text'));
- //构造请求体
- let sendBody = null;
- if (data && (method == 'POST' || method == 'PUT')) {
- sendBody = JSON.stringify({ eid, uid, terminal: platform, ...data });
- }
- //收到响应回调处理
- xmlHttpReq.onreadystatechange = function () {
- AJAXHelper.whenAJAXResponse(path, method, data, xmlHttpReq, callback);
- };
- //发送请求
- xmlHttpReq.send(sendBody);
- }
- static get(path, params, callback) {
- AJAXHelper.request(path, 'GET', params, callback);
- }
- static delete(path, params, callback) {
- AJAXHelper.request(path, 'DELETE', params, callback);
- }
- static post(path, params, callback) {
- AJAXHelper.request(path, 'POST', params, callback);
- }
- static put(path, params, callback) {
- AJAXHelper.request(path, 'PUT', params, callback);
- }
- }
- module.exports = AJAXHelper;
|