返回

小程序开发-3用户openid的获取方式简述

前端

获取用户openid的方式,大致可以分为小程序端和云开发端两种方式。

1. 小程序端获取用户openid

1.1 直接调用wx.login获取临时登录凭证code

wx.login({
  success: res => {
    if (res.code) {
      // 发送res.code到后台服务器以换取openid和session_key
      wx.request({
        url: 'https://example.com/api/v1/auth/login',
        method: 'POST',
        data: {
          code: res.code
        },
        success: res => {
          // 将openid和session_key存储在本地或数据库中
          const openid = res.data.openid
          const sessionKey = res.data.session_key
        }
      })
    } else {
      console.log('获取用户登录凭证失败!' + res.errMsg)
    }
  }
})

1.2 使用wx.getUserInfo获取用户基本信息

wx.getUserInfo({
  success: res => {
    // 发送res.code和encryptedData到后台服务器以换取openid和session_key
    wx.request({
      url: 'https://example.com/api/v1/auth/login',
      method: 'POST',
      data: {
        code: res.code,
        encryptedData: res.encryptedData,
        iv: res.iv
      },
      success: res => {
        // 将openid和session_key存储在本地或数据库中
        const openid = res.data.openid
        const sessionKey = res.data.session_key
      }
    })
  }
})

2. 云开发端获取用户openid

2.1 使用云开发提供的wx.cloud.login()获取用户登录凭证code

wx.cloud.login({
  success: res => {
    // 发送res.code到云开发服务器以换取openid和session_key
    wx.cloud.callFunction({
      name: 'login',
      data: {
        code: res.code
      },
      success: res => {
        // 将openid和session_key存储在本地或数据库中
        const openid = res.result.openid
        const sessionKey = res.result.session_key
      }
    })
  }
})

2.2 使用云开发提供的wx.cloud.database().collection('user').doc(userId).get()获取用户信息

wx.cloud.database().collection('user').doc(userId).get({
  success: res => {
    // 将openid存储在本地或数据库中
    const openid = res.data.openid
  }
})

3. 注意事项

  • 使用云开发获取用户openid需要将小程序与云开发环境关联,并且需要在云开发控制台开通用户管理服务。
  • 小程序端获取用户openid需要在小程序后台配置业务域名和js安全域名。
  • 获取用户openid时需要用户授权,因此在调用wx.login()和wx.getUserInfo()方法前需要先调用wx.authorize()方法授权。
  • openid的有效期为30天,如果用户30天内没有重新登录小程序,则需要重新获取openid。