From 568706f1553a881fbf35b70d8b8002bfdc6a43f8 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 20 Jan 2019 13:44:32 +0800 Subject: [PATCH] =?UTF-8?q?#921=20=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=BA=94=E7=94=A8=E6=B6=88=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=94=AF=E6=8C=81Markdown=E6=B6=88=E6=81=AF=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin-java-common/pom.xml | 2 +- .../chanjar/weixin/common/api/WxConsts.java | 5 +++ weixin-java-cp/pom.xml | 2 +- .../cp/api/impl/BaseWxCpServiceImpl.java | 6 ++-- .../chanjar/weixin/cp/bean/WxCpMessage.java | 9 +++++ .../messagebuilder/MarkdownMsgBuilder.java | 32 ++++++++++++++++++ .../cp/util/json/WxCpMessageGsonAdapter.java | 20 ++++++++--- .../weixin/cp/api/WxCpMessageAPITest.java | 33 +++++++++++++++++-- weixin-java-miniapp/pom.xml | 5 +-- weixin-java-mp/pom.xml | 3 +- weixin-java-open/pom.xml | 7 ++-- weixin-java-pay/pom.xml | 2 +- 12 files changed, 108 insertions(+), 18 deletions(-) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MarkdownMsgBuilder.java diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml index 654c2b6a..7a51af4b 100644 --- a/weixin-java-common/pom.xml +++ b/weixin-java-common/pom.xml @@ -11,7 +11,7 @@ weixin-java-common - WxJava - Common + WxJava - Common Java SDK 微信开发Java SDK公共模块 diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index c4bac2a8..557d1fc1 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -62,6 +62,11 @@ public class WxConsts { * 图文消息(点击跳转到图文消息页面). */ public static final String MPNEWS = "mpnews"; + /** + * markdown消息. + * (目前仅支持markdown语法的子集,微工作台(原企业号)不支持展示markdown消息) + */ + public static final String MARKDOWN = "markdown"; /** * 发送文件(CP专用). */ diff --git a/weixin-java-cp/pom.xml b/weixin-java-cp/pom.xml index 245c2197..3d9cf9a8 100644 --- a/weixin-java-cp/pom.xml +++ b/weixin-java-cp/pom.xml @@ -11,7 +11,7 @@ weixin-java-cp - WxJava - CP + WxJava - CP Java SDK 微信企业号/企业微信 Java SDK diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java index 0000c952..89aeb486 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java @@ -10,7 +10,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -141,9 +140,10 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH public WxCpMessageSendResult messageSend(WxCpMessage message) throws WxErrorException { String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send"; Integer agentId = message.getAgentId(); - if(null == agentId){ + if (null == agentId) { message.setAgentId(this.getWxCpConfigStorage().getAgentId()); } + return WxCpMessageSendResult.fromJson(this.post(url, message.toJson())); } @@ -171,7 +171,7 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH } /** - * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求 + * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求. */ @Override public T execute(RequestExecutor executor, String uri, E data) throws WxErrorException { diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMessage.java index d28c178c..cd455d88 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpMessage.java @@ -10,6 +10,7 @@ import me.chanjar.weixin.cp.bean.article.MpnewsArticle; import me.chanjar.weixin.cp.bean.article.NewArticle; import me.chanjar.weixin.cp.bean.messagebuilder.FileBuilder; import me.chanjar.weixin.cp.bean.messagebuilder.ImageBuilder; +import me.chanjar.weixin.cp.bean.messagebuilder.MarkdownMsgBuilder; import me.chanjar.weixin.cp.bean.messagebuilder.MpnewsBuilder; import me.chanjar.weixin.cp.bean.messagebuilder.NewsBuilder; import me.chanjar.weixin.cp.bean.messagebuilder.TextBuilder; @@ -94,6 +95,13 @@ public class WxCpMessage implements Serializable { return new MpnewsBuilder(); } + /** + * 获得markdown消息builder. + */ + public static MarkdownMsgBuilder MARKDOWN() { + return new MarkdownMsgBuilder(); + } + /** * 获得文件消息builder. */ @@ -112,6 +120,7 @@ public class WxCpMessage implements Serializable { * {@link WxConsts.KefuMsgType#VIDEO} * {@link WxConsts.KefuMsgType#NEWS} * {@link WxConsts.KefuMsgType#MPNEWS} + * {@link WxConsts.KefuMsgType#MARKDOWN} * * * @param msgType 消息类型 diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MarkdownMsgBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MarkdownMsgBuilder.java new file mode 100644 index 00000000..6e0a4a33 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MarkdownMsgBuilder.java @@ -0,0 +1,32 @@ +package me.chanjar.weixin.cp.bean.messagebuilder; + +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.cp.bean.WxCpMessage; + +/** + *
+ * markdown类型的消息builder
+ * Created by Binary Wang on 2019/1/20.
+ * 
+ * + * @author Binary Wang + */ +public class MarkdownMsgBuilder extends BaseBuilder { + private String content; + + public MarkdownMsgBuilder() { + this.msgType = WxConsts.KefuMsgType.MARKDOWN; + } + + public MarkdownMsgBuilder content(String content) { + this.content = content; + return this; + } + + @Override + public WxCpMessage build() { + WxCpMessage m = super.build(); + m.setContent(this.content); + return m; + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java index 7bed435d..fbf70bb5 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java @@ -8,14 +8,19 @@ */ package me.chanjar.weixin.cp.util.json; -import com.google.gson.*; +import java.lang.reflect.Type; + +import org.apache.commons.lang3.StringUtils; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.cp.bean.WxCpMessage; import me.chanjar.weixin.cp.bean.article.MpnewsArticle; import me.chanjar.weixin.cp.bean.article.NewArticle; -import org.apache.commons.lang3.StringUtils; - -import java.lang.reflect.Type; /** * @author Daniel Qian @@ -37,12 +42,19 @@ public class WxCpMessageGsonAdapter implements JsonSerializer { if (StringUtils.isNotBlank(message.getToTag())) { messageJson.addProperty("totag", message.getToTag()); } + if (WxConsts.KefuMsgType.TEXT.equals(message.getMsgType())) { JsonObject text = new JsonObject(); text.addProperty("content", message.getContent()); messageJson.add("text", text); } + if (WxConsts.KefuMsgType.MARKDOWN.equals(message.getMsgType())) { + JsonObject text = new JsonObject(); + text.addProperty("content", message.getContent()); + messageJson.add("markdown", text); + } + if (WxConsts.KefuMsgType.TEXTCARD.equals(message.getMsgType())) { JsonObject text = new JsonObject(); text.addProperty("title", message.getTitle()); diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageAPITest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageAPITest.java index 640bbad1..370f33f8 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageAPITest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageAPITest.java @@ -1,11 +1,12 @@ package me.chanjar.weixin.cp.api; +import org.testng.annotations.*; + import com.google.inject.Inject; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.bean.WxCpMessage; import me.chanjar.weixin.cp.bean.WxCpMessageSendResult; -import org.testng.annotations.*; import static org.testng.Assert.*; @@ -14,7 +15,7 @@ import static org.testng.Assert.*; * @author Daniel Qian * */ -@Test(groups = "customMessageAPI") +@Test @Guice(modules = ApiTestModule.class) public class WxCpMessageAPITest { @@ -59,4 +60,32 @@ public class WxCpMessageAPITest { System.out.println(messageSendResult.getInvalidUserList()); System.out.println(messageSendResult.getInvalidTagList()); } + + @Test + public void testSendMessage_markdown() throws WxErrorException { + WxCpMessage message = WxCpMessage + .MARKDOWN() + .toUser(configStorage.getUserId()) + .content("您的会议室已经预定,稍后会同步到`邮箱` \n" + + " >**事项详情** \n" + + " >事 项:开会 \n" + + " >组织者:@miglioguan \n" + + " >参与者:@miglioguan、@kunliu、@jamdeezhou、@kanexiong、@kisonwang \n" + + " > \n" + + " >会议室:广州TIT 1楼 301 \n" + + " >日 期:2018年5月18日 \n" + + " >时 间:上午9:00-11:00 \n" + + " > \n" + + " >请准时参加会议。 \n" + + " > \n" + + " >如需修改会议信息,请点击:[修改会议信息](https://work.weixin.qq.com)") + .build(); + + WxCpMessageSendResult messageSendResult = this.wxService.messageSend(message); + assertNotNull(messageSendResult); + System.out.println(messageSendResult); + System.out.println(messageSendResult.getInvalidPartyList()); + System.out.println(messageSendResult.getInvalidUserList()); + System.out.println(messageSendResult.getInvalidTagList()); + } } diff --git a/weixin-java-miniapp/pom.xml b/weixin-java-miniapp/pom.xml index 68530324..1dc35df6 100644 --- a/weixin-java-miniapp/pom.xml +++ b/weixin-java-miniapp/pom.xml @@ -9,9 +9,10 @@ wx-java 3.3.2.B + weixin-java-miniapp - WxJava - MiniApp - 微信小程序Java SDK + WxJava - MiniApp Java SDK + 微信小程序 Java SDK diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml index 79783a56..4196eb28 100644 --- a/weixin-java-mp/pom.xml +++ b/weixin-java-mp/pom.xml @@ -9,8 +9,9 @@ wx-java 3.3.2.B + weixin-java-mp - WxJava - MP + WxJava - MP Java SDK 微信公众号Java SDK diff --git a/weixin-java-open/pom.xml b/weixin-java-open/pom.xml index 437aef4d..3abad1f2 100644 --- a/weixin-java-open/pom.xml +++ b/weixin-java-open/pom.xml @@ -3,16 +3,17 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"> - 4.0.0 com.github.binarywang wx-java 3.3.2.B + weixin-java-open - WxJava - Open - 微信开放平台Java SDK + WxJava - Open Java SDK + 微信开放平台 Java SDK + 007 diff --git a/weixin-java-pay/pom.xml b/weixin-java-pay/pom.xml index 1d401fde..d3f7dc3e 100644 --- a/weixin-java-pay/pom.xml +++ b/weixin-java-pay/pom.xml @@ -10,7 +10,7 @@ 4.0.0 weixin-java-pay - WxJava - PAY + WxJava - PAY Java SDK 微信支付 Java SDK