【開發日記】SpringBoot 實現支持多個微信小程序的登錄

在實際業務場景中,需要一個后臺同時支持多個微信小程序的登錄。例如,企業有多個不同業務的小程序,但希望統一在同一個后臺系統里進行用戶認證和數據處理。這時候,我們就需要一個靈活的方式來管理多個小程序的 appidsecret,并根據前端傳遞的 appidcode 獲取對應的 openid 實現登錄。

本文將基于 weixin-java-miniapp SDK 實現一個通用的多小程序登錄模塊。

一、依賴引入

pom.xml 中加入微信小程序 SDK 依賴:

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>4.7.7-20250808.182223</version>
</dependency>

二、配置文件

通過 application.yml 配置多個小程序的 appidsecret,提供給后續動態獲取。

wx:miniapp:configs:- appid: wxxxxxxxxxxxxxxxxxxsecret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx- appid: wyyyyyyyyyyyyyyyyyysecret: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

三、屬性類

定義配置屬性類,讀取配置文件中多個小程序的信息:

@Data
@Component
@ConfigurationProperties(prefix = "wx.miniapp")
public class WxMiniAppProperties {private List<Config> configs;@Datapublic static class Config {private String appid;private String secret;}
}

這樣就能自動綁定 application.yml 中的配置到 WxMiniAppProperties

四、服務工廠類

編寫一個工廠類 WxMiniAppServiceFactory,用來存儲和獲取 WxMaService 實例。
每個小程序對應一個 WxMaService,通過 appid 來區分。

后臺可以根據傳入的 appid 動態選擇對應的 WxMaService

@Component
public class WxMiniAppServiceFactory {private final Map<String, WxMaService> services = new HashMap<>();public WxMiniAppServiceFactory(WxMiniAppProperties properties) {for (WxMiniAppProperties.Config config : properties.getConfigs()) {WxMaDefaultConfigImpl wxConfig = new WxMaDefaultConfigImpl();wxConfig.setAppid(config.getAppid());wxConfig.setSecret(config.getSecret());WxMaService wxService = new WxMaServiceImpl();wxService.setWxMaConfig(wxConfig);services.put(config.getAppid(), wxService);}}public WxMaService getWxMaService(String appid) {WxMaService service = services.get(appid);if (service == null) {throw new IllegalArgumentException("未找到對應appid的配置: " + appid);}return service;}
}

五、登錄邏輯

定義登錄服務,根據前端傳遞的 appidcode 獲取用戶 openid

@Service
public class WxMiniAppLoginService {private final WxMiniAppServiceFactory serviceFactory;public WxMiniAppLoginService(WxMiniAppServiceFactory serviceFactory) {this.serviceFactory = serviceFactory;}public String getOpenId(String appid, String code) throws Exception {WxMaService wxService = serviceFactory.getWxMaService(appid);WxMaJscode2SessionResult session = wxService.jsCode2SessionInfo(code);return session.getOpenid();}
}

調用時,只需要傳入 appid 和前端 wx.login 獲取的 code,就能拿到用戶的唯一標識 openid

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94303.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 容器(一)

Docker一、Docker是什么1.什么是Docker2.Docker特點3.比較虛擬機和容器二、Docker安裝1.Docker??三大核心組件??2.安裝步驟&#xff08;Ubuntu&#xff09;3.阿里云鏡像加速三、Docker鏡像1.什么是鏡像2.UnionFS&#xff08;聯合文件系統&#xff09;3.Docker鏡像加載原理4…

容器安全實踐(二):實踐篇 - 從 `Dockerfile` 到 Pod 的權限深耕

在上一篇《容器安全實踐&#xff08;一&#xff09;&#xff1a;概念篇》中&#xff0c;我們深入探討了容器安全的底層原理&#xff0c;并糾正了“容器天生安全”的誤解。我們了解了 root 用戶的雙重身份&#xff0c;以及特權容器的危險性。 然而&#xff0c;僅僅了解這些概念…

c#_數據持久化

數據持久化架構 數據是應用程序的命脈。持久化架構的選擇直接決定了應用的性能、可擴展性、復雜度和維護成本。本章將深入探討.NET生態中主流的數據訪問模式、工具和策略&#xff0c;幫助你為你的系統做出最明智的數據決策。5.1 ORM之爭&#xff1a;Entity Framework Core深度剖…

996引擎-骰子功能

996引擎-骰子功能 測試NPC QF回調函數 結果 參考資料 在測試NPC播放骰子動畫。 播放前需要先設置骰子點數 測試NPC [[骰子的顯示順序和點數 對應 私人變量 D0 D1 D2 D3 D4 D5]] -- NPC入口函數 function main(player)-- 骰子共6個,設置骰子點數后,再執行搖骰子,否則沒動畫…

Vue 3多語言應用開發實戰:vue-i18n深度解析與最佳實踐

&#x1f4d6; 概述 Vue 3 國際化&#xff08;i18n&#xff09;是構建多語言應用的核心需求。本文檔介紹 Vue 3 中實現國際化的主流方案&#xff0c;包括 vue-i18n、Vite 插件方案和自定義解決方案。 &#x1f3af; 主流方案對比 方案優點缺點適用場景vue-i18n功能完整、生態成…

港口船舶流量統計準確率↑27%!陌訊多模態融合算法實戰解析

一、行業痛點&#xff1a;港口船舶流量統計的三大核心難題智慧港口建設中&#xff0c;船舶流量統計是泊位調度、航道管理與安全預警的核心數據支撐&#xff0c;但傳統方案受場景特性限制&#xff0c;長期存在難以解決的技術瓶頸。據《2023 年中國港口智能化發展報告》顯示&…

Shell腳本的基礎知識學習

Shell 腳本是 Linux/Unix 系統的核心自動化工具&#xff0c;能夠完成以下任務&#xff1a; &#xff08;1&#xff09;批量操作&#xff1a;一鍵安裝軟件、批量處理文件&#xff08;重命名、壓縮、備份等&#xff09;。 &#xff08;2&#xff09;系統管理&#xff1a;監控資源…

k8s部署,pod管理,控制器,微服務,集群儲存,集群網絡及調度,集群認證

k8s部署 k8s中容器的管理方式 ? Kubernetes集群創建方式 centainerd 默認情況下&#xff0c;K8S在創建集群時使用的方式 docker docker使用的普記錄最高&#xff0c;雖然K8S在1.24版本后已經費力了kubelet對docker的支持&#xff0c;但時可以借助cri-docker方式來實現集…

JAVA限流方法

在 Java 項目中限制短時間內的頻繁訪問&#xff08;即接口限流&#xff09;&#xff0c;是保護系統資源、防止惡意攻擊或高頻請求導致過載的重要手段。常見實現方案可分為單機限流和分布式限流&#xff0c;以下是具體實現方式&#xff1a;一、核心限流算法無論哪種方案&#xf…

性能比拼: .NET (C#) vs. Fiber (Go)

本內容是對知名性能評測博主 Anton Putra .NET (C#) vs. Fiber (Go): Performance (Latency - Throughput - Saturation - Availability) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本視頻中&#xff0c;我們將對比 C# 與 .NET 框架和 Golang 的表現。在第一個…

信譽代幣的發行和管理機制是怎樣的?

信譽代幣的發行與管理機制是區塊鏈技術與經濟模型深度融合的產物&#xff0c;其核心在于通過代碼和社區共識構建可量化、可驗證的信任體系。以下從技術架構、經濟模型、治理機制三個維度展開分析&#xff0c;并結合具體案例說明&#xff1a;一、發行機制&#xff1a;行為即價值…

神經網絡|(十二)概率論基礎知識-先驗/后驗/似然概率基本概念

【1】引言 前序學習進程中&#xff0c;對貝葉斯公式曾經有相當粗糙的回歸&#xff0c;實際上如果我們看教科書或者網頁&#xff0c;在講貝葉斯公式的時候&#xff0c;會有幾個名詞反復轟炸&#xff1a;先驗概率、后驗概率、似然概率。 今天就來把它們解讀一下&#xff0c;為以…

使用UE5開發《紅色警戒3》類戰略養成游戲的硬件配置指南

從零開始&#xff0c;學習 虛幻引擎5&#xff08;UE5&#xff09;&#xff0c;開始游戲開發之旅&#xff01;本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01;開發類似《紅色警戒3》級別的戰略養成游戲&#xff0c;其硬件需求遠超普通2D或小型3D項目——這類游戲…

Vue2+Vue3前端開發_Day12-Day14_大事件管理系統

參考課程: 【黑馬程序員 Vue2Vue3基礎入門到實戰項目】 [https://www.bilibili.com/video/BV1HV4y1a7n4] ZZHow(ZZHow1024) 項目收獲 Vue3 composition APIPinia / Pinia 持久化處理Element Plus&#xff08;表單校驗&#xff0c;表格處理&#xff0c;組件封裝&#xff09…

[ACTF新生賽2020]明文攻擊

BUUCTF在線評測BUUCTF 是一個 CTF 競賽和訓練平臺&#xff0c;為各位 CTF 選手提供真實賽題在線復現等服務。https://buuoj.cn/challenges#[ACTF%E6%96%B0%E7%94%9F%E8%B5%9B2020]%E6%98%8E%E6%96%87%E6%94%BB%E5%87%BB下載查看&#xff0c;一個壓縮包和一張圖片。壓縮包需要密…

關于日本服務器的三種線路講解

租用日本服務器時&#xff0c;哪種線路選擇更適合?當初次接觸跨境業務的站長們著手租用日本服務器時&#xff0c;會發現不同服務商提供的網絡線路五花八門&#xff0c;從陌生的運營商名稱到復雜的技術參數&#xff0c;常常使其感到眼花繚亂。為了幫助大家理清思路&#xff0c;…

【大白話解析】 OpenZeppelin 的 MerkleProof 庫:Solidity 默克爾證明驗證工具全指南??(附源代碼)

?? 一、Merkle Tree 是什么?為什么要驗證它? 想象你有一個名單,比如: ["Alice", "Bob", "Charlie", "Dave"] 你想讓別人驗證:“我(比如 Alice)是不是在這個名單里?”,但不想把整個名單都放在區塊鏈上(太貴!)。 于是你…

機械學習綜合練習項目

數據集合完整項目文件已經上傳一、項目介紹案例介紹 案例是針對“紅酒.csv”數據集&#xff0c;在紅葡萄酒質量分析的場景 中&#xff0c;利用多元線性回歸來探索紅葡萄酒的不同化學成分如何共同 影響其質量評分。在建立線性回歸模型之后&#xff0c;當給出了紅葡萄酒 的新的一…

第3篇:配置管理的藝術 - 讓框架更靈活

前言 在前一章中&#xff0c;我們設計了強大的注解API。本章將深入探討配置管理系統的設計&#xff0c;學習如何將注解中的聲明式配置轉換為運行時可用的配置對象。 配置管理的核心挑戰 在我們的框架中&#xff0c;配置來源有三個層級&#xff1a;主要挑戰&#xff1a; &#x…

發版混亂怎么規范

你是否經歷過這種場景&#xff1a;臨到發版&#xff0c;一堆功能代碼擠在一起&#xff0c;測試分不清范圍&#xff0c;修復一個Bug可能引發三個新Bug&#xff1f;發布過程像一場豪賭&#xff1f;問題的核心往往在于分支策略和流程的混亂。今天&#xff0c;我們就來建立一套在絕…