1. 程式人生 > 其它 >2021-10-20 小程式獲取使用者unionid 以及登入流程圖

2021-10-20 小程式獲取使用者unionid 以及登入流程圖

unionid 機制說明:

同一使用者,對同一個微信開發平臺下的不同應用,unionid是相同的。

同一個微信開發平臺下的相同主體的 app, 公眾號,小程式。如果使用者已經關注過公眾號,或者曾經登入過app或者公眾號,則使用者開啟小程式時,可以通過
wx.login 獲取到該使用者 unionid,無須使用者再次授權。

注意:如果使用者沒有登入過app,公眾號,也沒有關注過公眾號的情況下,通過 wx.login 是獲取不到 unionid 的。


// 第一種情況,在登入小程式之前,此使用者已經關注過公眾號,登入過公眾號,已經使用微信登入的方式登入過app。此時使用者只需要通過2步就可以獲取到
// unionid 了。 第一步: 獲取 code (用code來換取openid,session_key等) let that = this; wx.login({ success: function(res){ if(res.code){ that.getUserInfo(res.code); }else{ console.log('獲取使用者登入失敗') } } }) 第二步:獲取使用者資訊(利用 wx.login 返回的code獲取使用者的資訊) getUserInfo:
function(code){ wx.request({ url:'//後端介面', method:'POST', data:{ code: code, // 傳的引數(後端通過code去呼叫微信的介面 - jscode2session) // https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE& // grant_type=authorization_code
// 傳入引數code,appid,appsecret後獲取到微信返回的unionid,openid,session_key等 }, success:function(res){ // 可以返回前端需要的使用者資訊(包括 unionid, openid, user_id 等) } }) } 第二種情況: 即是:第一次登入該小程式,通過 wx.login 傳入的code是獲取不到unionid以及openid等資訊。 解決方法: 第一步:獲取code(用來換取openid以及session_key等) let that = this; wx.login({ success:function(res){ if(res.code){ that.getEncData(res.code); }else{ // 登入失敗 } } }) 第二步: 獲取加密資料和加密演算法初始向量 getEncData:function(code){ wx.getUserInfo({ withCredentials: true, // 為true時,此時返回的資料中包含iv,encryptedData等敏感資訊,反之則沒有。 success:function(res){ that.getUserInfo(code, res.encryptedData, res.iv) } }) } 第三步: 獲取使用者資訊(利用wx.login返回的code獲取使用者的資訊) getUserInfo:function(code, enc, iv){ wx.request({ url:'//後端登入介面', method:'POST', data:{ code:code, encryptedData:enc, iv:iv }, success:function(res){ // 可以獲取到使用者資訊(包括 unionid, openid, user_id等) } }) } // 總結: 第一種: 前端判斷是否有 unionid。 前端在向後端上傳 code 並且後端返回資料以後,前端判斷返回值中是否有 unionid 或者 unionid 為null。 null的情況下去呼叫帶有使用者登入狀態的wx.getUserInfo介面,然後將返回的 encryptedData 和 iv 敏感資料傳給後端,後端解密出相應的資料再 返回給前端。 第二種: 後端判斷是否有 unionid。 前端在呼叫帶有登入狀態的 wx.getUserInfo 介面,然後把此介面返回的 encryptedData 和 iv 敏感資料傳給 後端,後端在拿到前端code之後去請求微信的介面拿 unionid,如果返回的 unionid 為空,再拿前端傳的 encryptedData 和 iv以及之前的 session_key 解密出 unionid 。

小程式登入流程:

參考連結:

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html - 微信官網

https://developers.weixin.qq.com/community/develop/article/doc/000ee05d9f8cc8ce35194b7cb5b413

https://www.cnblogs.com/yaoyuqian/p/8203792.html

如果快樂太難,那祝你平安。