当前位置: 首页 > 工具软件 > AppJS > 使用案例 >

微信小程序app.js调用wx.login

家弘业
2023-12-01

只为梳理一下自己调用微信登陆的思路
先做一个简单的封装,将接口地址存到变量中,方便调用。
在utils中建立一个文件constant.js

var rqcfg = {
  domin: 'https://abc.com',   			 	
  rqurl: 'https://abc.com/applet.php?',  //示例接口
  version:'1.0.0',  
  appid: 'wx11111111111111',
  suid:''
};
module.exports = { 
  rqcfg: rqcfg
}

在app.js中引用该文件

var rqcfg = require('./utils/constant.js');
App({
onLaunch: function () {
		rqcfg.rqcfg.rqurl = rqcfg.rqcfg.rqurl + 'suid=' + suid + '&appid=' + appid;
        this.globalData.requestUrl = rqcfg.rqcfg.rqurl;    //后台接口地址
        this.globalData.appid = appid;
        this.wechatSq();        
  },
  //全局数据
    globalData: {
    requestUrl:'',   
    domin: rqcfg.rqcfg.domin,        //域名地址    
    isnewPlay: false,
    plumSession:''						
  },
   //微信登陆
  wechatSq: function (obj) {
    var that = this;
    wx.showLoading({
      title: '加载中',
    })
    //调用api
    wx.login({
      success: function (res) {   
        var code = res.code;             //登录凭证(code)
        if (res.code) {              
          var data = {
            map: 'applet_member_info',   //登陆获取用户信息接口
            code: code,
            slient: 1,    //0不是静默方式授权,1是静默方式授权
          }     
          //传递code到服务器端
          wx.request({            //get方式传递数据,将接口地址与要传递的数据写在data中
            url: rqcfg.rqcfg.rqurl,
            data: data,
            success: function (res) {
              if (res.data.ec == 200) {       //调用接口成功
                console.log("获取用户信息成功");
                that.globalData.requestUrl = rqcfg.rqcfg.rqurl + '&plum_session_applet=' + res.data.data.plum_session_applet; 
                
               //plum_session_applet为后台生成的用户id,将用户id拼接到接口后,方便后续使用
               //存入缓存中备用
                 wx.setStorage ({
                  key: "plumSession",
                  data: res.data.data.plum_session_applet,
                  success: function () { 
                    console.log('成功')
                    that.globalData.plumSession = res.data.data.plum_session_applet;    
                  }
                })
                //由于这里是网络请求,可能会在 Page.onLoad 之后才返回,
                //若是idnex.js检测不到that.globalData.plumSession ,
                //会再次调用wx.login接口,浪费资源
            	//所以先检测回调函数是否被创建,若未被创建代表index.js的onLoad还未执行,
            	//直接设置 that.globalData.plumSession ,
            	//若回调函数已经创建,表示idnex的onLoad函数已经执行调用回调函数将plumSession传递
                if (that.plumSessionCallback) {
                  that.plumSessionCallback(res.data.data.plum_session_applet);
                }else{
                  that.globalData.plumSession = res.data.data.plum_session_applet;
                }
                //到此时已经登陆成功了  
              } else {
                console.log(res.data);
                console.log("获取用户信息失败");
              }
            },
            complete: function () {
              console.log("执行完成");
              wx.hideLoading();
            }
          });
        } else {            //若没有获取到登陆code
          wx.showToast({
            title: '获取用户登录态失败!' + res.errMsg,
            icon: 'none',
            duration: 2000
          })
        }
      },
      fail: function (res) {
        wx.showToast({
          title: '用户code获取失败!' + res.errMsg,
          icon: 'none',
          duration: 2000
        })
      }
    });
  },
})

为了防止app.js中登陆失败,在index.js中再次检测plumSession是否存在

//index.js
   onShow: function () {
    var that = this;
    console.log(app.globalData.plumSession); //wx.login是异步函数、此时可能获取不到值
    if (!app.globalData.plumSession) {    //未检测到  that.globalData.plumSession
      //创建 app.plumSessionCallback 的回调函数,将plumSession作为函数参数,app.js中检测到函数被创建,
      app.plumSessionCallback = plumSession => {         
        if (plumSession!=''){
         console.log('查询到登录信息');
        }else{
          console.log('未查询到登录信息');
          app.wechatSq(that);
        }
      }
  }
 类似资料: