diff --git a/README.md b/README.md
index ff90a2bdf4..be7a21a6c6 100644
--- a/README.md
+++ b/README.md
@@ -362,3 +362,39 @@
|  |  |  |
目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
+
+### 微信公众号的模版消息对接
+
+`yudao-module-mp` 模块现已支持微信公众号的模版消息对接功能。以下是使用说明和示例:
+
+#### 使用说明
+
+1. 确保在 `pom.xml` 文件中取消注释 `yudao-module-mp` 模块,以便将其包含在构建过程中。
+2. 在 `yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message` 目录下,定义 `MpTemplateMessageService` 接口,并在同一目录下实现该接口。
+3. 在 `yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/handler/message` 目录下,添加 `TemplateMessageHandler` 类以处理传入的模版消息。
+
+#### 示例
+
+以下是一个发送模版消息的示例:
+
+```java
+@Service
+public class MpTemplateMessageServiceImpl implements MpTemplateMessageService {
+
+ @Resource
+ private MpServiceFactory mpServiceFactory;
+
+ @Override
+ public void sendTemplateMessage(WxMpTemplateMessage templateMessage) {
+ WxMpService mpService = mpServiceFactory.getRequiredMpService(templateMessage.getAppid());
+ try {
+ mpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+ } catch (WxErrorException e) {
+ log.error("[sendTemplateMessage][发送模板消息失败,templateMessage={}]", templateMessage, e);
+ throw new RuntimeException("发送模板消息失败", e);
+ }
+ }
+}
+```
+
+更多详细信息,请参考项目中的相关代码和文档。
diff --git a/pom.xml b/pom.xml
index 86dfebcc35..44ce853b95 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
-
+ yudao-module-mp
diff --git a/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/handler/message/TemplateMessageHandler.java b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/handler/message/TemplateMessageHandler.java
new file mode 100644
index 0000000000..5c471a2f2a
--- /dev/null
+++ b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/handler/message/TemplateMessageHandler.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.mp.service.handler.message;
+
+import cn.iocoder.yudao.module.mp.framework.mp.core.context.MpContextHolder;
+import cn.iocoder.yudao.module.mp.service.message.MpTemplateMessageService;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.session.WxSessionManager;
+import me.chanjar.weixin.mp.api.WxMpMessageHandler;
+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.stereotype.Component;
+
+import jakarta.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 模板消息的事件处理器
+ */
+@Component
+@Slf4j
+public class TemplateMessageHandler implements WxMpMessageHandler {
+
+ @Resource
+ private MpTemplateMessageService mpTemplateMessageService;
+
+ @Override
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context,
+ WxMpService wxMpService, WxSessionManager sessionManager) {
+ log.info("[handle][接收到模板消息,内容:{}]", wxMessage);
+ // 处理模板消息的逻辑
+ mpTemplateMessageService.sendTemplateMessage(MpContextHolder.getAppId(), wxMessage);
+ return null;
+ }
+
+}
diff --git a/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageService.java b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageService.java
new file mode 100644
index 0000000000..a67357c6cb
--- /dev/null
+++ b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageService.java
@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.mp.service.message;
+
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+
+/**
+ * 公众号模板消息 Service 接口
+ */
+public interface MpTemplateMessageService {
+
+ /**
+ * 发送模板消息
+ *
+ * @param templateMessage 模板消息
+ */
+ void sendTemplateMessage(WxMpTemplateMessage templateMessage);
+
+}
diff --git a/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageServiceImpl.java b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageServiceImpl.java
new file mode 100644
index 0000000000..ef4f1a1466
--- /dev/null
+++ b/yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/message/MpTemplateMessageServiceImpl.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.mp.service.message;
+
+import cn.iocoder.yudao.module.mp.framework.mp.core.MpServiceFactory;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import jakarta.annotation.Resource;
+
+@Service
+@Validated
+@Slf4j
+public class MpTemplateMessageServiceImpl implements MpTemplateMessageService {
+
+ @Resource
+ private MpServiceFactory mpServiceFactory;
+
+ @Override
+ public void sendTemplateMessage(WxMpTemplateMessage templateMessage) {
+ WxMpService mpService = mpServiceFactory.getRequiredMpService(templateMessage.getAppid());
+ try {
+ mpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+ } catch (WxErrorException e) {
+ log.error("[sendTemplateMessage][发送模板消息失败,templateMessage={}]", templateMessage, e);
+ throw new RuntimeException("发送模板消息失败", e);
+ }
+ }
+
+}