由于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。

posted on 2023-03-01 15:07  £冷☆月№  阅读(637)  评论(0编辑  收藏  举报