背景
最近做了一個有意思的功能《官網(wǎng)內(nèi)容訂閱》,用戶在官網(wǎng)掃碼后可以訂閱官網(wǎng)欄目,訂閱欄目后發(fā)送模版消息提醒用戶訂閱成功,模版消息關(guān)聯(lián)了小程序,然后做了一個小程序來管理用戶訂閱的欄目,小程序提供訂閱和新聞列表閱讀功能。
實現(xiàn)技術(shù)調(diào)研分析
通過背景描述我們知道需要實現(xiàn)兩塊登錄:
1、官網(wǎng)掃碼二維碼登錄;
2、用戶直接進小程序?qū)崿F(xiàn)登錄。
要實現(xiàn)兩塊登錄且要求用戶從任意一個入口登錄都需要確定為同一個用戶,所以需要打通公眾號與小程序的用戶數(shù)據(jù)。幸運的是微信公眾平臺提供了unionid機制:
如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(包括小程序),可通過unionid來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的unionid是唯一的。換句話說,同一用戶,對同一個微信開放平臺下的不同應(yīng)用,unionid是相同的。
因此,第一步需要申請微信開放平臺的開發(fā)者資質(zhì),成為開發(fā)者資質(zhì)之后,可以在微信開放平臺綁定需要打通數(shù)據(jù)的公眾號和小程序,讓他們擁有相同的unionid,那么接下來的工作就是實現(xiàn)掃碼登錄與小程序登錄后數(shù)據(jù)互通。
掃碼登錄實現(xiàn)
用戶掃碼登錄狀態(tài)時序圖,用戶在瀏覽游戲官網(wǎng)時發(fā)現(xiàn)自己喜歡的欄目,
1. 用戶點擊點閱欄目時;
2. 瀏覽器將請求微管家服務(wù)器獲取二維碼,同時輪詢服務(wù)器用戶的掃碼狀態(tài)
3. 微管家服務(wù)器通過前端給的網(wǎng)站域名查詢對應(yīng)的公眾號信息
4. 微管家服務(wù)器去微信后臺請求場景值二維碼
5. 微信服務(wù)器返回場景碼給為瀏覽器
6. 瀏覽器展示給用戶二維碼
7. 瀏覽器一直在輪詢用戶掃碼狀態(tài)
8. 用戶掃碼二維碼后,用戶手機瀏覽器(通常是微信內(nèi)置瀏覽器)發(fā)送二維碼請求到服務(wù)器
9. 服務(wù)器會獲取用戶的個人信息,
10. 并將用戶信息和掃碼狀態(tài)告知瀏覽器,同時種下瀏覽器cookie
此時相當(dāng)面用戶已經(jīng)用微信登錄且獲取微信昵稱和頭像信息,用戶可以去訂閱其他欄目。
具體流程請參考下圖。需要注意的時候用戶掃碼登錄之后,要使用用戶的unionid作為用戶的唯一標(biāo)識,方便下一步關(guān)聯(lián)的小程序登錄。
小程序登錄實現(xiàn)
小程序登錄請查考小程序官網(wǎng)文檔,需要注意兩個點:
1、維護用戶的登錄狀態(tài);
2、用戶同意登錄授權(quán)后需要獲取用戶個加密個人信息(unionid)。
第一步的用戶登錄狀態(tài)維護時序圖如下,第二步非常重要,在用戶授權(quán)同時請求第三方服務(wù)器來進行登錄獲取session時,需要將用戶的encryptedData數(shù)據(jù)數(shù)據(jù)傳回第三方服務(wù)器,解密出用戶unionid,通過服務(wù)器配置的小程序與公眾號關(guān)聯(lián)關(guān)系,同步用戶數(shù)據(jù)。
總結(jié)
通過上面兩步登錄設(shè)計開發(fā)即可打通該功能的兩種用戶數(shù)據(jù),然后可以根據(jù)用戶訂閱掃碼情況發(fā)送模版消息直接打開小程序,用戶在pc瀏覽器頁面所訂閱的欄目與小程序的訂閱數(shù)據(jù)一致。 這里面的關(guān)鍵點就是用戶unionid機制,通過該機制可以打通多個公眾號、小程序之間的用戶數(shù)據(jù),上面的案例只是一個小小的應(yīng)用場景,還有更多的想象空間,結(jié)合場景值二維碼和模版消息的應(yīng)用,收集用戶信息與用戶行文,后期可以考慮對用戶提供精準(zhǔn)的推送服務(wù)。
原文鏈接: https://blog.csdn.net/zhu2mu/article/details/73176551