ad域帐号登录提示无法处理请求_微信小程序开发用户授权登录(下)

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。所以我们有时候需要获取这个UnionID

登录流程

b60eee1da919828429337ff0b05542a8.png

流程解析

1. 客户端获得code,并将code传给第三方服务端(后台)

微信小程序端调用wx.login,获取登录凭证(code),并调用接口,将code发送到第三方客户端

2. 第三方服务端用code换session_key和openid

小程序端将code传给第三方服务器端,第三方服务器端调用接口,用code换取session_key和 openid (后台服务器带着前端发送的code去访问微信后台的接口)

3. 第三方服务端生成新的session_key和 openid

第三方服务器端拿到请求回来的session_key和openid,发送到客户端

4. 正常请求

小程序每次请求都将openid 放在请求头里,第三方服务端解析判断合法性,并进行正常的逻辑处理

小程序 wx.checkSession 校验登陆态

  • success :接口调用成功,session_key未过期;
  • fail :接口调用失败,session_key已过期;

代码演示

代码分两种演示:第一种自己启动了本地的后台 访问微信公共平台 另外一个会给大家提供一个模拟演示的接口 获取session_key openid

登录页.wxml

可以只是一个简单的按钮 点击 button去登录

登录页.js

这样就登录完成了。

再次进入页面 自动登录

如果没有后台转换的接口 又想要模拟登录 后台返回的openid和session_key 代码如下:

bindGetUserInfo: function (e) {
    if (e.detail.userInfo) {
      var that = this;
      //点击按钮就是授权了 可以获取用户头像 昵称 
console.log(e.detail.userInfo);
      wx.login({
        success: res => {
          // 获取到用户的 code 之后:res.code
          console.log("用户的code:" + res.code)
          // 可以传给后台,再经过解析获取用户的 openid
          // 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下:
          wx.request({
            url: 'https://api.weixin.qq.com/sns/jscode2session', //接口地址
            data: {
              appid: '注册的appid',
              secret: '生成的sercret',
              js_code: res.code,
              grant_type: 'authorization_code'
            },
            header: {
              'content-type': 'application/json' //默认值
            },
            success: function (res) {
              console.log(res.data)
              OPEN_ID = res.data.openid;//获取到的openid  
              SESSION_KEY = res.data.session_key;//获取到session_key  
	//获取数据后 把登录的信息 存储在本地 存储--再次进入判断是否有存储 有直接请求login 没有引导授权
              //如果返回成功,则将OPEN_ID和SESSION_KEY提交请求给服务器
              wx.request({
                url: 'xxxx/login.jsp',
                data: {
                  open_id: OPEN_ID,
                  session_key: SESSION_KEY,
                  gender: GENDER
                },
                header: {
                  'content-type': 'application/json' //默认值
                },
                method: 'GET'
              })
            }
          });
        }
      });
      that.setData({
        isHide: false,
      });
    } else {
      //用户按了拒绝按钮
      wx.showModal({
        title: '警告',
        content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!',
        showCancel: false,
        confirmText: '返回授权',
        success: function (res) {
          // 用户没有授权成功,不需要改变 isHide 的值
          if (res.confirm) {
            console.log('用户点击了“返回授权”');
          }
        }
      });
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值