微信小程序の登录流程

登录流程

    小程序端: 
        (1) 在小程序通过wx.login API获取临时的code
        (2) 调用接口将code传递给自己的服务器

    自己服务器端:
        (1) 获取小程序内传来的临时的code
        (2) 将临时的code + appId + appsecret发送给微信小程序服务器,获取 openId 和 session_key [这个时候用户不知道自己已经登录成功]
        (3) 自己服务器内将 openId和session_key 组合生成有期限的token,返回给小程序端

    小程序端:
        (1) 获取自己服务器端内传递的token,并存储到storeage中
        (2) 将需要记录用户操作的接口中携带这个token发送给自己的服务器端
    
    自己服务器端:
        (1) 将接口传递的token进行解析,解析出openId和session_key,将操作保存在数据库内,避免向微信服务器多次请求获取openId
    
    如果用户更换手机?
        (1) 判断storage中是否存储了token,如果未存储则重复登录流程
        (2) 如果存储了token,判断是否已经过期,如果过期了则重新登录,如果没有过期,继续判断session_key是否过期,如果没有过期,则继续使用这个token进行用户校验,反之则重新登录

判断session_key是否过期:
wx.checkSession({
      success: (res) => {
        resolve(true)
      },
      fail: () => {
        reject(false)
      }
    })
  }
  1. 什么是openId?

    openId 用户身份的唯一标识,用openId去识别用户 [unionId用于第三方登录]

  2. 什么是unionId?

    unionId也是唯一的标识,用于多平台(APP,公众号,网页)授权时进行标识识别,多个产品源进行数据共享
    多平台共享时需要同时绑定手机号(常用),因为可能某个平台不支持微信的登录,需要通过其它的方式进行信息绑定(最多的就是手机号)
    所以有些客户端在要求你微信登录之后需要绑定手机号

注意: 服务器端openID和unionID都是可以获取的,如果涉及到多端的数据共享,建议直接使用unionID进行校验

获取用户信息

  1. 使用getUserProfile API
    wx.getUserProfile({
      desc: 'desc', // 必填
      success:(res)=>{
        console.log(res);    // 成功回调
      },
      fail:()=>{}
    })

值得注意:

不允许直接在生命周期方法里获取用户信息,只能通过事件触发获取
示例:

// 这里加不加open-type 也可以
<button bindtap="getUserProfile" open-type="getUserInfo"></button>

getUserProfile(){
  wx.getUserProfile({
      desc: '你好', // 必填
      success:(userInfo)=>{
      // 这里获取用户信息
          console.log(userInfo);   
      },
      fail:()=>{}
  })
}

获取手机号

  1. 获取手机号
    <button open-type="getPhoneNumber">获取手机号</button>

值得注意:
目前不能直接获取手机号,再调用这个button按钮时会传递一个code,将code传递给自己服务器端的一个接口,接口内部再访问微信的服务器,通过这个code获取手机号码信息