SpringBoot 实现支持多个微信小程序的登录

在实际业务场景中,需要一个后台同时支持多个微信小程序的登录。例如,企业有多个不同业务的小程序,但希望统一在同一个后台系统里进行用户认证和数据处理。这时候,我们就需要一个灵活的方式来管理多个小程序的 appid 和 secret,并根据前端传递的 appid 与 code 获取对应的 openid 实现登录。

本文将基于 weixin-java-miniapp SDK 实现一个通用的多小程序登录模块。

一、依赖引入

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

xml 复制代码
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-miniapp</artifactId>
    <version>4.7.7-20250808.182223</version>
</dependency>

二、配置文件

通过 application.yml 配置多个小程序的 appid 与 secret,提供给后续动态获取。

yaml 复制代码
wx:
  miniapp:
    configs:
      - appid: wxxxxxxxxxxxxxxxxxx
        secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      - appid: wyyyyyyyyyyyyyyyyyy
        secret: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

三、属性类

定义配置属性类,读取配置文件中多个小程序的信息:

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

这样就能自动绑定 application.yml 中的配置到 WxMiniAppProperties。

四、服务工厂类

编写一个工厂类 WxMiniAppServiceFactory,用来存储和获取 WxMaService 实例。 每个小程序对应一个 WxMaService,通过 appid 来区分。

后台可以根据传入的 appid 动态选择对应的 WxMaService。

arduino 复制代码
@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;
    }
}

五、登录逻辑

定义登录服务,根据前端传递的 appid 与 code 获取用户 openid:

java 复制代码
@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。

相关推荐
霸道流氓气质8 小时前
LLM API密钥管理与轮换策略:Spring Vault动态密钥、熔断限流协同与多Provider路由的 Java 生产级实现
java·后端·spring
凤山老林8 小时前
Spring Boot 集成 Redis Stream 做可靠消息队列:持久化、消费组重组与流式处理实战
spring boot·redis·后端
codigger8 小时前
哈希算法:一根看不见的 "指纹",如何撑起整个互联网
后端·区块链·哈希算法·sha256
the局外人8 小时前
FastAPI中jwt的基本使用与实践
后端·python·fastapi
FullStackGeek9 小时前
微信缴费APIV3接入
后端
灯澜忆梦9 小时前
【Go Zap 日志库】#1 |快速上手 + 配置详解
开发语言·后端·golang
m0_587383009 小时前
无人自助拼豆系统从需求分析到落地部署全流程实战开发指南
java·经验分享·后端·struts·小程序·架构·需求分析
Rain的Java大神之路9 小时前
被问麻了!Function Calling、MCP、Skill 到底啥关系?一张图讲透三层架构,附 Java 生产落地全流程+30个坑
java·后端·ai编程
云和数据.ChenGuang10 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
java·人工智能·spring boot·后端·重构·springai
豆角焖肉10 小时前
SpringBoot 集成腾讯 AI 人脸识别
人工智能·spring boot·后端·人脸识别·腾讯 ai·base64 图片