由于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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构