// const app = getApp(); // const mqUtils = require('./mqttSubstribe.js'); /*********************** */ /** * 校验用户session信息是否有效 */ const checkLogin = function(userInfo) { if (userInfo) { wx.setStorageSync("userInfo", userInfo); } console.log(userInfo); return; var that = this; wx.checkSession({ success: function(res) { console.log("检测session", res); var openId = wx.getStorageSync("openId"); var userId = wx.getStorageSync("userId"); var loginKey = wx.getStorageSync("loginKey"); if (app.utils.isBlank(openId) || app.utils.isBlank(userId) || app.utils.isBlank(loginKey)) { that.login(); } else { that.checkLoginKey(userId, loginKey); } }, fail: function(res) { that.login(); } }); }; /** * 校验loginKey是否有效 * 1:调用服务器接口校验loginkey是否有效 * 1:登录有效 重置mqtt订阅topic并连接mqtt * 0:无效 重新登录 获取loginkey * */ const checkLoginKey = function(userId, loginKey) { var that = this; wx.request({ url: app.globalData.serverUrlExtend, method: "POST", header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { "type": "wxdcechecksession", "userId": userId, "loginKey": loginKey }, success: function(res) { var result = res.data; console.log(">>>>checkLoginKey :" + result); if (result.status == 0) { that.login(); } else { // // 刷新mqtt订阅topic // mqUtils.reaportConnect(); console.log("登录校验通过"); } }, fail: function(res) { console.log("校验loginKey是否有效: "); } }); }; /** * 登录 * 1:调用微信登录 * 1:调用服务器接口 获取sessionkey和登录态 放入缓存(有缓存时间) * 1:调用微信获取用户信息并调用服务器接口解密用户信息 */ const login = function() { var that = this; wx.login({ success: function(loginResult) { var code = loginResult.code; // that.getMemberSession(code); // 调用服务器接口解密数据(并根据unionId获取/创建user) wx.request({ url: app.globalData.serverUrlExtend, method: "POST", header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { "type": "wxdcjscode2session", "code": code, "appid": app.globalData.appid, "secret": app.globalData.secret }, success: function(res) { console.log("session", res); var result = res.data; if (result.status == 1) { app.openId = result.data.openId; app.loginKey = result.data.loginKey; app.wc.put("openId", result.data.openId, app.validTime); app.wc.put("loginKey", result.data.loginKey, app.validTime); // 获取用户信息 that.decodeUserData(); } else { app.msg.showMsg("提示", "请求session_key失败"); } }, fail: function(res) { app.msg.showMsg("提示", "获取/创建user信息失败"); } }); } }); }; /** * 获取运维存储用户信息 */ const decodeUserData = function() { var that = this; wx.getUserInfo({ withCredentials: true, success: function(res) { var nickName = res.userInfo.nickName; var encryptedData = res.encryptedData; var iv = res.iv; // 调用服务器接口解密数据(并根据unionId获取/创建user) // 发起登录请求 wx.request({ url: app.globalData.serverUrlExtend, method: "POST", header: { 'content-type': 'application/x-www-form-urlencoded' }, data: { "type": "wxdcgetuser", "tenantId": app.tenantId, "wid": app.wid, "openId": app.openId, "loginKey": wx.getStorageSync("loginKey"), "encryptedData": encryptedData, "iv": iv, "nickName": nickName, "sex": 1 }, success: function(res) { var result = res.data; if (result.status == 1) { wx.setStorageSync("userId", result.data.user.id); wx.setStorageSync("vipMobile", result.data.user.vipMobile); wx.setStorageSync("unionid", result.data.user.unionid); app.userId = result.data.user.id; app.globalData.appKey = result.data.appKey; app.globalData.appSecret = result.data.appSecret; app.vipMobile = result.data.user.vipMobile; app.unionid = result.data.user.unionid; // 刷新mqtt订阅topic // app.topic = app.baseTopic + "/" + app.wid + "/" + app.userId; // 重新连接mqtt // mqUtils.reaportConnect(); } }, fail: function(res) { app.msg.showMsg("提示", "解析user信息失败"); } }); }, fail: function(res) { app.msg.showMsg("提示", "获取user信息失败"); } }); }; /** * 获取会员session */ const getMemberSession = function(code) { var params = { 'appid': app.globalData.appid, 'secret': app.globalData.secret, 'code': code, 'method': 'weixin.small.jscode2session' } var ignores = []; app.jsapi.memberApi(app.globalData.appMemberKey, app.globalData.appMemberSecret, app.globalData.serverMemberUrl).ajax(params, ignores, function(json) { console.log(json); }, function(error) { } ); } module.exports = { checkLogin: checkLogin, login: login, decodeUserData: decodeUserData, checkLoginKey: checkLoginKey, getMemberSession: getMemberSession }