統一微信公眾號、小程序、APP的用戶信息


 上次接手一個項目需要整合公眾號、小程序以及APP的用戶,查閱了微信文檔以及一些作者的文章,中間踩了不少坑,在此記錄一下解決的流程。

要點

 實現統一信息的有以下幾點:
 1. 在微信開放平台綁定需要統一信息的應用;
 2. 公眾號采用以snsapi_userinfo為scope發起的網頁授權,小程序使用wx.getUserInfo(Object object)授權,什么時候授權后面會解釋;
 3. 數據庫保存unionid。

具體實現

 解釋下上面的第二點為什么一定要采用scope=snsapi_userinfo的方式,根據微信文檔:微信網頁授權使用這種方式可以跳過關注公眾號獲取該用戶的基本信息,前提是用戶同意授權,這里的授權只會授權一次,以后就不需要授權了。使用這種方式獲取用戶信息的時候,必須使用拉取用戶信息接口,使用獲取用戶基本信息(UnionID機制)接口雖然可以拿到用戶信息,但是用戶未關注是拿不到任何信息的。

微信code獲取

 這一步由對應的應用調用微信api獲取微信的臨時code。注意公眾號不同於移動應用,公眾號獲取code的方式必須采用要點中的第二點方式;因為獲取code的接口中包含appid,一般由后台處理加密之后給h5使用,后台處理的時候scope一定要為snsapi_userinfo。

通過code獲取用戶基本信息

 不同應用調用不同的微信api獲取用戶信息就行了,所有應用都保證可以獲取到unionid,上次就在公眾號獲取uniond為空踩坑。

公眾號、APP處理:

 1. 通過unionid查詢數據庫;
 2. 如果數據為空,則通過openid查詢用戶信息(這里是兼容以前沒有unionid的用戶);
 3. 如果數據仍為空,則新增用戶數據,不為空就返回。

小程序處理:

 為什么要單獨提出小程序的處理,因為小程序登錄時分為兩部進行:
 1. 前端:使用wx.login()調用后台登錄方法,如果存在用戶數據就返回前端;
 2. 后台:不存在用戶則保存臨時生成的信息到redis,這里我使用uuid生成的用戶code,保存的信息為微信返回的sessionKey,這個是不能給前端的;
 3. 前端:使用wx.getUserInfo(Object object)授權,調用后台綁定用戶信息的接口(另一個接口),這里注意要對encryptedData進行UTF-8的解碼,不然解析不了用戶信息,使用微信的解密方法就可以獲取到用戶基本信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM