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

来源:https://www.cnblogs.com/winkin/archive/2018/10/08/9719804.html
-Advertisement-
Play Games

 上次接手一個項目需要整合公眾號、小程式以及APP的用戶,查閱了微信文檔以及一些作者的文章,中間踩了不少坑,在此記錄一下解決的流程。 要點  實現統一信息的有以下幾點:  1. 在微信開放平臺綁定需要統一信息的應用;  2. 公眾號採用以snsapi_user ...


 上次接手一個項目需要整合公眾號、小程式以及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的解碼,不然解析不了用戶信息,使用微信的解密方法就可以獲取到用戶基本信息。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線上學習: [撩課-JavaWeb系列1之基礎語法-前端基礎][撩課-JavaWeb系列2之XML][撩課-JavaWeb系列3之MySQL][撩課-JavaWeb系列4之JDBC][撩課-JavaWeb系列5之web伺服器-idea] 一、字元集的由來 二、ASSCII 三、unicode 四、U ...
  • 有很多種,比如: 1、通過@RequestParam註解接收請求參數; 2、通過Bean封裝,接收多個請求參數 3、通過@ModelAttribute綁定接收前端表單數據 4、通過@PathVariable獲取URL中某段可變值; 5、通過@RequestBody接收請求體中的數據 6、通過@Req ...
  • 本次 Cicada 已經更新到了 v1.0.3。 主要是解決了兩個 issue,#9(Boss線程數好像設置有誤 ) #8(怎麼返回純字元串內容不要JSON格式?)。 ...
  • P1049 譚浩強C語言(第三版)習題6.5 java import java.util. ; import java.io. ; import java.math.BigInteger; import java.lang.Character; public class Main { public ...
  • 結對編程項目在歡快的國慶假期中也順利結束了。從最初拿到結對編程項目的思考,再到一步一步實現,中間經歷了一個漫長的過程。在我和隊友的多次協商下,最終我們還是選擇使用基於python來實現這一次結對編程項目,並且最終選擇了以eric6 + pyqt5 +Anaconda3以及pycharm混搭的開發環境 ...
  • 如果你之前從來沒有使用過面向對象編程語言,那麼在學習Java之前需要先理解幾個有關面向對象編程的基本概念。這篇教程將會向你介紹對象、類、集成、介面和包的概念,以及這些概念是如何與現實世界相關聯,並介紹這些概念在Java語言中的體現。 ...
  • socket API 調用後的錯誤判斷 perror errno 調用完socket API後,需要判斷調用是否成功與失敗。如果失敗,會自動設置errno(是個整數), 並且用perror可以列印出具體的錯誤信息。 註意點: 1,如果有多個socket API調用失敗,errno存放的是最後一個失敗 ...
  • 在考慮一個結果的概率時候,要考慮眾多的屬性,貝葉斯演算法利用所有可能的數據來進行修正預測,如果大量的特征產生的影響較小,放在一起,組合的影響較大,適合於朴素貝葉斯分類 導入類庫 代碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...