From f4f7fd8b5d197155fac27365aeb292e42cc518b1 Mon Sep 17 00:00:00 2001 From: root <478119414@qq.com> Date: Mon, 29 Sep 2025 16:54:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(cp):=20=E6=96=B0=E5=A2=9Emarkdown=5Fv2?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在WxCpConsts中添加MARKDOWN_V2常量 - WxCpGroupRobotMessage支持markdown_v2消息类型 - WxCpGroupRobotService新增sendMarkdownV2方法 - WxCpGroupRobotServiceImpl实现markdown_v2消息发送逻辑 --- .../weixin/cp/api/WxCpGroupRobotService.java | 17 +++++++++++++++++ .../cp/api/impl/WxCpGroupRobotServiceImpl.java | 13 +++++++++++++ .../cp/bean/message/WxCpGroupRobotMessage.java | 6 ++++++ .../chanjar/weixin/cp/constant/WxCpConsts.java | 5 +++++ 4 files changed, 41 insertions(+) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpGroupRobotService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpGroupRobotService.java index e396ed58ac..c1a8d56255 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpGroupRobotService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpGroupRobotService.java @@ -70,6 +70,23 @@ public interface WxCpGroupRobotService { */ void sendMarkdown(String webhookUrl, String content) throws WxErrorException; + /** + * 发送markdown_v2类型的消息 + * + * @param content markdown内容,最长不超过4096个字节,必须是utf8编码 + * @throws WxErrorException 异常 + */ + void sendMarkdownV2(String content) throws WxErrorException; + + /** + * 发送markdown_v2类型的消息 + * + * @param webhookUrl webhook地址 + * @param content markdown内容,最长不超过4096个字节,必须是utf8编码 + * @throws WxErrorException 异常 + */ + void sendMarkdownV2(String webhookUrl, String content) throws WxErrorException; + /** * 发送image类型的消息 * diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImpl.java index 21246d2415..8373c6c8ee 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImpl.java @@ -42,6 +42,11 @@ public void sendMarkdown(String content) throws WxErrorException { this.sendMarkdown(this.getWebhookUrl(), content); } + @Override + public void sendMarkdownV2(String content) throws WxErrorException { + this.sendMarkdownV2(this.getWebhookUrl(), content); + } + @Override public void sendImage(String base64, String md5) throws WxErrorException { this.sendImage(this.getWebhookUrl(), base64, md5); @@ -70,6 +75,14 @@ public void sendMarkdown(String webhookUrl, String content) throws WxErrorExcept .toJson()); } + @Override + public void sendMarkdownV2(String webhookUrl, String content) throws WxErrorException { + this.cpService.postWithoutToken(webhookUrl, new WxCpGroupRobotMessage() + .setMsgType(GroupRobotMsgType.MARKDOWN_V2) + .setContent(content) + .toJson()); + } + @Override public void sendImage(String webhookUrl, String base64, String md5) throws WxErrorException { this.cpService.postWithoutToken(webhookUrl, new WxCpGroupRobotMessage() diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java index d115245e04..97beeec189 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpGroupRobotMessage.java @@ -252,6 +252,12 @@ public String toJson() { messageJson.add("markdown", text); break; } + case MARKDOWN_V2: { + JsonObject text = new JsonObject(); + text.addProperty("content", this.getContent()); + messageJson.add("markdown_v2", text); + break; + } case IMAGE: { JsonObject text = new JsonObject(); text.addProperty("base64", this.getBase64()); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java index 3d51c9e2c9..ff3f8e0e6c 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java @@ -630,6 +630,11 @@ public static class GroupRobotMsgType { */ public static final String MARKDOWN = "markdown"; + /** + * markdown_v2消息. + */ + public static final String MARKDOWN_V2 = "markdown_v2"; + /** * 图文消息(点击跳转到外链). */ From f942a1a22159ea4d7438f16364ec88d106f43e2d Mon Sep 17 00:00:00 2001 From: root <478119414@qq.com> Date: Mon, 29 Sep 2025 17:09:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?test(robot):=20=E6=B7=BB=E5=8A=A0Markdown?= =?UTF-8?q?=20V2=E5=8F=91=E9=80=81=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增testSendMarkDownV2测试方法- 测试内容包含标题、字体、列表、引用、链接、分割线、代码和表格 - 验证Markdown V2格式的完整发送流程 --- .../impl/WxCpGroupRobotServiceImplTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImplTest.java index 8e0d87d82c..f66580cc94 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImplTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpGroupRobotServiceImplTest.java @@ -64,6 +64,51 @@ public void testSendMarkDown() throws WxErrorException { robotService.sendMarkdown(content); } + /** + * Test send mark down v2. + * + * @throws WxErrorException the wx error exception + */ + @Test + public void testSendMarkDownV2() throws WxErrorException { + String content = "# 一、标题\n" + + "## 二级标题\n" + + "### 三级标题\n" + + "# 二、字体\n" + + "*斜体*\n" + + "\n" + + "**加粗**\n" + + "# 三、列表 \n" + + "- 无序列表 1 \n" + + "- 无序列表 2\n" + + " - 无序列表 2.1\n" + + " - 无序列表 2.2\n" + + "1. 有序列表 1\n" + + "2. 有序列表 2\n" + + "# 四、引用\n" + + "> 一级引用\n" + + ">>二级引用\n" + + ">>>三级引用\n" + + "# 五、链接\n" + + "[这是一个链接](https://work.weixin.qq.com/api/doc)\n" + + "![](https://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png)\n" + + "# 六、分割线\n" + + "\n" + + "---\n" + + "# 七、代码\n" + + "`这是行内代码`\n" + + "```\n" + + "这是独立代码块\n" + + "```\n" + + "\n" + + "# 八、表格\n" + + "| 姓名 | 文化衫尺寸 | 收货地址 |\n" + + "| :----- | :----: | -------: |\n" + + "| 张三 | S | 广州 |\n" + + "| 李四 | L | 深圳 |"; + robotService.sendMarkdownV2(content); + } + /** * Test send image. *