OpenId、UnionId

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1. OpenId

1.1 概念

OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。类似 wxopenid,

在微信小程序中,openid是唯一标识一个用户的字符串,是用户在小程序中的身份证明。

  • 同一个人,使用不同的小程序,会留下不同的小程序 OpenId 。
  • 获取小程序 OpenId 无需用户操作和授权。

1.2 公众号OpenId(简称 wxopenid)

  • 在小程序中,openID是小程序的普通用户的一个唯一的标识,只针对当前的小程序有效
  • 同理在公众号中openID是公众号的普通用户的一个唯一的标识,只针对当前的公众号有效
  • 以上所有 ID 均并不包含敏感信息,只是个普通的 ID。
同一个微信用户在小程序和公众号上的openid是不同的
  • 同一个人,关注不同的公众号,会留下不同的wxopenid。大帐号、小帐号因为绑定在一起了,所以会是同一个wxopenid。
  • 同一个用户,在同主体的小程序和公众号下,会有各自的 OpenId ,不相同,不能混用。

1.3 openid的获取方式

在小程序中,获取openid的方式有两种:调用wx.login接口获取临时登录凭证code,再通过code向服务器换取openid;或者通过登录授权的方式获取用户信息,其中包括openid。

方式1. 调用wx.login接口获取openid

调用wx.login接口获取临时登录凭证code,再将code发送到服务器后台进行处理,最终获得openid。

wx.login({
   
  success(res) {
   
    if (res.code) {
   
      wx.request({
   
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
   
          appid: 'your_appid',
          secret: 'your_secret',
          js_code: res.code,
          grant_type: 'authorization_code'
        },
        success(res) {
   
          console.log(res.data.openid)
        }
      })
    } else {
   
      console.log('登录失败!' + res.errMsg)
    }
  }
})

前端获取到 code 后,将 code 传给后端,后端调用接口获取 session_key 和 OpenId

方式2. 登录授权获取openid

在小程序中,可以使用wx.getUserInfo接口获取用户信息,其中包括用户的openid。

wx.getUserInfo({
   
  success(res) {
   
    console.log(res.userInfo)
    console.log(res.userInfo.nickName)
    console.log(res.userInfo.avatarUrl)
    console.log(res.userInfo.openId)
  }
})

1.4 openid的作用

在这里插入图片描述

1.5 openid的注意事项

在这里插入图片描述

2. UnionId

2.1 概念

UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过 UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通。

  • 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
  • 简而言之,unionid是用来说明多个应用下用户身份一致性的问题。相比较而言,由于在同一个应用下每个用户的openid是唯一的,因此openid也是也可以用来标记用户身份,但是仅限于在同一个应用中。对于不同的应用,每个用户的openid是不一样的,要想在不同应用间识别用户的唯一性只可以用unionid。

2.2 唯一性说明

同一用户,对同一个微信开放平台下的不同应用,unionid是相同的
  1. 一个人,在同主体的小程序、公众号等下面只有 1 个 UnionId,有多个 wxopenid 和多个小程序OpenId 。

  2. UnionId是同主体应用下唯一身份证,可以查询对应的wxopenid和小程序OpenId。因此,UnionId 的覆盖率是最高的。当用户关注公众号、逛公众号下面H5时,可以同时获取 UnionId、wxopenid。而逛小程序时,可以同时获取小程序 UnionId、openid。不管逛哪都能拿到 UnionId。

  3. 在单个小程序或公众号里,OpenId 是唯一的。当同一个小程序主体下有多个小程序时,每个小程序有自己的 OpenId,因此需要 UnionId 进行唯一身份标识,即:UnionId 是同个主体下不同小程序的用户唯一标识;

在这里插入图片描述

2.3 获取 UnionId 流程:

前提条件:

  • 微信开放平台帐号已完成开发者资质认证
  • 微信开放平台绑定小程序

获取 UnionId 流程:

  1. 调用接口 wx.getUserInfo ,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
  2. 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。
  3. 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。
  4. 用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过 getPaidUnionId 接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。
  5. 小程序端调用 云函数 时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。
  6. 小程序端调用 云函数 时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。

参看文档: UnionID 机制说明 | 微信开放文档 微信开发者平台文档
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 17:50:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 17:50:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 17:50:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 17:50:03       20 阅读

热门阅读

  1. vue项目拆分组件思想对比

    2024-02-08 17:50:03       41 阅读
  2. 《电子芯片的夜晚》

    2024-02-08 17:50:03       40 阅读
  3. STM32 微控制器应用领域

    2024-02-08 17:50:03       38 阅读
  4. AtCoder D - Synchronized Players

    2024-02-08 17:50:03       34 阅读
  5. c# DataTable 帮助类

    2024-02-08 17:50:03       32 阅读
  6. [144] 二叉树的前序遍历 js

    2024-02-08 17:50:03       28 阅读
  7. 四:C语言-选择结构

    2024-02-08 17:50:03       38 阅读
  8. MySQL-进阶

    2024-02-08 17:50:03       34 阅读
  9. Cpp-2

    Cpp-2

    2024-02-08 17:50:03      33 阅读
  10. 2024牛客寒假算法基础集训营1 D数组成鸡

    2024-02-08 17:50:03       38 阅读
  11. 初识C++(3)

    2024-02-08 17:50:03       29 阅读
  12. VPS与云计算有什么区别?

    2024-02-08 17:50:03       40 阅读