公司業務開展,最近完成了一個微信小程序的開發。場景是這樣:同一微信開放平臺下擁有相同主體的APP和微信小程序來完成一樣的業務,用戶進入app或者微信小程序時必須獲取用戶的unionid來確認當前的用戶身份,完成登陸。小程序「獲取用戶信息」api(getUserInfo)的調用方式和以前相比有了較大更新,優雅的實現用戶受權和登陸很是重要,如下是我在微信小程序受權登陸相關流程在開發時候的實現思路和總結,分享以下。html
說明:ajax
在關注者與公衆號產生消息交互後,公衆號可得到關注者的OpenID(加密後的微信號,每一個用戶對每一個公衆號的OpenID是惟一的。對於不一樣公衆號,同一用戶的openid不一樣)。—— 微信公衆平臺開發者文檔
你能夠簡單的理解爲小程序
openid = hash(uid + app_id)
若是開發者擁有多個移動應用、網站應用、和公衆賬號(包括小程序),可經過unionid來區分用戶的惟一性,由於只要是同一個微信開放平臺賬號下的移動應用、網站應用和公衆賬號(包括小程序),用戶的unionid是惟一的。換句話說,同一用戶,對同一個微信開放平臺下的不一樣應用,unionid是相同的。 UnionID機制說明
若是開發者在多個移動應用、網站應用和公衆賬號之間有統一用戶帳號的需求,須要前往微信開放平臺(open.weixin.qq.com)綁定公衆號後,即可利用UnionID機制來知足上述需求。後端
用戶在開放平臺的惟一標識符微信小程序
你能夠簡單的理解爲:api
unionid = hash(uid + 開放平臺id)
總結下
微信針對不一樣的用戶在不一樣的應用下都有惟一的一個openId, 可是要想肯定用戶是否是同一個用戶,就須要靠unionid來區分。通常本身的後臺都會有本身的一個用戶表,每一個用戶有不一樣的userid。也就是說同一個用戶在同一個微信開放平臺下的相同主體的應用對應着相同的userid,unionid以及不一樣的openid。因此在用戶登陸進來的時候,咱們只能靠微信返回給咱們的unionid去判斷是否是同一個用戶,在去關聯咱們的用戶表,拿到對應的userid。服務器
綁定了開發者賬號的小程序,能夠經過下面3種途徑獲取UnionID。微信
當用戶知足條件2和3時,開發者能夠直接經過wx.login獲取到該用戶的unionid, 不然必須調用接口wx.getUserInfo
,額外須要注意的事就是妥善處理用戶拒絕受權的狀況。session
使用 wx.getSetting 獲取用戶的受權狀況app
在真實的業務場景中,咱們但願,用戶進入小程序時,未登陸狀況下能夠正常瀏覽商品,對小程序有個基本的認知,不要直接彈出框要求用戶受權,不然會干擾用戶,致使新用戶的流失,當用戶須要使用一些高級功能和場景,這個時候再去要求用戶受權,這樣用戶受權的概率會大大提升。
將登陸的邏輯封裝ajax
流程:
封裝的意義
再也不關注當前接口是否須要登陸,用戶是否已受權,全部請求直接調用ajax()
,在必要的時候完成一切登陸以及受權流程。小程序入口頁面增長,業務拓展的時候,你只須要專一於業務實現。