登录

QQ 浏览器小游戏登录流程与微信小游戏类似,具体流程如下图

登录流程

  1. 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
  2. 调用 code2Session 接口,换取 用户唯一标识 qbopenid 和 会话密钥 session_key

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份

调用接口获取登录凭证

通过凭证进而换取用户登录态信息,包括用户的唯一标识(qbopenid)及本次登录的会话密钥(session_key)等

wx.login({
  success (res) {
    if (res.code) {
      // 发起网络请求
      wx.request({
        url: 'https://test.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

临时登录凭证 code 有效期五分钟,开发者需要在开发者服务器后台调用 code2Session,使用 code 换取 qbopenidsession_key 等信息

登录凭证校验

通过 wx.login() 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程

请求地址

// 正式环境
GET https://api.qbgame.qq.com/jscode2session?appid=<GAMEID>&appsecret=<APPSECRET>&code=<CODE>

// 沙箱环境
GET https://sandbox.api.qbgame.qq.com/jscode2session?appid=<GAMEID>&appsecret=<APPSECRET>&code=<CODE>

请求参数

属性 类型 默认值 必填 说明
appid string 小游戏 ID
appsecret string 小游戏 appsecret
code string wx.login 获取的 code

返回值

返回的 JSON 数据包

属性 类型 说明
qbopenid string 用户唯一标识
session_key string 会话密钥
errcode number 错误码
errmsg string 错误信息

会话密钥 session_key 是对用户数据进行的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

检查登录态是否过期

wx.checkSession({
  success () {
    // session_key 未过期,并且在本生命周期一直有效
  },
  fail () {
    // session_key 已经失效,需要重新执行登录流程
    wx.login() //重新登录
  }
})

校验服务器所保存的登录态 session_key 是否合法

为了保持 session_key 私密性,接口不明文传输 session_key,而是通过校验登录态签名完成

请求地址

// 正式环境
GET https://api.qbgame.qq.com/checksession?access_token=<ACCESS_TOKEN>&signature=<SIGNATURE>&openid=<OPENID>&sig_method=<SIG_METHOD>

// 沙箱环境
GET https://sandbox.api.qbgame.qq.com/checksession?access_token=<ACCESS_TOKEN>&signature=<SIGNATURE>&openid=<OPENID>&sig_method=<SIG_METHOD>

请求参数

属性 类型 默认值 必填 说明
access_token string 接口调用凭证
signature string 用户登录态签名
openid string 用户唯一标识符,登录返回的即 qbopenid
sig_method string 用户登录态签名的哈希方法,目前只支持 hmac_sha256

返回值

返回的 JSON 数据包

属性 类型 说明
errcode number 错误码
errmsg string 错误信息