微信賬戶體系科普:什么是UnionId、OpenId與wxopenid?
如果你對 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
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
前提條件:
- 微信開放平臺帳號已完成開發(fā)者資質(zhì)認(rèn)證
- 微信開放平臺綁定小程序
- 調(diào)用接口??wx.getUserInfo?,從解密數(shù)據(jù)中獲取 UnionID。注意本接口需要用戶授權(quán),請開發(fā)者妥善處理用戶拒絕授權(quán)后的情況。
- 如果開發(fā)者帳號下存在同主體的公眾號,并且該用戶已經(jīng)關(guān)注了該公眾號。開發(fā)者可以直接通過??wx.login? +?code2Session?獲取到該用戶 UnionID,無須用戶再次授權(quán)。
- 如果開發(fā)者帳號下存在同主體的公眾號或移動應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過該公眾號或移動應(yīng)用。開發(fā)者也可以直接通過 wx.login +?code2Session?獲取到該用戶 UnionID ,無須用戶再次授權(quán)。
- 用戶在小程序(暫不支持小游戲)中支付完成后,開發(fā)者可以直接通過?getPaidUnionId?接口獲取該用戶的 UnionID,無需用戶授權(quán)。注意:本接口僅在用戶支付完成后的5分鐘內(nèi)有效,請開發(fā)者妥善處理。
- 小程序端調(diào)用?云函數(shù)?時(shí),如果開發(fā)者帳號下存在同主體的公眾號,并且該用戶已經(jīng)關(guān)注了該公眾號,可在云函數(shù)中通過 cloud.getWXContext 獲取 UnionID。
- 小程序端調(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é)議
轉(zhuǎn)正答辯