杰瑞科技汇

Java 微信公众平台开源项目有哪些?

主流的 Java 微信公众平台开源框架

以下是几个在 GitHub 上非常流行且维护良好的 Java 微信公众号开源项目,它们各有特点:

Java 微信公众平台开源项目有哪些?-图1
(图片来源网络,侵删)

WxJava (强烈推荐)

这是目前 Java 生态中最流行、功能最全面、社区最活跃 的微信公众号开发框架,如果你要开始一个新项目,首选 WxJava

  • GitHub 地址: https://github.com/Wechat-Group/WxJava
  • 核心特点:
    • 功能全面: 覆盖了微信公众平台几乎所有 API,包括公众号、小程序、企业微信、微信支付等。
    • 模块化设计: 将不同功能(如公众号、小程序、支付)拆分成不同的模块,你可以按需引入,避免臃肿。
    • 强大的社区支持: 拥有非常活跃的社区和 Issue 区,遇到问题很容易找到解决方案或得到作者的帮助。
    • 文档完善: 提供了非常详尽的中文文档和示例代码,上手快。
    • 持续更新: 微信官方 API 更新后,WxJava 通常会很快跟进更新。
  • 适用场景: 几乎所有类型的公众号开发,从简单的自动回复到复杂的业务逻辑集成。

jeecg-boot (低代码平台,集成微信)

Jeecg-Boot 是一个基于代码生成器的低代码开发平台,它内置了对微信公众号的集成,适合快速开发企业级应用。

  • GitHub 地址: https://github.com/jeecgboot/jeecg-boot
  • 核心特点:
    • 一站式解决方案: 提供了从后端管理前端到微信端的一整套解决方案。
    • 代码生成器: 可以快速生成 CURD(增删改查)模块,极大提高开发效率。
    • 内置微信模块: 已经集成了公众号的授权、菜单管理、素材管理、模板消息等功能,开箱即用。
    • 前后端分离: 基于 Vue + Ant Design 的前端,技术栈现代。
  • 适用场景: 企业内部管理系统、SaaS 平台、需要快速搭建带有公众号功能的管理后台。

other (其他备选)

  • wechat-sdk: 一个比较轻量级的微信 SDK,专注于提供 API 调用能力,适合对框架依赖较小、喜欢自己搭建项目结构的开发者。
  • 微信官方 Java SDK: 微信官方提供的 SDK,功能相对基础,更新可能不如社区框架及时,适合需要官方最高保证度的场景,但通常 WxJava 会更好用。

如何选择?

特性 WxJava Jeecg-Boot
定位 功能全面的 SDK 低代码开发平台
优点 灵活、强大、社区好、文档全 开发快、集成度高、自带管理后台
缺点 需要自己搭建项目结构,集成工作较多 框架较重,学习曲线稍陡,可能包含不需要的功能
适合人群 所有 Java 开发者,尤其是想深入定制公众号逻辑的 需要快速开发企业级应用的管理后台,对低代码有需求的团队

  • 如果你只想做一个公众号,或者想把它集成到现有的 Spring Boot/Spring Cloud 项目中,选 WxJava
  • 如果你想快速开发一个包含公众号功能的企业管理系统,不希望从零开始写后台,选 Jeecg-Boot

使用 WxJava 开发一个简单公众号的流程示例

这里以最流行的 WxJava 为例,展示一个简单的自动回复功能是如何实现的。

Java 微信公众平台开源项目有哪些?-图2
(图片来源网络,侵删)

项目准备

  • 环境: JDK 8+, Maven, Spring Boot
  • 获取配置信息: 登录 微信公众平台,在“开发” -> “基本配置”中获取:
    • AppID (应用ID)
    • AppSecret (应用密钥)
    • Token (令牌)
    • EncodingAESKey (消息加解密密钥)

创建 Spring Boot 项目并引入依赖

pom.xml 中添加 WxJava 的依赖:

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp-spring-boot-starter</artifactId>
    <version>最新版本号</version> <!-- 请去 GitHub 查找最新版本 -->
</dependency>

配置公众号信息

application.ymlapplication.properties 中配置:

wx:
  mp:
    configs:
      - appId: 你的AppID
        secret: 你的AppSecret
        token: 你的Token
        aesKey: 你的EncodingAESKey # 可选,如果不加密可以不填

处理微信服务器验证(接入)

微信服务器会发送一个 GET 请求来验证你的服务器地址,你需要创建一个 Controller 来处理这个请求。

import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/wx")
public class WxController {
    @Autowired
    private WxMpService wxMpService;
    @Autowired
    private WxMpMessageRouter messageRouter;
    /**
     * 处理微信服务器发来的验证请求
     */
    @GetMapping(produces = "text/plain;charset=utf-8")
    public String authGet(@RequestParam(name = "signature", required = false) String signature,
                          @RequestParam(name = "timestamp", required = false) String timestamp,
                          @RequestParam(name = "nonce", required = false) String nonce,
                          @RequestParam(name = "echostr", required = false) String echostr) {
        if (wxMpService.checkSignature(timestamp, nonce, signature)) {
            return echostr;
        }
        return "非法请求";
    }
    /**
     * 处理微信服务器发来的消息
     */
    @PostMapping(produces = "application/xml;charset=UTF-8")
    public String post(@RequestBody String requestBody,
                       @RequestParam("signature") String signature,
                       @RequestParam("timestamp") String timestamp,
                       @RequestParam("nonce") String nonce,
                       @RequestParam("openid") String openid,
                       @RequestParam("encrypt_type") String encryptType,
                       @RequestParam("msg_signature") String msgSignature) {
        if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
            throw new IllegalArgumentException("非法请求,可能伪造请求!");
        }
        // 消息解密
        WxMpXmlMessage inMessage = null;
        if ("aes".equals(encryptType)) {
            inMessage = WxMpXmlMessage.fromEncryptedXml(requestBody, wxMpService.getWxMpConfigStorage(), timestamp, nonce, msgSignature);
        } else {
            inMessage = WxMpXmlMessage.fromXml(requestBody);
        }
        // 路由处理消息
        WxMpXmlOutMessage outMessage = this.messageRouter.route(inMessage);
        if (outMessage == null) {
            return "";
        }
        return outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage());
    }
}

实现自动回复逻辑

WxJava 使用了责任链模式来处理消息,你需要创建一个 Handler 并注册到 WxMpMessageRouter 中。

Java 微信公众平台开源项目有哪些?-图3
(图片来源网络,侵删)
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class SimpleTextHandler implements WxMpMessageHandler {
    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxSessionManager sessionManager) {
        // 1. 判断是否是文本消息
        if ("text".equals(wxMessage.getMsgType())) {
            // 2. 获取用户发送的内容
            String content = wxMessage.getContent();
            // 3. 构造回复内容
            String replyContent = "你发送的是: " + content;
            // 4. 创建一个文本回复消息
            WxMpXmlOutTextMessage outMessage = WxMpXmlOutTextMessage.newTextMessage(replyContent);
            // 5. 设置接收方和发送方
            outMessage.setToUser(wxMessage.getFromUser());
            outMessage.setFromUser(wxMessage.getToUser());
            return outMessage;
        }
        // 其他类型的消息不做处理,返回 null
        return null;
    }
}

注册 Handler

创建一个配置类,将你的 Handler 注册到路由器中。

import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WxMpConfig {
    @Autowired
    private WxMpService wxMpService;
    @Autowired
    private SimpleTextHandler simpleTextHandler; // 注入我们刚刚创建的Handler
    @Bean
    public WxMpMessageRouter messageRouter() {
        WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService);
        // 处理文本消息
        newRouter.rule()
                .async(false)
                .msgType("text")
                .handler(simpleTextHandler)
                .next();
        return newRouter;
    }
}

完成以上步骤后,你的 Spring Boot 应用就能处理来自微信服务器的验证请求和文本消息,并实现简单的自动回复了。


其他重要技术点

  1. 微信支付: WxJava 同样集成了微信支付的 SDK,可以方便地实现统一下单、查询订单、退款等功能。
  2. 消息推送: 可以通过公众号 API 主动给用户发送服务通知(模板消息),例如订单状态更新、物流提醒等。
  3. 网页授权: 当用户在公众号内点击链接时,可以通过 OAuth2.0 获取用户的 openid 和基本信息,实现个性化服务。
  4. 部署: 将开发好的应用打包成 JAR 包,部署到云服务器(如阿里云、腾讯云)上,并确保服务器能被微信的服务器访问(80/443 端口)。

使用 Java 开发微信公众号,借助 WxJava 这样的优秀开源框架,可以让你事半功倍,它将微信复杂的 API 调用、消息加解密等底层细节封装得非常好,让你能更专注于业务逻辑的实现,对于企业级应用,Jeecg-Boot 提供了更快的开发路径,希望这份指南能帮助你顺利开启 Java 微信公众号的开发之旅。

分享:
扫描分享到社交APP
上一篇
下一篇