【开发日记】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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;我们就来建立一套在绝…