var config = require("config.js"); //统一的网络请求方法 function request(params, isGetTonken) { // 全局变量 var globalData = getApp().globalData; // 如果正在进行登陆,就将非登陆请求放在队列中等待登陆完毕后进行调用 if (!isGetTonken && globalData.isLanding) { globalData.requestQueue.push(params); console.log('ceshi'); return; } wx.request({ url: config.domain + params.url, //接口请求地址 data: params.data, timeout:10000, header: { // 'content-type': params.method == "GET" ? 'application/x-www-form-urlencoded' : 'application/json;charset=utf-8', 'Authorization': params.login ? undefined : wx.getStorageSync('token') || wx.getStorageSync('tempToken') }, method: params.method == undefined ? "POST" : params.method, dataType: 'json', responseType: params.responseType == undefined ? 'text' : params.responseType, success: function (res) { console.log(`接口地址${config.domain + params.url}:成功返回`,res); if (res.statusCode == 200) { //如果有定义了params.callBack,则调用 params.callBack(res.data) if (params.callBack) { params.callBack(res.data); } } else if (res.statusCode == 500) { wx.hideLoading() setTimeout(() => { wx.showToast({ title: res.data || res.data.message, icon: "none" }) }, 1) } else if (res.statusCode == 401) { if (!params.dontTrunLogin) { if (!wx.getStorageSync('token')) { // 添加到请求队列 globalData.requestQueue.push(params); // 是否正在登陆 if (!globalData.isLanding) { globalData.isLanding = true //重新获取token,再次请求接口 getToken(); } } else { wx.removeStorageSync('token') wx.removeStorageSync('loginResult') wx.hideLoading(); wx.showModal({ title: '提示', content: '登录已过期,请重新登录~', showCancel: false, success: modalRes => { if (modalRes.confirm) { wx.redirectTo({ url: '/pages/login/login', }) } } }) } } } else if (res.statusCode == 400 && params.errCallBack) { if (params.errCallBack) { params.errCallBack(res); } if (!globalData.isLanding) { wx.hideLoading(); } } else if (res.statusCode == 400 && !params.errCallBack) { wx.hideLoading() setTimeout(() => { wx.showToast({ title: res.data, icon: "none" }) }, 1) } else { //如果有定义了params.errCallBack,则调用 params.errCallBack(res.data) if (params.errCallBack) { params.errCallBack(res); } if (!globalData.isLanding) { wx.hideLoading(); } } }, fail: function (err) { console.warn(`接口地址${config.domain + params.url}:报错返回`,res); wx.hideLoading(); setTimeout(() => { wx.showToast({ title: err.message || "服务器出了点小差", icon: "none" }); }, 1) }, complete: function (res) { console.log(`接口地址${config.domain + params.url}:完成`,res,params.data); } }) } //上传文件统一接口 function upload(params) { wx.uploadFile({ url: config.domain + params.url, filePath: params.filePath, name: params.name, header: { 'Content-Type': 'multipart/form-data', 'Authorization': params.login ? undefined : wx.getStorageSync('token') }, dataType: 'json', responseType: params.responseType == undefined ? 'json' : params.responseType, success: function (res) { console.log(res); //console.log(res); if (res.statusCode == 200) { //如果有定义了params.callBack,则调用 params.callBack(res.data) if (params.callBack) { params.callBack(res.data); } } else { wx.showToast({ title: res.message || "服务器出了点小差", icon: "none" }); } }, fail: function (err) { wx.hideLoading(); } }) } //通过code获取token,并保存到缓存 var getToken = function (fn) { wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId console.log(res); request({ login: true, url: '/appLogin', data: { principal: res.code, appType: 1 }, callBack: result => { loginSuccess(result, fn) } }, true) } }) } function loginSuccess(result, fn) { // 保存登陆信息 wx.setStorageSync('loginResult', result) // 没有获取到用户昵称,说明服务器没有保存用户的昵称,也就是用户授权的信息并没有传到服务器 if (!result.pic) { updateUserInfo(); } if (!result.enabled) { wx.showModal({ showCancel: false, title: '提示', content: '您已被禁用,不能购买,请联系客服' }) wx.setStorageSync('token', ''); } else { wx.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存,请求接口数据时要用 } var globalData = getApp().globalData; globalData.isLanding = false; while (globalData.requestQueue.length) { request(globalData.requestQueue.pop()); } if (fn) { fn() } } // 更新用户头像昵称 function updateUserInfo() { wx.getUserInfo({ success: (res) => { var userInfo = JSON.parse(res.rawData) request({ url: "/p/user/setUserInfo", method: "PUT", data: { avatarUrl: userInfo.avatarUrl, nickName: userInfo.nickName } }); } }) } //获取购物车商品数量 function getCartCount() { var params = { url: "/p/shopCart/prodCount", method: "GET", dontTrunLogin: true, data: {}, callBack: function (res) { if (res > 0) { wx.setTabBarBadge({ index: 2, text: res + "", }) var app = getApp(); app.globalData.totalCartCount = res; } else { wx.removeTabBarBadge({ index: 2 }) var app = getApp(); app.globalData.totalCartCount = 0; } } }; request(params); } // 查看是否授权 function isUserAuthInfo() { // 查看是否授权 wx.getSetting({ success(res) { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称 wx.getUserInfo({ success: function (res) { console.log(res.userInfo) } }) } } }) } exports.getToken = getToken; exports.request = request; exports.getCartCount = getCartCount; exports.updateUserInfo = updateUserInfo; exports.upload = upload; exports.loginSuccess = loginSuccess;