123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- 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 };
|