import { requestEncode, responseDecode } from "./ProtoMap"; import { NoTokenServants } from './../API/ProtoConfig'; import { BASEURL } from "../API/Constant"; /** * 超过N天就直接重新登录吧 */ const TOKEN_TIMEOUT = 1000*60*60*24*15 //这个path需要token const PATH = 'Ohplay/Web/HttpToTcp'; //这个path不需要token const PATH1 = 'ohplay/Web/HttpToTcp'; let token = ""; /** * 保存token和uid * @param {string} Token * @param {number} uid */ function saveToken(Token, uid) { token = Token getApp().globalData.uid = uid // 缓存token uni.setStorage({ key: 'token', data: { token, time:new Date().getTime(), }, }); uni.setStorage({ key: 'uid', data: uid }) uni.$emit('user_getUid',{uid,token}) } // 登录 function login() { uni.login({ provider: 'weixin', success: function (loginRes) { console.log(`uni.login errMsg = ${loginRes.errMsg}`) if (loginRes.code) { const data = { server: 2, servant: 10005, data: { code: loginRes.code, } } request(data).then((res) => { // console.log(res) if (res.code === 0) { if (res.data.token && res.data.id) { //保存token saveToken(res.data.token,res.data.id) } else { //进入登录页面 gotoLoginPage() } return; }; uni.showToast({ title: res.msg, duration: 2000, icon: "none" }); }).catch((res) => { console.log("catch") console.log(res); }); } else { uni.showToast({ title: loginRes.errMsg, duration: 2000, icon: "none" }); } } }); // return res }; // 获取token function getToken() { try { const value = uni.getStorageSync('token'); const uid = uni.getStorageInfoSync('uid'); if (value && uid) { const nowTime = new Date().getTime(); //token超时则重新登录 if(nowTime - value.time > TOKEN_TIMEOUT){ //清除token和uid cleanUserInfo(); login() }else{ token = value; getApp().globalData.uid = uid } } else { login(); } } catch (e) { login(); } } function cleanUserInfo(){ try{ uni.removeStorageSync('token') uni.removeStorageSync('uid') getApp().globalData.uid = null token = '' }catch(e){ } } function gotoLoginPage(){ uni.navigateTo({ url: '../../pages/login/login', complete(res){ console.log(res); } }) } // 获取token //getToken(); // login(); const defaultHeader = { "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/x-protobuf", } // 拦截器 uni.addInterceptor('request', { invoke(args) { // request 触发前拼接 url //args.url = BASEURL; if (token) { args.header.token = token; }; }, success(args) { // 请求成功后 }, fail(err) { console.log('interceptor-fail', err) }, complete(res) { console.log('interceptor-complete', res) } }) /** * POST请求 * @param {*} request * @returns */ function request(data, type = "POST", header = defaultHeader) { let url = BASEURL + PATH if (NoTokenServants.indexOf(data.servant) >= 0) { url = BASEURL + PATH1 } return new Promise((resolve, reject) => { uni.request({ url, header: header, method: type, timeout: 15000, dataType: 'protobuf', responseType: 'TEXT', data: requestEncode(data) }).then((res) => { res.map((response) => { if (response && response.statusCode === 200) { try { let resJson = JSON.parse(response.data); if (resJson.code === 0) { let arrayBuffer = Buffer.from(resJson.data, 'base64'); let data = responseDecode(arrayBuffer); let code = 0; let msg = "success"; if (typeof data.errInfo !== 'undefined') { code = data.errInfo.errorCode; if (typeof data.errInfo.errorMessage === 'string') { msg = data.errInfo.errorMessage; } else { msg = Buffer.from(data.errInfo.errorMessage).toString(); }; }; resolve({ data, code, msg }); } else { if (resJson.code === 10004) { uni.showModal({ title: '温馨提示', content: 'token已失效,请重新登录', showCancel: false, success() { //进入登录界面 gotoLoginPage() } }) } resolve({ code: resJson.code, msg: resJson.info }); } } catch (e) { resolve({ code: -1, msg: e.toString(), }); } return; }; // 没有数据或者返回错误 // resolve({ // code: 1006, // msg: "数据错误", // }); }) }).catch((error) => { let [err, res] = error; reject(err); }) }) } module.exports = { request, saveToken,getToken };