最近作了一個有意思的功能《官網內容訂閱》,用戶在官網掃碼後能夠訂閱官網欄目,訂閱欄目後發送模版消息提醒用戶訂閱成功,模版消息關聯了小程序,而後作了一個小程序來管理用戶訂閱的欄目,小程序提供訂閱和新聞列表閱讀功能。html
經過背景描述咱們知道須要實現兩塊登陸:一、官網掃碼二維碼登陸;二、用戶直接進小程序實現登陸。要實現兩塊登陸且要求用戶從任意一個入口登陸都須要肯定爲同一個用戶,因此須要打通公衆號與小程序的用戶數據。幸運的是微信公衆平臺提供了unionid機制:前端
若是開發者擁有多個移動應用、網站應用、和公衆賬號(包括小程序),可經過unionid來區分用戶的惟一性,由於只要是同一個微信開放平臺賬號下的移動應用、網站應用和公衆賬號(包括小程序),用戶的unionid是惟一的。換句話說,同一用戶,對同一個微信開放平臺下的不一樣應用,unionid是相同的。 小程序
所以,第一步須要申請微信開放平臺的開發者資質,成爲開發者資質以後,能夠在微信開放平臺綁定須要打通數據的公衆號和小程序,讓他們擁有相同的unionid,那麼接下來的工做就是實現掃碼登陸與小程序登陸後數據互通。api
用戶掃碼登陸狀態時序圖,用戶在瀏覽遊戲官網時發現本身喜歡的欄目,點擊點閱欄目時,瀏覽器將請求微管家服務器獲取二維碼,同時輪詢服務器用戶的掃碼狀態,第三方服務器經過前端給的網站域名查詢對應的公衆號信息,去微信後臺請求場景值二維碼,並返回給瀏覽器, 瀏覽器展現給用戶二維碼,用戶掃碼二維碼後,服務器會獲取用戶的我的信息,並將用戶信息和掃碼狀態告知瀏覽器(瀏覽器一直在輪詢用戶掃碼狀態),同時種下瀏覽器cookie,此時至關面用戶已經用微信登陸且獲取微信暱稱和頭像信息,用戶能夠去訂閱其餘欄目。具體流程請參考下圖。須要注意的時候用戶掃碼登陸以後,要使用用戶的unionid做爲用戶的惟一標識,方便下一步關聯的小程序登陸。瀏覽器
小程序登陸請查考小程序官網文檔,須要注意兩個點:一、維護用戶的登陸狀態;二、用戶贊成登陸受權後須要獲取用戶個加密我的信息(unionid)。第一步的用戶登陸狀態維護時序圖以下,第二步很是重要,在用戶受權同時請求第三方服務器來進行登陸獲取session時,須要將用戶的encryptedData數據數據傳回第三方服務器,解密出用戶unionid,經過服務器配置的小程序與公衆號關聯關係,同步用戶數據。服務器
經過上面兩步登陸設計開發便可打通該功能的兩種用戶數據,而後能夠根據用戶訂閱掃碼狀況發送模版消息直接打開小程序,用戶在pc瀏覽器頁面所訂閱的欄目與小程序的訂閱數據一致。 這裏面的關鍵點就是用戶unionid機制,經過該機制能夠打通多個公衆號、小程序之間的用戶數據,上面的案例只是一個小小的應用場景,還有更多的想象空間,結合場景值二維碼和模版消息的應用,收集用戶信息與用戶行文,後期能夠考慮對用戶提供精準的推送服務。微信