UNPKG

tplus-api

Version:

tplus api invoke

330 lines (302 loc) 13.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _assign = require('babel-runtime/core-js/object/assign'); var _assign2 = _interopRequireDefault(_assign); var _User = require('../model/User'); var _User2 = _interopRequireDefault(_User); var _ServerLog = require('../log/ServerLog'); var _ServerLog2 = _interopRequireDefault(_ServerLog); var _LogEventIds = require('../log/LogEventIds'); var _UIConfirm = require('../components/UIConfirm'); var _UIConfirm2 = _interopRequireDefault(_UIConfirm); var _bizError = require('../bizError'); var _bizError2 = _interopRequireDefault(_bizError); var _findIndex2 = require('lodash/findIndex'); var _findIndex3 = _interopRequireDefault(_findIndex2); var _mutantsMicrofx = require('mutants-microfx'); var _app = require('../const/app'); var _antdMobile = require('antd-mobile'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var __assign = undefined && undefined.__assign || function () { __assign = _assign2.default || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } } return t; }; return __assign.apply(this, arguments); }; var QS = require('qs'); // import {env} from 'mutants-microfx'; // const {constant,platform,browser,os} = env; var config = { proxy: { 'throughProxy': false, 'error': { "10101": "连接服务器超时", "10107": "T+服务器网络不给力,请确认T+云应用下云应用设置-服务器网络连接是否成功", "10104": "企业id不存在", "10106": "用户信息认证失败", "10108": "用户信息认证失败", "10109": "服务器内部错误", "T10108": "用户信息认证失败" } }, cia: { 'error': { '20109': '账号或密码错误', '20129': '账号或密码错误', '10002': '账号或密码错误', '20024': '密码输入错误次数超过10次,账号被锁定,请十五分钟之后再试!', '10001': '格式错误', '10004': '非空参数错误', '10005': 'JSON格式错误', '10006': 'appKey错误', '10007': 'appSecret错误', '20001': '注册来源不存在', '20119': '账号或密码错误', '20122': '用户昵称被占用', '20123': '用户不在组织内', '20203': '组织的账号被占用', '20204': '企业id不存在', '20231': '企业全称已存在', '20305': 'appKey没有访问权限', '20306': '应用不存在', '25015': '未授权的 客户端', '50000': '服务器内部异常', '20911': '友空间服务出现异常,正在紧急修复中,请稍后重试。' } }, axios_error: { error_signs: ['timeout of '], error_tips: ['请求超时,请稍候再试!'] }, skip_error: ['chanjet.Authorization.Logout'], login_method: ['chanjet.EAP.GZQ.CSP.GetTPlusToken', 'chanjet.MB.MBPortal.GetPortalByAppid'] }; var errorShow = function errorShow(message, callback) { _UIConfirm2.default.show(message, function () { callback && callback(); }); }; var reloginErrorCodes = ['EXSM0001', 'EXSM0002', 'EXSM0003', 'EXSM0004', 'EXSM0005']; // const authReloginErrorCodes = ['EXERROR0001'];//没有权限 // else if(authReloginErrorCodes.some(reloginErrorCode=>{return reloginErrorCode===tplusErrorCode})){ // errorShow(error.Message,()=>{ // User.logout(); // }); // } var tplus999Handler = function tplus999Handler(axios, err) { // 处理T+返回的异常 var response = err.response; if (response.status === 999) { var error = response.data.Error; var tplusErrorCode_1 = error.Code; //上传阿里云日志 登录异常不记录 var _a = err.config, requestData = _a.data, baseURL = _a.baseURL; var data = QS.parse(requestData); var apis_1 = JSON.parse(data.Apis); var methodName_1 = apis_1.Method; if (reloginErrorCodes.some(function (reloginErrorCode) { return reloginErrorCode === tplusErrorCode_1; })) { errorShow('登录信息异常,请保存当前操作数据后,重新进入应用!', function () { _User2.default.logout(null, false); }); } else if ('Login1040' === tplusErrorCode_1) { errorShow('可用量正在整理,不能登录,请稍后再试!', function () { _User2.default.logout(); }); } else if ('EXSV0011' === tplusErrorCode_1) { //提供的服务名称不正确 将异常抛给前端的业务捕获 console.error('error.Message======', error.Message); } else if (_bizError2.default.indexOf(tplusErrorCode_1) > -1) { //业务异常不做处理 } else if ((0, _findIndex3.default)(config.login_method, function (method) { return method === methodName_1; }) > -1) { var errorMsg = error && !!error.Message ? error.Message : '登录信息异常,请保存当前操作数据后,重新进入应用!'; var eventId = _LogEventIds.TPLUS_LOGIN_ERROR; var logParam = { baseURL: baseURL, eventId: eventId, bodyData: (0, _stringify2.default)(data), errorMsg: errorMsg }; (0, _ServerLog2.default)(_mutantsMicrofx.stores.logStore.logParam.logStore, logParam); errorShow(errorMsg, function () { if (apis_1.Args && apis_1.Args.NoLogout) { return; } _User2.default.logout(null, false); }); } else { if (_mutantsMicrofx.stores.logStore.isUpload(baseURL)) { var bodyData = (0, _stringify2.default)(data); if (bodyData.length > 4096) { if (data.Apis) { bodyData = (0, _stringify2.default)({ Method: methodName_1, Body: bodyData.substr(0, 4096) }); } } var eventId = _LogEventIds.TPLUS_HTTP_999; var logParam = __assign({ baseURL: baseURL, eventId: eventId, bodyData: bodyData }, error); (0, _ServerLog2.default)(_mutantsMicrofx.stores.logStore.logParam.logStore, logParam); } errorShow(error.Message); } } else { _antdMobile.Toast.info('当前网络不可用,请检查网络设置', 1); } }; var ciaErrorHandler = function ciaErrorHandler(axios, res) { var errorMsg = config.cia.error[res.errorCode]; if (errorMsg) { errorShow('CIA\u63A5\u53E3\u8C03\u7528\u5F02\u5E38:' + errorMsg + ",ErrorCode:" + res.errorCode); } else { var errorMsg_1 = (typeof res === 'undefined' ? 'undefined' : (0, _typeof3.default)(res)) == 'object' ? (0, _stringify2.default)(res) : res; errorShow('CIA\u63A5\u53E3\u8C03\u7528\u5F02\u5E38:\u8FD4\u56DE\u7ED3\u679C' + errorMsg_1 + ",ErrorCode:" + res.errorCode); } }; var cloudProxyHandler = function cloudProxyHandler(axios, res) { var errorMsg = config.proxy.error[res.code]; var targetURL = window.localStorage.targetURL; var eventId = _LogEventIds.TPLUS_LOGIN_ERROR; var logParam = { targetURL: targetURL, eventId: eventId, bodyData: (0, _stringify2.default)(res), errorMsg: errorMsg }; (0, _ServerLog2.default)(_mutantsMicrofx.stores.logStore.logParam.logStore, logParam); if (exitApp(res.code)) { return; } if (errorMsg) { errorShow(errorMsg); } else { errorShow('云代理接口调用异常:返回结果' + res); } }; var exitApp = function exitApp(code, error) { var msg = config.proxy.error[code]; if (msg) { if (error) { msg = error; } errorShow(msg, function () { //User.logout(); }); return true; } return false; }; var middleware = function middleware(axios) { axios.interceptors.response.use(function logResponse(res) { var isSkipService = config.skip_error.some(function (item) { return res.request.responseURL.indexOf(item) > -1; }); if (isSkipService) { return res; } // console.log('%c Request Success:', 'color: #4CAF50; font-weight: bold', res); //setLoading(false); //处理CIA返回的异常 状态码是200 if (res.data) { if (res.data.hasOwnProperty("errorCode")) { ciaErrorHandler(axios, res.data); return _promise2.default.reject(res.data); } //处理云代理返回的异常 if (res.data.hasOwnProperty("code") && res.config.baseURL.indexOf('cloudproxy01.chanapp.chanjet.com') > -1) { cloudProxyHandler(axios, res.data); return _promise2.default.reject(res.data); } } return res; }, function logPromiseError(err) { // const isSkipService = config.skip_error.some((item)=>{ // return res.request.responseURL.indexOf(item) > -1; // }); // if(isSkipService){ // return res; // } // console.log('%c Request Error:', 'color: #EC6060; font-weight: bold', err); //处理T+返回的异常 if (err && err.response && err.response.status === 999) { if (err.response.data && err.response.data.Error && err.response.data.Error.Code) { if (exitApp(err.response.data.Error.Code, err.response.data.Error.Message)) { return; } } tplus999Handler(axios, err); return _promise2.default.reject(err.response.data.Error); } if (/Network Error/.test(err.toString())) { var baseURL_1 = err.config.baseURL; var cancelErrorTips = _app.noErrorTips.some(function (noErrorTip) { return baseURL_1.indexOf(noErrorTip) > -1; }); if (!cancelErrorTips) { _antdMobile.Toast.info('网络繁忙,请稍后下拉刷新操作', 1); } } else { var errorMsg_2 = err.message; var _a = err.config, requestData = _a.data, baseURL_2 = _a.baseURL; //当请求参数为空时 也要上传相关日志 帮助分析是哪个接口调用异常 var bodyData = ''; if (_mutantsMicrofx.stores.logStore.isUpload(baseURL_2)) { if (!!requestData) { bodyData = (0, _stringify2.default)(QS.parse(requestData)); } var eventId = _LogEventIds.AXIOS_HTTP_ERROR; var logParam = { baseURL: baseURL_2, eventId: eventId, bodyData: bodyData, errorMsg: errorMsg_2 }; (0, _ServerLog2.default)(_mutantsMicrofx.stores.logStore.logParam.logStore, logParam); } //增加对getTplusToken接口的特殊处理,如果出现访问异常,提示用户进行检测 try { if (!!requestData) { var data = QS.parse(requestData); var methodName_2 = JSON.parse(data.Apis).Method; if ((0, _findIndex3.default)(config.login_method, function (method) { return method === methodName_2; }) > -1) { errorShow(config.proxy.error['10107'], function () { //User.logout(); }); return; } } } catch (err) { console.error('response-interceptor.logPromiseError=====', err); } //将请求框架的提示语转化成中文,方面客户理解 var needReTip = (0, _findIndex3.default)(config.axios_error.error_signs, function (sign) { return !!errorMsg_2 && errorMsg_2.indexOf(sign) > -1; }); //是否需要弹出提示框 某些地方不需要提示出来 比如上传阿里云的错误 var cancelErrorTips = _app.noErrorTips.some(function (noErrorTip) { return baseURL_2.indexOf(noErrorTip) > -1; }); if (!cancelErrorTips) { //解决部分外围接口报错 没有带请求参数 不影响到主体业务使用 就不显示错误提示框了 暂时先用requestData判断下 //主要针对pos 偶发性弹出接口超时的提示 临时的解决方案 后续待改进 if (!!requestData) { if (needReTip > -1) { errorShow(config.axios_error.error_tips[needReTip]); } else { errorShow(errorMsg_2); } } } return _promise2.default.reject(err); } }); }; exports.default = middleware; //# sourceMappingURL=response-interceptor.js.map //# sourceMappingURL=response-interceptor.js.map