| @@ -32,10 +32,10 @@ public class WxMpKefuMessage implements Serializable { | |||||
| private String mpNewsMediaId; | private String mpNewsMediaId; | ||||
| private String miniProgramAppId; | private String miniProgramAppId; | ||||
| private String miniProgramPagePath; | private String miniProgramPagePath; | ||||
| private List<WxArticle> articles = new ArrayList<>(); | |||||
| private String headContent; | private String headContent; | ||||
| private String tailContent; | private String tailContent; | ||||
| private List<WxArticle> articles = new ArrayList<>(); | |||||
| private List<WxMsgMenu> list = new ArrayList<>(); | |||||
| /** | /** | ||||
| * 菜单消息里的菜单内容. | * 菜单消息里的菜单内容. | ||||
| * 请使用逗号分割的形式将id和content连起来放在数组的里面 | * 请使用逗号分割的形式将id和content连起来放在数组的里面 | ||||
| @@ -145,4 +145,10 @@ public class WxMpKefuMessage implements Serializable { | |||||
| private String url; | private String url; | ||||
| private String picUrl; | private String picUrl; | ||||
| } | } | ||||
| @Data | |||||
| public static class WxMsgMenu implements Serializable { | |||||
| private String id; | |||||
| private String content; | |||||
| } | |||||
| } | } | ||||
| @@ -3,30 +3,37 @@ package me.chanjar.weixin.mp.builder.kefu; | |||||
| import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
| import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | ||||
| import java.util.ArrayList; | |||||
| import java.util.Collections; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * 卡券消息builder | |||||
| * 菜单消息builder | |||||
| * <pre> | * <pre> | ||||
| * 用法: WxMpKefuMessage m = WxMpKefuMessage.WXCARD().cardId(...).toUser(...).build(); | |||||
| * 用法: | |||||
| * WxMpKefuMessage m = WxMpKefuMessage.MSGMENU().addList(lists).headContent(headContent).tailContent(tailContent).toUser(...).build(); | |||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||||
| * @author billytomato | |||||
| */ | */ | ||||
| public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> { | public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> { | ||||
| private List<WxMpKefuMessage.WxMsgMenu> list = new ArrayList<>(); | |||||
| private String headContent; | private String headContent; | ||||
| private String tailContent; | private String tailContent; | ||||
| private String[] msgMenuList; | |||||
| public WxMsgMenuBuilder() { | public WxMsgMenuBuilder() { | ||||
| this.msgType = WxConsts.KefuMsgType.MSGMENU; | 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 addList(WxMpKefuMessage.WxMsgMenu... list) { | |||||
| Collections.addAll(this.list, list); | |||||
| return this; | |||||
| } | |||||
| public WxMsgMenuBuilder list(List<WxMpKefuMessage.WxMsgMenu> list) { | |||||
| this.list = list; | |||||
| return this; | |||||
| } | } | ||||
| public WxMsgMenuBuilder headContent(String headContent) { | public WxMsgMenuBuilder headContent(String headContent) { | ||||
| @@ -39,8 +46,12 @@ public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> { | |||||
| return this; | return this; | ||||
| } | } | ||||
| public WxMsgMenuBuilder msgMenuList(String... msgMenuList) { | |||||
| this.msgMenuList = msgMenuList; | |||||
| return this; | |||||
| @Override | |||||
| public WxMpKefuMessage build() { | |||||
| WxMpKefuMessage m = super.build(); | |||||
| m.setHeadContent(this.headContent); | |||||
| m.setTailContent(this.tailContent); | |||||
| m.setList(this.list); | |||||
| return m; | |||||
| } | } | ||||
| } | } | ||||
| @@ -81,19 +81,18 @@ public class WxMpKefuMessageGsonAdapter implements JsonSerializer<WxMpKefuMessag | |||||
| messageJson.add("miniprogrampage", miniProgramPage); | messageJson.add("miniprogrampage", miniProgramPage); | ||||
| break; | break; | ||||
| case KefuMsgType.MSGMENU: { | case KefuMsgType.MSGMENU: { | ||||
| JsonObject msgMenu = new JsonObject(); | |||||
| JsonArray array = new JsonArray(); | |||||
| for (String s : message.getMsgMenuList()) { | |||||
| JsonObject innerJson = new JsonObject(); | |||||
| final String[] split = s.split(","); | |||||
| innerJson.addProperty("id", split[0]); | |||||
| innerJson.addProperty("content", split[1]); | |||||
| array.add(innerJson); | |||||
| } | |||||
| msgMenu.addProperty("head_content", message.getHeadContent()); | |||||
| msgMenu.add("list", array); | |||||
| msgMenu.addProperty("tail_content", message.getTailContent()); | |||||
| messageJson.add("msgmenu", msgMenu); | |||||
| JsonObject msgmenuJsonObject = new JsonObject(); | |||||
| JsonArray listJsonArray = new JsonArray(); | |||||
| for (WxMpKefuMessage.WxMsgMenu list : message.getList()) { | |||||
| JsonObject listJson = new JsonObject(); | |||||
| listJson.addProperty("id", list.getId()); | |||||
| listJson.addProperty("content", list.getContent()); | |||||
| listJsonArray.add(listJson); | |||||
| } | |||||
| msgmenuJsonObject.addProperty("head_content",message.getHeadContent()); | |||||
| msgmenuJsonObject.add("list", listJsonArray); | |||||
| msgmenuJsonObject.addProperty("tail_content",message.getTailContent()); | |||||
| messageJson.add("msgmenu", msgmenuJsonObject); | |||||
| break; | break; | ||||
| } | } | ||||
| default: { | default: { | ||||
| @@ -156,15 +156,24 @@ public class WxMpKefuMessageTest { | |||||
| } | } | ||||
| public void testMsgMenuBuild() { | public void testMsgMenuBuild() { | ||||
| WxMpKefuMessage.WxMsgMenu wxMsgMenu1=new WxMpKefuMessage.WxMsgMenu(); | |||||
| wxMsgMenu1.setId("101"); | |||||
| wxMsgMenu1.setContent("msgmenu1"); | |||||
| WxMpKefuMessage.WxMsgMenu wxMsgMenu2=new WxMpKefuMessage.WxMsgMenu(); | |||||
| wxMsgMenu2.setId("102"); | |||||
| wxMsgMenu2.setContent("msgmenu2"); | |||||
| WxMpKefuMessage reply = WxMpKefuMessage.MSGMENU() | WxMpKefuMessage reply = WxMpKefuMessage.MSGMENU() | ||||
| .toUser("OPENID") | .toUser("OPENID") | ||||
| .msgMenuList("101,满意", "102,不满意") | |||||
| .headContent("您对本次服务是否满意呢?") | |||||
| .tailContent("欢迎再次光临") | |||||
| .addList(wxMsgMenu1).addList(wxMsgMenu2) | |||||
| .headContent("head_content") | |||||
| .tailContent("tail_content") | |||||
| .build(); | .build(); | ||||
| assertThat(reply.toJson()) | |||||
| .isEqualTo("{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"您对本次服务是否满意呢?\",\"list\":[{\"id\":\"101\",\"content\":\"满意\"},{\"id\":\"102\",\"content\":\"不满意\"}],\"tail_content\":\"欢迎再次光临\"}}"); | |||||
| Assert.assertEquals(reply.toJson(), | |||||
| "{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"head_content\",\"list\":[{\"id\":\"101\",\"content\":\"msgmenu1\"},{\"id\":\"102\",\"content\":\"msgmenu2\"}],\"tail_content\":\"tail_content\"}}"); | |||||
| } | } | ||||
| } | } | ||||