微信賬戶體系科普:什么是UnionId、OpenId與wxopenid?

1 評論 32916 瀏覽 66 收藏 6 分鐘

如果你對 UnionId、OpenId、wxopenid這三個(gè)概念傻傻分不清,那看這篇文章就對了。了解微信賬戶體系,能幫助你更好地做小程序設(shè)計(jì)。

01 概念解釋

1. 小程序OpenId

OpenId?是一個(gè)用戶對于一個(gè)小程序/公眾號的標(biāo)識,開發(fā)者可以通過這個(gè)標(biāo)識識別出用戶。類似?wxopenid,同一個(gè)人,使用不同的小程序,會留下不同的小程序?OpenId?。獲取小程序?OpenId?無需用戶操作和授權(quán)。

2. UnionId

UnionId?是一個(gè)用戶對于同主體微信小程序/公眾號/APP的標(biāo)識,開發(fā)者需要在微信開放平臺下綁定相同賬號的主體。開發(fā)者可通過?UnionId,實(shí)現(xiàn)多個(gè)小程序、公眾號、甚至APP 之間的數(shù)據(jù)互通。

正常情況下,微信生態(tài)中,UnionId?是用戶身份的唯一標(biāo)識,(如果業(yè)務(wù)涉及不同主體,不一定)。

所以,如果開發(fā)者擁有多個(gè)移動應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(包括小程序),可通過?UnionId?來區(qū)分用戶的唯一性。

3. 公眾號OpenId(簡稱 wxopenid)

同一個(gè)人,關(guān)注不同的公眾號,會留下不同的wxopenid。大帳號、小帳號因?yàn)榻壎ㄔ谝黄鹆耍詴峭粋€(gè)wxopenid。

同一個(gè)用戶,在同主體的小程序和公眾號下,會有各自的?OpenId?,不相同,不能混用。

以上,所有 ID 均并不包含敏感信息,只是個(gè)普通的 ID。

02 唯一性說明

  • 一個(gè)人,在同主體的小程序、公眾號等下面只有 1 個(gè)?UnionId,有多個(gè)?wxopenid?和多個(gè)小程序OpenId?。
  • UnionId是同主體應(yīng)用下唯一身份證,可以查詢對應(yīng)的wxopenid和小程序OpenId。因此,UnionId?的覆蓋率是最高的。當(dāng)用戶關(guān)注公眾號、逛公眾號下面H5時(shí),可以同時(shí)獲取?UnionId、wxopenid。而逛小程序時(shí),可以同時(shí)獲取小程序?UnionId、openid。不管逛哪都能拿到?UnionId。
  • 在單個(gè)小程序或公眾號里,OpenId?是唯一的。當(dāng)同一個(gè)小程序主體下有多個(gè)小程序時(shí),每個(gè)小程序有自己的?OpenId,因此需要?UnionId?進(jìn)行唯一身份標(biāo)識,即:UnionId?是同個(gè)主體下不同小程序的用戶唯一標(biāo)識;

03 獲取方式

1. wxopenid

查看:獲取設(shè)備及用戶信息

2. OpenId

通過調(diào)用?wx.login()?,獲取臨時(shí)登錄憑證憑證 code

App({
  onLaunch: function() {
    wx.login({
      success: function(res) {
        if (res.code) {
          //發(fā)起網(wǎng)絡(luò)請求
          // code: 就是登錄憑證(code)
        }
      }
    });
  }
})

前端獲取到 code 后,將 code 傳給后端,后端調(diào)用接口獲取?session\_key?和?OpenId?,接口如下:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

3. UinionId

前提條件:

  1. 微信開放平臺帳號已完成開發(fā)者資質(zhì)認(rèn)證
  2. 微信開放平臺綁定小程序

獲取 UnionId 流程

  1. 調(diào)用接口??wx.getUserInfo?,從解密數(shù)據(jù)中獲取 UnionID。注意本接口需要用戶授權(quán),請開發(fā)者妥善處理用戶拒絕授權(quán)后的情況。
  2. 如果開發(fā)者帳號下存在同主體的公眾號,并且該用戶已經(jīng)關(guān)注了該公眾號。開發(fā)者可以直接通過??wx.login? +?code2Session?獲取到該用戶 UnionID,無須用戶再次授權(quán)。
  3. 如果開發(fā)者帳號下存在同主體的公眾號或移動應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過該公眾號或移動應(yīng)用。開發(fā)者也可以直接通過 wx.login +?code2Session?獲取到該用戶 UnionID ,無須用戶再次授權(quán)。
  4. 用戶在小程序(暫不支持小游戲)中支付完成后,開發(fā)者可以直接通過?getPaidUnionId?接口獲取該用戶的 UnionID,無需用戶授權(quán)。注意:本接口僅在用戶支付完成后的5分鐘內(nèi)有效,請開發(fā)者妥善處理。
  5. 小程序端調(diào)用?云函數(shù)?時(shí),如果開發(fā)者帳號下存在同主體的公眾號,并且該用戶已經(jīng)關(guān)注了該公眾號,可在云函數(shù)中通過 cloud.getWXContext 獲取 UnionID。
  6. 小程序端調(diào)用?云函數(shù)?時(shí),如果開發(fā)者帳號下存在同主體的公眾號或移動應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過該公眾號或移動應(yīng)用,也可在云函數(shù)中通過??cloud.getWXContext? 獲取 UnionID。

 

本文由 @龍村后生? 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash, 基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 轉(zhuǎn)正答辯

    回復(fù)