如果你對 UnionId、OpenId、wxopenid這三個概念傻傻分不清,那看這篇文章就對了。瞭解微信賬戶體系,能幫助你更好地做小程序設計。
01 概念解釋
1. 小程序OpenId
OpenId 是一個用戶對於一個小程序/公眾號的標識,開發者可以通過這個標識識別出用戶。類似 wxopenid,同一個人,使用不同的小程序,會留下不同的小程序 OpenId 。獲取小程序 OpenId 無需用戶操作和授權。
2. UnionId
UnionId 是一個用戶對於同主體微信小程序/公眾號/APP的標識,開發者需要在微信開放平臺下綁定相同賬號的主體。開發者可通過 UnionId,實現多個小程序、公眾號、甚至APP 之間的數據互通。
正常情況下,微信生態中,UnionId 是用戶身份的唯一標識,(如果業務涉及不同主體,不一定)。
所以,如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程序),可通過 UnionId 來區分用戶的唯一性。
3. 公眾號OpenId(簡稱 wxopenid)
同一個人,關註不同的公眾號,會留下不同的wxopenid。大帳號、小帳號因為綁定在一起了,所以會是同一個wxopenid。
同一個用戶,在同主體的小程序和公眾號下,會有各自的 OpenId ,不相同,不能混用。
以上,所有 ID 均並不包含敏感信息,只是個普通的 ID。
02 唯一性說明
- 一個人,在同主體的小程序、公眾號等下麵只有 1 個 UnionId,有多個 wxopenid 和多個小程序OpenId 。
- UnionId是同主體應用下唯一身份證,可以查詢對應的wxopenid和小程序OpenId。因此,UnionId 的覆蓋率是最高的。當用戶關註公眾號、逛公眾號下麵H5時,可以同時獲取 UnionId、wxopenid。而逛小程序時,可以同時獲取小程序 UnionId、openid。不管逛哪都能拿到 UnionId。
- 在單個小程序或公眾號里,OpenId 是唯一的。當同一個小程序主體下有多個小程序時,每個小程序有自己的 OpenId,因此需要 UnionId 進行唯一身份標識,即:UnionId 是同個主體下不同小程序的用戶唯一標識;
03 獲取方式
1. wxopenid
查看:獲取設備及用戶信息
2. OpenId
通過調用 wx.login ,獲取臨時登錄憑證憑證 code
App({ onLaunch: function { wx.login({ success: function(res) { if (res.code) { //發起網絡請求 // code: 就是登錄憑證(code) } } }); } })
前端獲取到 code 後,將 code 傳給後端,後端調用接口獲取 session_key 和 OpenId ,接口如下:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
3. UinionId
前提條件:
- 微信開放平臺帳號已完成開發者資質認證
- 微信開放平臺綁定小程序
獲取 UnionId 流程:
- 調用接口 wx.getUserInfo ,從解密數據中獲取 UnionID。註意本接口需要用戶授權,請開發者妥善處理用戶拒絕授權後的情況。
- 如果開發者帳號下存在同主體的公眾號,並且該用戶已經關註了該公眾號。開發者可以直接通過 wx.login+ code2Session 獲取到該用戶 UnionID,無須用戶再次授權。
- 如果開發者帳號下存在同主體的公眾號或移動應用,並且該用戶已經授權登錄過該公眾號或移動應用。開發者也可以直接通過 wx.login + code2Session 獲取到該用戶 UnionID ,無須用戶再次授權。
- 用戶在小程序(暫不支持小游戲)中支付完成後,開發者可以直接通過 getPaidUnionId 接口獲取該用戶的 UnionID,無需用戶授權。註意:本接口僅在用戶支付完成後的5分鐘內有效,請開發者妥善處理。
- 小程序端調用 雲函數 時,如果開發者帳號下存在同主體的公眾號,並且該用戶已經關註了該公眾號,可在雲函數中通過 cloud.getWXContext 獲取 UnionID。
- 小程序端調用 雲函數 時,如果開發者帳號下存在同主體的公眾號或移動應用,並且該用戶已經授權登錄過該公眾號或移動應用,也可在雲函數中通過 cloud.getWXContext獲取 UnionID。
本文由 @龍村後生 原創發佈於人人都是產品經理,未經許可,禁止轉載
題圖來自Unsplash, 基於 CC0 協議