微信官方的定義:若是開發者擁有多個移動應用、網站應用、和公衆賬號(包括小程序),可經過 UnionID 來區分用戶的惟一性,由於只要是同一個微信開放平臺賬號下的移動應用、網站應用和公衆賬號(包括小程序),用戶的 UnionID 是惟一的。換句話說,同一用戶,對同一個微信開放平臺下的不一樣應用,unionid是相同的。html
簡單來講,是開放平臺中對用戶身份的惟一標識。可先閱讀《微信開發中OpenID 和 UnionID的區別》進行了解。前端
綁定了開發者賬號的小程序,能夠經過如下途徑獲取 UnionID。web
wx.getUserInfo
,從解密數據中獲取 UnionID。注意本接口須要用戶受權,請開發者妥善處理用戶拒絕受權後的狀況。wx.login
+ code2Session
獲取到該用戶 UnionID,無須用戶再次受權。wx.login
+ code2Session
獲取到該用戶 UnionID ,無須用戶再次受權。getPaidUnionId
接口獲取該用戶的 UnionID,無需用戶受權。注意:本接口僅在用戶支付完成後的5分鐘內有效,請開發者妥善處理。如下將針對第一種方式 —— 從 wx.getUserInfo 的解密數據中獲取 UnionID 的方案,設計小程序在業務上的登陸流程小程序
如圖所示微信小程序
調用 wx.login 接口,獲得 code ( 注意 code 只能使用一次,且有效期五分鐘 )api
經過 <button>
組件定義用戶受權框,待用戶點擊時,彈出受權框前端框架
在用戶贊成受權的狀況下,執行如下流程函數微信
3.1 從新執行 wx.login 獲得 code。(爲何要從新執行呢?下面講)微信開發
3.2 執行 wx.getUserInfo 接口,獲得用戶的基礎數據以及一些加密數據 ( 在已獲得用戶贊成受權的狀況下,該接口將直接返回用戶的數據 )框架
將相關數據傳給後臺,後臺解密獲得 UnionID
詳細流程請看下圖
上面留了一個小疑問。
爲何在用戶贊成受權的狀況下,要從新執行 wx.login,從新走一次獲取數據的流程呢?
結合如下兩點說明:
細心的讀者應該發現, code 是一個極其奇妙的字段
經過<button>
觸發的彈出受權框,在等待用戶受權的時間裏,不能保證是否會超過5分鐘(這裏不能假設用戶都是立刻進行響應的,有可能恰好接個電話什麼的,就開始煲電話粥了,煲完以後再點擊受權,🤣🤣🤣)
結合上述兩點,爲防止用戶操做超時,所以在用戶贊成受權的狀況下,從新再走一次 login 和 getUserInfo 的流程。
因爲有大量的場景須要使用到UnionID,此方案是以獲取 UnionID 爲重點的方案。
若是不須要使用到 UnionID 的話,僅僅使用 OpenID ,整個流程能夠簡化許多。
與此同時,在系統設計用戶受權的狀況下,儘量讓用戶在拒絕受權的狀況下,也能夠參與或瀏覽該產品,不然會很容易由於一個硬性的受權邏輯而提升了用戶使用的門檻,避免所以致使用戶量不高的問題。
若是你也在優化或研究小程序的登陸模塊,歡迎和咱們一塊兒交流~
做者簡介:土撥鼠,蘆葦科技web前端開發工程師,表明做品:飛花亭小程序、續航基因、YY表情紅包、YY疊方塊直播競賽小遊戲。擅長網站建設、公衆號開發、微信小程序開發、小遊戲、公衆號開發,專一於前端框架、服務端渲染、SEO技術、交互設計、圖像繪製、數據分析等研究,有興趣的小夥伴來撩撩咱們~ web@talkmoney.cn
訪問 www.talkmoney.cn 瞭解更多