• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

小程序如何获取code

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

小程序如何获取code

<button open-type="getUserInfo" hover-class=\'none\' bindgetuserinfo="getUserInfoFun">.</button> 
wx.login({
      success: function (res) {
        var code = res.code;
        if (code) {
          console.log(\'获取用户登录凭证:\' + code);

          // --------- 发送凭证 ------------------
          wx.request({
            url: \'https://www.my-domain.com/wx/onlogin\',
            data: { code: code }
          })
          // ------------------------------------

        } else {
          console.log(\'获取用户登录态失败:\' + res.errMsg);
        }
      }
    });

登录的时候需要拿到token值,需要跟后端配合才能拿到

小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器

开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key

// 登录
wx.login({
    success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        // console.log(res)
        if (res.code) {
            //发起网络请求
            wx.request({
                url: \'url\',
                method: \'POST\',
                data: {
                    // x: \'\',
                    // y: \'\'
                    code: res.code //将code发给后台拿token
                },
                header: {
                    \'content-type\': \'application/json\' // 默认值
                },
                success: function(res) {
                    // 存token
                    console.log(\'token=\' + res.data.data.token)
                    that.globalData.token = res.data.data.token; //拿到后将token存入全局变量  以便其他页面使用
                }
            })
        } else {
            console.log(\'获取用户登录态失败!\' + res.errMsg)
        }
    }
})
// 检验、登录
wx.checkSession({
    success: function() {
       //session_key 未过期,并且在本生命周期一直有效
    },
    fail: function() {
        //session_key 已经失效,需要重新执行登录流程
        wx.login({
            success: (res) => {
                if (res.code) {
                    //发起网络请求
                    wx.request({
                        //开发者服务器通过code换取用户唯一标识openid 和 会话密钥session_key。
                        url: \'https://test.com/onLogin\',                  
                        data: {
                            // 临时登录凭证code,并回传到开发者服务器
                            code: res.code
                        },
                        success: function(result) {
                            //返回业务数据,前后端交互身份识别
                        }
                    })
                } else {
                    console.log(\'登录失败!\' + res.errMsg)
                }
            }
        });
    }
})

授权获取用户信息

// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
wx.getSetting({
    success(res) {
        if (!res.authSetting[\'scope.record\']) {
            wx.authorize({
                scope: \'scope.record\',
                success() {
                    // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
                    wx.startRecord()
                }
            })
        }
    }
})
wx.authorize({scope: "scope.userInfo"}),无法弹出授权窗口,请使用 
<button open-type="getUserInfo"></button>
wx.getSetting({
    success: (res)=>{
        if (res.authSetting[\'scope.userInfo\']) {
            // 已经授权,可以直接调用 getUserInfo 获取头像昵称
            wx.getUserInfo({
              withCredentials: true,
              success: (res) => {
                  console.log(res);
              }                           
            })
        }
    }
});

授权和登录的意义
session_key 的作用
unionId 的作用,有哪些获取途径
在应用中如何保存用户登录态

新版api已废弃wx.authorize()

wx.getUserInfo(Object object)
调用前需要 用户授权 scope.userInfo。
注意:wx.authorize({scope: "scope.userInfo"}),无法弹出授权窗口,请使用

<button open-type="getUserInfo"/>

一个用户相对于不同的微信应用会存在不同的openId

保存用户登录态

两种解决方案:前端保存和后端保存

App({
  data:{
    titleList: [],    //数据
    wxa_session: \'\',  // 密钥 
    openid: \'\',
    scene: \'\'
  },
  onLaunch: function () {   
    try {
      // 同步清理本地数据缓存
      console.log(\'clear\');
      wx.clearStorageSync()
    } catch (e) {
      // Do something when catch error
    }
 },
// 定义登录函数
userLogin:function(cb){
  var that = this
  wx.login({
    success: function (res) {
      if (res.code) {
        //发起网络请求
        wx.request({
          url: \'https://mp.weixin.qq.com/wxaintp/common?action=login&codetype=invoicediscern\',
          data: {
            // 通过传递code获取openID 和 密钥
            code: res.code
          },
          success: function (res) {
            // console.log(res);
            if (res.data.base_resp.ret == 0){

              // 用户唯一标识openid 和 会话密钥session_key
              that.data.wxa_session = res.data.session_key;
              that.data.openid = res.data.openid;
              console.log(that.data.wxa_session);
            
              cb();   // 后续操作         
            }
            else {
              // 参数有误
              wx.showToast({
                image: \'/static/images/[email protected]\',
                title: res.data.base_resp.err_msg,
              })
              
            }               
          }
        })
      } else {
        console.log(\'获取用户登录态失败!\' + res.errMsg)
      }
    }
  });  
  globalData:{
      userInfo:null
  },
  onShow: function(options) {
        console.log(\'app onShow\');
        console.log(options);
        var that = this;
        if(options){
          that.data.scene = options.scene;  //场景
        }    
  }  
})
App({
  // 获取token
  getToken: function() {
    var that = this;
    if (wx.getStorageSync("token") == null || wx.getStorageSync("token") == "") {
      console.log("请用户授权获取token");
      wx.redirectTo({
        url: \'/pages/welcome/welcome\',
      })
    } else {
      wx.switchTab({
        url: \'/pages/index/index\',
      })
    }
  },
  // 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
  onLaunch: function() {
    // 获取小程序更新机制兼容
    if (wx.canIUse(\'getUpdateManager\')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function(res) {
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function() {
            wx.showModal({
              title: \'更新提示\',
              content: \'新版本已经准备好,是否重启应用?\',
              success: function(res) {
                if (res.confirm) {
                  // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function() {
            // 新的版本下载失败
            wx.showModal({
              title: \'已经有新版本了哟~\',
              content: \'新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~\',
            })
          })
        }
      })
    } else {
      // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
      wx.showModal({
        title: \'提示\',
        content: \'当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。\'
      })
    }

    var that = this;
    that.getToken();
  },
  // 当小程序启动,或从后台进入前台显示,会触发 onShow
  onShow: function(options) {

  },
  // 当小程序从前台进入后台,会触发 onHide
  onHide: function() {

  },
  // 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
  onError: function(msg) {

  },
  globalData: {
    "avatarUrl": null,
    "nickName": null,
    // userId: 用户编号
    "userId": null,
    // organId: 所属单位
    "organId": null,
    // idType:身份类型	
    "idType": null,


    "uncheckedNUM": null,
    "attendNum": null,
    "beLateNum": null,
    "leaveNum": null,

    "token": null,
    "studentNo": null,
  }
})
// 获取全局变量
const app = getApp();
Page({
  // 页面的初始数据
  data: {
    progress_txt: \'点击账号绑定...\',
  },
  // 按钮
  drawProgressbg: function() {
    // 使用 wx.createContext 获取绘图上下文 context
    var ctx = wx.createCanvasContext(\'canvasProgressbg\')
    ctx.setLineWidth(4); // 设置圆环的宽度
    ctx.setStrokeStyle(\'#20183b\'); // 设置圆环的颜色
    ctx.setLineCap(\'round\') // 设置圆环端点的形状
    ctx.beginPath(); //开始一个新的路径
    ctx.arc(110, 110, 100, 0, 2 * Math.PI, false);
    //设置一个原点(100,100),半径为90的圆的路径到当前路径
    ctx.stroke(); //对当前路径进行描边
    ctx.draw();
  },
  // 授权登录
  doAuthorization: function(e) {
    var that = this;
    console.log("调用了 doAuthorization 授权");
    // 授权 只为获取token
    wx.login({
      success: function(res) {
        console.log("login: code", res.code);
        // 发送至服务器
        wx.request({
          url: \'\',
          method: \'POST\',
          header: {
            Authorization: "",
            \'Content-Type\': \'application/x-www-form-urlencoded\',
          },
          data: {
            mobile: \'wxecd372cca9b110e3@\' + res.code,
            grant_type: \'mobile\',
          },
          success: function(res) {
            // 进行判断
            console.log("button 成功", res.data);
            console.log("button token 成功", res.data.access_token);
            if (res.data.access_token == null || res.data.access_token == "") {
              wx.showModal({
                title: \'提示\',
                content: \'请到公众号平台进行绑定账号\',
                showCancel: false,
                success: function(res) {
                  console.log("请绑定账号");
                }
              })
            } else {
              wx.setStorageSync("token", res.data.access_token);
              wx.showToast({
                title: \'成功\',
                icon: \'succes\',
                duration: 1000,
                mask: true
              })
              setTimeout(function() {
                // 授权跳转 index
                wx.switchTab({
                  url: \'/pages/index/index\',
                })
                wx.hideToast()
              }, 2000)
            }
          },
          // 失败
          fail: function(err) {
            console.log("token 失败", err);
            wx.showModal({
              title: \'提示\',
              content: \'请到公众号平台进行绑定账号\',
              showCancel: false,
              success: function(res) {      
                if (res.confirm) {        
                  wx.navigateBack({          
                    delta: 0        
                  })      
                }    
              }
            })
          }
        })
      }
    })
  },
  // 生命周期函数--监听页面加载
  onLoad: function(options) {

  },
  // 生命周期函数--监听页面初次渲染完成
  onReady: function() {
    this.drawProgressbg();
  },
  // 生命周期函数--监听页面显示
  onShow: function() {

  },
  // 生命周期函数--监听页面隐藏
  onHide: function() {

  },
  // 生命周期函数--监听页面卸载
  onUnload: function() {

  }
})

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信小程序聚合操作lookuplocalField一次查询多条指定数据发布时间:2022-07-18
下一篇:
小程序搜索优化指南(SEO)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap