小程序梳理

获取登录态

在这里插入图片描述

写在前面

对用户来说,可以看作有两个登录态

  • 小程序端的登录态: 用户的基本信息,昵称,电话,头像等等,原先在小程序端用getUserInfo可获取,但目前api已经不支持首次就用该方法获取,需要引导用户点击。首次授权后即可直接调用getUserInfo获取。

    <button  open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权</button>
    
     bindGetUserInfo(e){
        if (e.detail.userInfo) {
          //用户按了允许授权按钮	      
    	  this.setData({
       		userInfo:e.detail.userInfo
       	  )}
        } else {
          // 用户取消了授权
        }
      },
    

    授权后可在需要时调用

     wx.getUserInfo({
      success:function(res){
        console.log(res)
      }
    })
    
  • 服务端的登录态: 用户的open_id、session_key等等。open_id是用户在该小程序中的唯一标识,当需要用户与自建后台交互时,需要先调用wx.login获取code,用code发起请求,后台利用code + appid + secret 可获取用户的open_id和session_key。

        wx.login({
          success: function (res) {
            let code = res.code; //把code 给后台,配合appId和serect获取openid
            wx.request({
                method: 'POST',
                url: 'http://10.1.13.35:3000/wxLogin',
                data: {
                  code: code
                },
                header: {
                  'content-type': 'application/x-www-form-urlencoded' // 默认值
                },
                success: function (res) {
                  let data = res.data['result_row'];
                  wx.setStorageSync('userInfo', {
                    session_key: data.session_key,
                    openid: data.openid
                  })
    
                  this.setData({
                    userInfo: wx.getStorageSync('userInfo')
                  })
                }
            })
          }  
        })
    

    后台:

    app.post('/wxLogin',function(req,res){
    
        let params = req.body,
            code = params.code,
            APP_URL =  `https://api.weixin.qq.com/sns/jscode2session?
            			appid=${APPID}
            			&secret=${APPSECRET}
            			&js_code=${code}
            			&grant_type=authorization_code`,
            APPID = '...',
            APPSECRET = '...';
            
            request({
                url: APP_URL,//请求路径
                method: "GET",//请求方式,默认为get
                headers: {//设置请求头
                    "content-type": "application/json",
                },
            }, function(error, response, body) {
                if (!error && response.statusCode == 200) {
                    let data = JSON.parse(body)
                    res.json({
                        'ret_code':0,
                        'result_row':JSON.parse(body)
                         // body = {'session_key:... , open_id: ...'}
                    })
    
                }
            }); 
        
    })
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值