下面我将为您详细讲解“SpringBoot整合WxJava开启消息推送的实现”的完整攻略。
简介
WxJava 是微信开发 Java SDK的全称,是以易用性和高性能为设计目标的微信 Java开发工具包,支持公众号、小程序、企业微信和开放平台等微信平台的开发。本文将基于 SpringBoot 框架和 WxJava SDK,实现微信消息推送的功能。推送包括文本消息、图文消息、图片消息、音乐消息等多种消息类型。
准备工作
为了实现微信消息推送,需要满足以下两个条件:
-
拥有一个微信公众号,并开通开发者模式。
-
获取到微信公众号的 AppID 和 AppSecret。这需要在微信开放平台申请开通公众号,并在公众号后台获取到。
整合WxJava
首先,我们需要在 SpringBoot 项目中集成 WxJava SDK。目前,WxJava SDK的最新稳定版本是 Weixin Java Tools 3.6.1 版本。在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>me.chanjar</groupId>
<artifactId>weixin-java-tools</artifactId>
<version>3.6.1</version>
</dependency>
配置公众号信息
为了让 WxJava SDK 能够正确的使用公众号信息,我们需要在 application.properties 文件中添加以下配置:
wx.mp.appId={填写自己的AppID}
wx.mp.secret={填写自己的AppSecret}
wx.mp.token={填写自己的Token}
wx.mp.aesKey={填写自己的EncodingAESKey}
wx.mp.msgDataFormat=JSON
其中,wx.mp.appId
、wx.mp.secret
、wx.mp.token
和wx.mp.aesKey
分别是微信公众号的 AppID、AppSecret、Token 和 EncodingAESKey。这些信息可以在微信公众号后台中进行设置。
wx.mp.msgDataFormat
是消息加解密类型。可以选择密文(XML)或明文(JSON),本文中我们将消息加解密类型设置为 JSON。
创建消息处理器
在 WxJava SDK 中,消息处理器是一个用于处理不同消息类型的类。在本文中,我们将使用 TextMessageHandler
处理文本消息。可以创建一个类 MyTextMessageHandler
,继承自 TextMessageHandler
类,并复写 handle
方法来处理文本消息。示例如下:
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.session.StandardSessionManager;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import org.springframework.stereotype.Component;
@Component
public class MyTextMessageHandler implements WxMpMessageHandler {
// 在Spring容器中注入WxMpService
private final WxMpService wxMpService;
public MyTextMessageHandler(WxMpService wxMpService) {
this.wxMpService = wxMpService;
}
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, WxMpConfigStorage wxMpConfigStorage, WxMpService wxMpService, StandardSessionManager sessionManager) {
String content = wxMessage.getContent();
WxMpXmlOutTextMessage response = WxMpXmlOutMessage.TEXT().content(content).fromUser(wxMessage.getToUser())
.toUser(wxMessage.getFromUser()).build();
return response;
}
@Override
public WxConsts.XmlMsgType getMsgType() {
return WxConsts.XmlMsgType.TEXT;
}
}
配置消息处理器
创建完消息处理器之后,我们需要在 SpringBoot 项目中配置消息处理器。
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WxMpConfiguration {
@Autowired
private MyTextMessageHandler myTextMessageHandler;
@Autowired
private WxMpConfigStorage wxMpConfigStorage;
@Bean
public WxMpService wxMpService() {
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxMpConfigStorage);
return wxMpService;
}
@Bean
public WxMpMessageRouter wxMpMessageRouter(WxMpService wxMpService) {
WxMpMessageRouter wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
wxMpMessageRouter.rule().async(false).msgType(WxConsts.XmlMsgType.TEXT).handler(myTextMessageHandler).end();
return wxMpMessageRouter;
}
}
启用消息推送
通过上述步骤,我们已经成功地创建了消息处理器,并将其配置为 SpringBoot 项目的 Bean。最后一步是将消息处理器与微信公众号关联起来。
在 SpringBoot 项目的 Application
类中,添加以下代码:
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public WxMpMessageRouter wxMpMessageRouter(WxMpService wxMpService) {
// 注册消息处理器
WxMpMessageRouter wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
wxMpMessageRouter.rule().async(false).msgType(WxConsts.XmlMsgType.TEXT).handler(myTextMessageHandler).end();
return wxMpMessageRouter;
}
}
这样就完成了微信消息推送的整合。
示例说明
示例一:回复文本消息
在 MyTextMessageHandler
类的 handle
方法中,我们可以根据收到的消息类型进行不同的处理。例如,当收到文本消息时,可以通过 WxMpXmlOutMessage.TEXT()
创建一个文本消息,然后进行回复。以下是完整的回复示例:
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, WxMpConfigStorage wxMpConfigStorage, WxMpService wxMpService, StandardSessionManager sessionManager) {
String content = "您好,您刚才发送了:" + wxMessage.getContent();
WxMpXmlOutTextMessage response = WxMpXmlOutMessage.TEXT().content(content).fromUser(wxMessage.getToUser())
.toUser(wxMessage.getFromUser()).build();
return response;
}
示例二:回复图文消息
除回复文本消息外,WxJava 支持在回复消息时发送图文、图片、音乐等多种消息类型。下面我们以回复图文消息为例进行说明。
首先,在 MyImageMessageHandler
类中复写 handle
方法,创建一个图文消息:
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, WxMpConfigStorage wxMpConfigStorage, WxMpService wxMpService, StandardSessionManager sessionManager) {
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
item.setTitle("图文消息");
item.setDescription("这是一条图文消息");
// 图片链接
item.setPicUrl("https://tva4.sinaimg.cn/crop.0.0.1125.1125.180/005UaOcPjw8fa7fh3h45ij30v90v9q6a.jpg");
// 点击跳转链接
item.setUrl("http://www.baidu.com");
WxMpXmlOutNewsMessage wxMpXmlOutNewsMessage = WxMpXmlOutMessage.NEWS().addArticle(item)
.fromUser(wxMessage.getToUser())
.toUser(wxMessage.getFromUser())
.build();
return wxMpXmlOutNewsMessage;
}
然后,在 WxMpConfiguration
类的 wxMpMessageRouter
注册消息处理器时,将消息处理器指定为 MyNewsMessageHandler
:
@Bean
public WxMpMessageRouter wxMpMessageRouter(WxMpService wxMpService) {
WxMpMessageRouter wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
wxMpMessageRouter.rule().async(false).msgType(WxConsts.XmlMsgType.NEWS).handler(myNewsMessageHandler).end();
return wxMpMessageRouter;
}
这样,当微信公众号收到用户发送的消息时,即可自动回复图文消息。
总结
本文教程展示了SpringBoot整合WxJava开启消息推送的实现步骤,其中详细讲解了如何编写消息处理器、配置消息处理器、启用消息推送。同时,也给出了包括回复文本消息、回复图文消息在内的多个示例,方便开发者参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合WxJava开启消息推送的实现 - Python技术站