From 084ffcf8bbe8bdec2973f11053fe8ce5d9bb454c Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 9 Jun 2019 20:30:08 +0800 Subject: [PATCH] =?UTF-8?q?#1050=20=E5=AE=A2=E6=9C=8D=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=91=E9=80=81=E8=8F=9C=E5=8D=95=E6=B6=88?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chanjar/weixin/common/api/WxConsts.java | 9 +- .../weixin/mp/bean/kefu/WxMpKefuMessage.java | 37 +++-- .../mp/bean/message/WxMpXmlMessage.java | 8 +- .../mp/builder/kefu/WxMsgMenuBuilder.java | 46 ++++++ .../util/json/WxMpKefuMessageGsonAdapter.java | 154 ++++++++++-------- .../mp/bean/kefu/WxMpKefuMessageTest.java | 15 +- 6 files changed, 183 insertions(+), 86 deletions(-) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.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 9af7811c..75cb54dc 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 @@ -85,14 +85,19 @@ public class WxConsts { public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service"; /** - * 小程序卡片(要求小程序与公众号已关联) + * 小程序卡片(要求小程序与公众号已关联). */ public static final String MINIPROGRAMPAGE = "miniprogrampage"; /** - * 任务卡片消息 + * 任务卡片消息. */ public static final String TASKCARD = "taskcard"; + + /** + * 菜单消息. + */ + public static final String MSGMENU = "msgmenu"; } /** diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java index 560add60..b2966213 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; /** - * 客服消息 + * 客服消息. * * @author chanjarster */ @@ -34,64 +34,79 @@ public class WxMpKefuMessage implements Serializable { private String miniProgramPagePath; private List articles = new ArrayList<>(); + private String headContent; + private String tailContent; /** - * 获得文本消息builder + * 菜单消息里的菜单内容. + * 请使用逗号分割的形式将id和content连起来放在数组的里面 + */ + private String[] msgMenuList; + + /** + * 获得文本消息builder. */ public static TextBuilder TEXT() { return new TextBuilder(); } /** - * 获得图片消息builder + * 获得图片消息builder. */ public static ImageBuilder IMAGE() { return new ImageBuilder(); } /** - * 获得语音消息builder + * 获得语音消息builder. */ public static VoiceBuilder VOICE() { return new VoiceBuilder(); } /** - * 获得视频消息builder + * 获得视频消息builder. */ public static VideoBuilder VIDEO() { return new VideoBuilder(); } /** - * 获得音乐消息builder + * 获得音乐消息builder. */ public static MusicBuilder MUSIC() { return new MusicBuilder(); } /** - * 获得图文消息(点击跳转到外链)builder + * 获得图文消息(点击跳转到外链)builder. */ public static NewsBuilder NEWS() { return new NewsBuilder(); } /** - * 获得图文消息(点击跳转到图文消息页面)builder + * 获得图文消息(点击跳转到图文消息页面)builder. */ public static MpNewsBuilder MPNEWS() { return new MpNewsBuilder(); } /** - * 获得卡券消息builder + * 获得卡券消息builder. */ public static WxCardBuilder WXCARD() { return new WxCardBuilder(); } /** - * 小程序卡片 + * 获得菜单消息builder. + */ + public static WxMsgMenuBuilder MSGMENU() { + return new WxMsgMenuBuilder(); + } + + /** + * 小程序卡片. */ public static MiniProgramPageBuilder MINIPROGRAMPAGE() { return new MiniProgramPageBuilder(); @@ -110,8 +125,8 @@ public class WxMpKefuMessage implements Serializable { * {@link WxConsts.KefuMsgType#WXCARD} * {@link WxConsts.KefuMsgType#MINIPROGRAMPAGE} * {@link WxConsts.KefuMsgType#TASKCARD} + * {@link WxConsts.KefuMsgType#MSGMENU} * - * */ public void setMsgType(String msgType) { this.msgType = msgType; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java index ba6fd227..f8ed19bc 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java @@ -634,11 +634,17 @@ public class WxMpXmlMessage implements Serializable { private String regionCode; /** - * 审核未通过的原因。 + * 审核未通过的原因. */ @XStreamAlias("ReasonMsg") private String reasonMsg; + /** + * 给用户发菜单消息类型的客服消息后,用户所点击的菜单ID. + */ + @XStreamAlias("bizmsgmenuid") + private String bizMsgMenuId; + public static WxMpXmlMessage fromXml(String xml) { //修改微信变态的消息内容格式,方便解析 xml = xml.replace("", ""); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java new file mode 100644 index 00000000..81d919ec --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java @@ -0,0 +1,46 @@ +package me.chanjar.weixin.mp.builder.kefu; + +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; + +/** + * 卡券消息builder + *
+ * 用法: WxMpKefuMessage m = WxMpKefuMessage.WXCARD().cardId(...).toUser(...).build();
+ * 
+ * + * @author Binary Wang + */ +public final class WxMsgMenuBuilder extends BaseBuilder { + private String headContent; + private String tailContent; + private String[] msgMenuList; + + public WxMsgMenuBuilder() { + this.msgType = WxConsts.KefuMsgType.MSGMENU; + } + + @Override + public WxMpKefuMessage build() { + WxMpKefuMessage m = super.build(); + m.setHeadContent(this.headContent); + m.setMsgMenuList(this.msgMenuList); + m.setTailContent(this.tailContent); + return m; + } + + public WxMsgMenuBuilder headContent(String headContent) { + this.headContent = headContent; + return this; + } + + public WxMsgMenuBuilder tailContent(String tailContent) { + this.tailContent = tailContent; + return this; + } + + public WxMsgMenuBuilder msgMenuList(String... msgMenuList) { + this.msgMenuList = msgMenuList; + return this; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java index 63389866..342a4b36 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java @@ -1,7 +1,6 @@ package me.chanjar.weixin.mp.util.json; import com.google.gson.*; -import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.api.WxConsts.KefuMsgType; import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; import org.apache.commons.lang3.StringUtils; @@ -16,77 +15,90 @@ public class WxMpKefuMessageGsonAdapter implements JsonSerializer