首先介紹下UnionID的作用,在注冊了微信開放平台(注意,這里是開放平台,不是微信公眾平台)之后,同一個微信號在這個開放平台下的項目上面的UnionID都是統一的,通俗的說就是,小程序跟公眾號項目在綁定了同一個開放平台之后對於一個微信號會公用一個UnionID,(PS openid 在小程序跟公眾號項目里面肯定是不同的),這是為了方便公眾號以及小程序項目用戶的共用,同樣app的用戶使用微信登錄也會獲取到同樣的UnionID,只要這些都是在一個開放平台之上就可以實現
介紹完UnionID的作用之后,下面談一下如何獲取
1)公眾號項目獲取UnionID
公眾號獲取相對來說簡單一點,通過openid以及access_token來獲取UnionID,
官方鏈接 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839
對於前端來說,openid以及acess_token這兩個參數都是后台來獲取的,所以公眾號獲取UnionID 十分簡單
2)小程序獲取UnionID
小程序對於獲取UnionID的文檔不是很清晰,或者說是官方文檔的表述不清晰以及部分地方存在錯誤
在查閱文檔以及綜合實踐過后總結如下
兩種獲取方式
1)wx.login
調用wx.login 來獲取到臨時登陸憑證,通過下面的接口來獲取到UnionID
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
這種方法有前提條件,開發者賬號下存在同主體的公眾號,並且用戶關注了這個公眾號,可以不用授權就能獲取到UnionID
2)wx.getUserInfo
調用wx.getUserInfo來獲取到用戶的頭像等基本信息,以及解密UnionID的敏感信息,
這里有一點 官方文檔里面提到 wx.getUserInfo方法的參數withCredentials 為 true 時,要求此前有調用過 wx.login 且登錄態尚未過期,此時返回的數據會包含 encryptedData, iv 等敏感信息;當 withCredentials 為 false 時,不要求有登錄態,返回的數據不
包含 encryptedData, iv 等敏感信息。
改參數默認值為true,並且經過驗證,不需要之前調用過wx.login就可以獲取到解密UnionID的敏感信息(但是后台需要用到wx.login返回的code來獲取一個session_key)
這種方法需要用戶第一次點擊授權,用戶選擇確認授權才會獲取到用戶的基本信息以及解密UnionID的敏感信息,之后不需要再次授權,
獲取到解密UnionID的敏感信息之后,需要將這些信息發送到后台,由后台進行UnionID的解密工作
這種方法不需要用戶關注公眾號