1. 程式人生 > >小程式獲取unionid的坑 unionid返回為null

小程式獲取unionid的坑 unionid返回為null

同一個微信開放平臺下的相同主體的App、公眾號、小程式的unionid是相同的,這樣就可以鎖定是不是同一個使用者。微信針對不同的使用者在不同的應用下都有唯一的一個openId, 但是要想確定使用者是不是同一個使用者,就需要靠unionid來區分。

這裡注意了:要想獲取unionid就必須要繫結微信開放平臺

首先,前端呼叫wx.login的時候會返回一個code,這個code傳到後臺的時候。

後臺呼叫微信的介面(https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code)傳入 code,appid,secret去換取到openid,session_key以及unionid等資訊。

這裡就需要注意了:官方文件上說的是,如果使用者已經關注公眾號,或者曾經登入過App或公眾號,則使用者開啟小程式時,開發者可以直接通過wx.login獲取到該使用者UnionID,無須使用者再次授權。

這裡分為兩種情況

(1)用code換取的時候,返回了unionid,這樣就皆大歡喜了

(2)悲劇的情況,unionid返回為null,這時候你再去看官方文件的時候,發現有針對這種情況的方法。就是需要前端再去調wx.getUserInfo()這個介面。這時候微信會返回很多資料(詳情見微信官方文件:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html),這些資料裡面有一個

encryptedData,這個資料中就包含你需要的unionid以及其他的很多使用者資訊啦。獲取到以後將encryptedData、加密演算法的初始向量iv返回給後端,後端根據這兩個資料以及之前的session_key就可以解密出你需要的資料了。