微信體系生態(tài)圈開(kāi)發(fā),離不開(kāi)UnionId、OpenId,今天帶大家一起深入了解下 UnionId、OpenId 是什么,如何獲取

OpenId是什么?
OpenId?是一個(gè)用戶對(duì)于一個(gè)小程序/公眾號(hào)的標(biāo)識(shí),開(kāi)發(fā)者可以通過(guò)這個(gè)標(biāo)識(shí)識(shí)別出用戶。類似?wxopenid,同一個(gè)人,使用不同的小程序,會(huì)留下不同的小程序?OpenId?。獲取小程序?OpenId?無(wú)需用戶操作和授權(quán)。
UnionId是什么?
UnionId?是一個(gè)用戶對(duì)于同主體微信小程序/公眾號(hào)/APP的標(biāo)識(shí),開(kāi)發(fā)者需要在微信開(kāi)放平臺(tái)下綁定相同賬號(hào)的主體。開(kāi)發(fā)者可通過(guò)?UnionId,實(shí)現(xiàn)多個(gè)小程序、公眾號(hào)、甚至APP 之間的數(shù)據(jù)互通。
正常情況下,微信生態(tài)中,UnionId?是用戶身份的唯一標(biāo)識(shí),(如果業(yè)務(wù)涉及不同主體,不一定)。
所以,如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(hào)(包括小程序),可通過(guò)?UnionId?來(lái)區(qū)分用戶的唯一性。
OpenId 如何獲取?
通過(guò)調(diào)用?wx.login()?,獲取臨時(shí)登錄憑證憑證 code
App({
onLaunch: function() {
wx.login({
success: function(res) {
if (res.code) {
//發(fā)起網(wǎng)絡(luò)請(qǐng)求
// 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
?UinionId 如何獲取?
前提條件:
- 微信開(kāi)放平臺(tái)帳號(hào)已完成開(kāi)發(fā)者資質(zhì)認(rèn)證
- 微信開(kāi)放平臺(tái)綁定小程序
獲取 UnionId 流程:
- 調(diào)用接口??wx.getUserInfo?,從解密數(shù)據(jù)中獲取 UnionID。注意本接口需要用戶授權(quán),請(qǐng)開(kāi)發(fā)者妥善處理用戶拒絕授權(quán)后的情況。
- 如果開(kāi)發(fā)者帳號(hào)下存在同主體的公眾號(hào),并且該用戶已經(jīng)關(guān)注了該公眾號(hào)。開(kāi)發(fā)者可以直接通過(guò)??wx.login? +?code2Session?獲取到該用戶 UnionID,無(wú)須用戶再次授權(quán)。
- 如果開(kāi)發(fā)者帳號(hào)下存在同主體的公眾號(hào)或移動(dòng)應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過(guò)該公眾號(hào)或移動(dòng)應(yīng)用。開(kāi)發(fā)者也可以直接通過(guò) wx.login +?code2Session?獲取到該用戶 UnionID ,無(wú)須用戶再次授權(quán)。
- 用戶在小程序(暫不支持小游戲)中支付完成后,開(kāi)發(fā)者可以直接通過(guò)?getPaidUnionId?接口獲取該用戶的 UnionID,無(wú)需用戶授權(quán)。注意:本接口僅在用戶支付完成后的5分鐘內(nèi)有效,請(qǐng)開(kāi)發(fā)者妥善處理。
- 小程序端調(diào)用?云函數(shù)?時(shí),如果開(kāi)發(fā)者帳號(hào)下存在同主體的公眾號(hào),并且該用戶已經(jīng)關(guān)注了該公眾號(hào),可在云函數(shù)中通過(guò) cloud.getWXContext 獲取 UnionID。
- 小程序端調(diào)用?云函數(shù)?時(shí),如果開(kāi)發(fā)者帳號(hào)下存在同主體的公眾號(hào)或移動(dòng)應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過(guò)該公眾號(hào)或移動(dòng)應(yīng)用,也可在云函數(shù)中通過(guò)??cloud.getWXContext? 獲取 UnionID。
UnionId和OpenId的關(guān)系
一個(gè)人,在同主體的小程序、公眾號(hào)等下面只有 1 個(gè) UnionId,有多個(gè) wxopenid 和多個(gè)小程序OpenId 。
UnionId是同主體應(yīng)用下唯一身份證,可以查詢對(duì)應(yīng)的wxopenid和小程序OpenId。因此,UnionId 的覆蓋率是最高的。當(dāng)用戶關(guān)注公眾號(hào)、逛公眾號(hào)下面H5時(shí),可以同時(shí)獲取 UnionId、wxopenid。而逛小程序時(shí),可以同時(shí)獲取小程序 UnionId、openid。不管逛哪都能拿到 UnionId。
在單個(gè)小程序或公眾號(hào)里,OpenId 是唯一的。當(dāng)同一個(gè)小程序主體下有多個(gè)小程序時(shí),每個(gè)小程序有自己的 OpenId,因此需要 UnionId 進(jìn)行唯一身份標(biāo)識(shí),即:UnionId 是同個(gè)主體下不同小程序的用戶唯一標(biāo)識(shí)
?
本文來(lái)自投稿,如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.quxiaomian.com/blog/715.html