From a4f5aa341b04740ba83e30dcfc98dad13c272900 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 16 Jun 2019 21:35:18 +0800 Subject: [PATCH] =?UTF-8?q?#1075=20=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8E=A8=E9=80=81=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chanjar/weixin/common/api/WxConsts.java | 5 ++ .../chanjar/weixin/cp/bean/WxCpMessage.java | 58 ++++++++++++---- .../MiniProgramNoticeMsgBuilder.java | 69 +++++++++++++++++++ .../weixin/cp/api/WxCpMessageAPITest.java | 24 +++++++ 4 files changed, 144 insertions(+), 12 deletions(-) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MiniProgramNoticeMsgBuilder.java 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 75cb54dc..37820bbd 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 @@ -98,6 +98,11 @@ public class WxConsts { * 菜单消息. */ public static final String MSGMENU = "msgmenu"; + + /** + * 小程序通知消息. + */ + public static final String MINIPROGRAM_NOTICE = "miniprogram_notice"; } /** 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 a22efd0e..b07e3d54 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 @@ -8,11 +8,15 @@ import me.chanjar.weixin.cp.bean.article.MpnewsArticle; import me.chanjar.weixin.cp.bean.article.NewArticle; import me.chanjar.weixin.cp.bean.messagebuilder.*; import me.chanjar.weixin.cp.bean.taskcard.TaskCardButton; +import me.chanjar.weixin.cp.constant.WxCpConsts; import org.apache.commons.lang3.StringUtils; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.Map; + +import static me.chanjar.weixin.common.api.WxConsts.KefuMsgType.*; /** * 消息. @@ -40,9 +44,13 @@ public class WxCpMessage implements Serializable { private String btnTxt; private List articles = new ArrayList<>(); private List mpnewsArticles = new ArrayList<>(); + private String appId; + private String page; + private Boolean emphasisFirstItem; + private Map contentItems; /** - * 任务卡片特有的属性 + * 任务卡片特有的属性. */ private String taskId; private List taskButtons = new ArrayList<>(); @@ -117,10 +125,16 @@ public class WxCpMessage implements Serializable { return new TaskCardBuilder(); } + /** + * 获得小程序通知消息builder. + */ + public static MiniProgramNoticeMsgBuilder newMiniProgramNoticeBuilder() { + return new MiniProgramNoticeMsgBuilder(); + } /** *
-   * 请使用
+   * 请使用.
    * {@link KefuMsgType#TEXT}
    * {@link KefuMsgType#IMAGE}
    * {@link KefuMsgType#VOICE}
@@ -130,6 +144,7 @@ public class WxCpMessage implements Serializable {
    * {@link KefuMsgType#MPNEWS}
    * {@link KefuMsgType#MARKDOWN}
    * {@link KefuMsgType#TASKCARD}
+   * {@link KefuMsgType#MINIPROGRAM_NOTICE}
    * 
* * @param msgType 消息类型 @@ -169,19 +184,19 @@ public class WxCpMessage implements Serializable { private void handleMsgType(JsonObject messageJson) { switch (this.getMsgType()) { - case KefuMsgType.TEXT: { + case TEXT: { JsonObject text = new JsonObject(); text.addProperty("content", this.getContent()); messageJson.add("text", text); break; } - case KefuMsgType.MARKDOWN: { + case MARKDOWN: { JsonObject text = new JsonObject(); text.addProperty("content", this.getContent()); messageJson.add("markdown", text); break; } - case KefuMsgType.TEXTCARD: { + case TEXTCARD: { JsonObject text = new JsonObject(); text.addProperty("title", this.getTitle()); text.addProperty("description", this.getDescription()); @@ -190,25 +205,25 @@ public class WxCpMessage implements Serializable { messageJson.add("textcard", text); break; } - case KefuMsgType.IMAGE: { + case IMAGE: { JsonObject image = new JsonObject(); image.addProperty("media_id", this.getMediaId()); messageJson.add("image", image); break; } - case KefuMsgType.FILE: { + case FILE: { JsonObject image = new JsonObject(); image.addProperty("media_id", this.getMediaId()); messageJson.add("file", image); break; } - case KefuMsgType.VOICE: { + case VOICE: { JsonObject voice = new JsonObject(); voice.addProperty("media_id", this.getMediaId()); messageJson.add("voice", voice); break; } - case KefuMsgType.VIDEO: { + case VIDEO: { JsonObject video = new JsonObject(); video.addProperty("media_id", this.getMediaId()); video.addProperty("thumb_media_id", this.getThumbMediaId()); @@ -217,7 +232,7 @@ public class WxCpMessage implements Serializable { messageJson.add("video", video); break; } - case KefuMsgType.NEWS: { + case NEWS: { JsonObject newsJsonObject = new JsonObject(); JsonArray articleJsonArray = new JsonArray(); for (NewArticle article : this.getArticles()) { @@ -232,7 +247,7 @@ public class WxCpMessage implements Serializable { messageJson.add("news", newsJsonObject); break; } - case KefuMsgType.MPNEWS: { + case MPNEWS: { JsonObject newsJsonObject = new JsonObject(); if (this.getMediaId() != null) { newsJsonObject.addProperty("media_id", this.getMediaId()); @@ -255,7 +270,7 @@ public class WxCpMessage implements Serializable { messageJson.add("mpnews", newsJsonObject); break; } - case KefuMsgType.TASKCARD: { + case TASKCARD: { JsonObject text = new JsonObject(); text.addProperty("title", this.getTitle()); text.addProperty("description", this.getDescription()); @@ -291,6 +306,25 @@ public class WxCpMessage implements Serializable { messageJson.add("taskcard", text); break; } + case MINIPROGRAM_NOTICE: { + JsonObject notice = new JsonObject(); + notice.addProperty("appid", this.getAppId()); + notice.addProperty("page", this.getPage()); + notice.addProperty("description", this.getDescription()); + notice.addProperty("title", this.getTitle()); + notice.addProperty("emphasis_first_item", this.getEmphasisFirstItem()); + JsonArray content = new JsonArray(); + for (Map.Entry item : this.getContentItems().entrySet()) { + JsonObject articleJson = new JsonObject(); + articleJson.addProperty("key", item.getKey()); + articleJson.addProperty("value", item.getValue()); + content.add(articleJson); + } + notice.add("content_item", content); + + messageJson.add("miniprogram_notice", notice); + break; + } default: { // do nothing } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MiniProgramNoticeMsgBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MiniProgramNoticeMsgBuilder.java new file mode 100644 index 00000000..cf44c0f0 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/messagebuilder/MiniProgramNoticeMsgBuilder.java @@ -0,0 +1,69 @@ +package me.chanjar.weixin.cp.bean.messagebuilder; + +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.cp.bean.WxCpMessage; + +import java.util.Map; + +/** + *
+ * miniprogram_notice 类型的消息 builder
+ * Created by Binary Wang on 2019/6/16.
+ * 
+ * + * @author Binary Wang + */ +public class MiniProgramNoticeMsgBuilder extends BaseBuilder { + private String title; + private String description; + private String appId; + private String page; + private Boolean emphasisFirstItem; + private Map contentItems; + + public MiniProgramNoticeMsgBuilder() { + this.msgType = WxConsts.KefuMsgType.MINIPROGRAM_NOTICE; + } + + public MiniProgramNoticeMsgBuilder appId(String appId) { + this.appId = appId; + return this; + } + + public MiniProgramNoticeMsgBuilder page(String page) { + this.page = page; + return this; + } + + public MiniProgramNoticeMsgBuilder title(String title) { + this.title = title; + return this; + } + + public MiniProgramNoticeMsgBuilder description(String description) { + this.description = description; + return this; + } + + public MiniProgramNoticeMsgBuilder contentItems(Map contentItems) { + this.contentItems = contentItems; + return this; + } + + public MiniProgramNoticeMsgBuilder emphasisFirstItem(Boolean emphasisFirstItem) { + this.emphasisFirstItem = emphasisFirstItem; + return this; + } + + @Override + public WxCpMessage build() { + WxCpMessage m = super.build(); + m.setContentItems(this.contentItems); + m.setAppId(this.appId); + m.setDescription(this.description); + m.setTitle(this.title); + m.setEmphasisFirstItem(this.emphasisFirstItem); + m.setPage(this.page); + return m; + } +} 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 5c93f38f..d0984565 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,5 +1,6 @@ package me.chanjar.weixin.cp.api; +import com.google.common.collect.ImmutableMap; import org.testng.annotations.*; import com.google.inject.Inject; @@ -107,4 +108,27 @@ public class WxCpMessageAPITest { System.out.println(messageSendResult.getInvalidUserList()); System.out.println(messageSendResult.getInvalidTagList()); } + + @Test + public void testSendMessage_miniprogram_notice() throws WxErrorException { + WxCpMessage message = WxCpMessage + .newMiniProgramNoticeBuilder() + .toUser(configStorage.getUserId()) + .appId("wx123123123123123") + .page("pages/index?userid=zhangsan&orderid=123123123") + .title("会议室预订成功通知") + .description("4月27日 16:16") + .emphasisFirstItem(true) + .contentItems(ImmutableMap.of("会议室","402", + "会议地点","广州TIT-402会议室", + "会议时间","2018年8月1日 09:00-09:30")) + .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()); + } }