由于wx.login的调用次数有限制,有些业务逻辑必须要登录获取到openid,所以想到如下解决方法
解决方法:
1.app.js种实现统一的登录方法,再有需要用到的地方调用一次就可以,如有已经调用过了的就直接读取openid。
App({ /** * 定义全局变量 */ globalData: { openid: '', //用户openid }, onLaunch: function () { }, /** * 登录获取openid */ Login: function(){ var that = this; return new Promise(function(resolve, reject){ var globalData_openid = that.globalData.openid; console.log(!globalData_openid); if(!globalData_openid) { wx.login({ success: function(res) { //console.log(res.code) // 发送 res.code 到后台换取 openId, unionId let jsCode = res.code; wx.request({ url: 'https://*****/JsCode2Session', //仅为示例,并非真实的接口地址 data: { js_code: jsCode }, method:'GET', header: { 'content-type': 'application/json' // 默认值 }, success (res) { console.log(res.data) var openid = res.data.openid; //获取用户信息成功 that.globalData.openid = openid; //console.log(that.globalData.openid); wx.setStorageSync('openid', openid); resolve(res.data) }, fail (res) { console.log(res) }, complete (res) { console.log(res) } }) } }); } else { var res = { openid:globalData_openid, } resolve(res); } }) } })
2.页面js的调用方法代码
const app = getApp() Page({ data: {}, onLoad() { var taht = this; //这里需要录openid app.Login().then(function(res){ if(res) { let openid=res.openid; //这里写你使用的逻辑代码 } }); } })
以上基本实现了我所想要的,如果已经获取到openid了,就直接使用globalData中参数openid,就不需要通过wx.login去获取了,从而避免了多次调用wx.login。