@@ -32,10 +32,10 @@ public class WxMpKefuMessage implements Serializable { | |||
private String mpNewsMediaId; | |||
private String miniProgramAppId; | |||
private String miniProgramPagePath; | |||
private List<WxArticle> articles = new ArrayList<>(); | |||
private String headContent; | |||
private String tailContent; | |||
private List<WxArticle> articles = new ArrayList<>(); | |||
private List<WxMsgMenu> list = new ArrayList<>(); | |||
/** | |||
* 菜单消息里的菜单内容. | |||
* 请使用逗号分割的形式将id和content连起来放在数组的里面 | |||
@@ -145,4 +145,10 @@ public class WxMpKefuMessage implements Serializable { | |||
private String url; | |||
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.mp.bean.kefu.WxMpKefuMessage; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.List; | |||
/** | |||
* 卡券消息builder | |||
* 菜单消息builder | |||
* <pre> | |||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.WXCARD().cardId(...).toUser(...).build(); | |||
* 用法: | |||
* WxMpKefuMessage m = WxMpKefuMessage.MSGMENU().addList(lists).headContent(headContent).tailContent(tailContent).toUser(...).build(); | |||
* </pre> | |||
* | |||
* @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
* @author billytomato | |||
*/ | |||
public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> { | |||
private List<WxMpKefuMessage.WxMsgMenu> list = new ArrayList<>(); | |||
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 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) { | |||
@@ -39,8 +46,12 @@ public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> { | |||
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); | |||
break; | |||
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; | |||
} | |||
default: { | |||
@@ -156,15 +156,24 @@ public class WxMpKefuMessageTest { | |||
} | |||
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() | |||
.toUser("OPENID") | |||
.msgMenuList("101,满意", "102,不满意") | |||
.headContent("您对本次服务是否满意呢?") | |||
.tailContent("欢迎再次光临") | |||
.addList(wxMsgMenu1).addList(wxMsgMenu2) | |||
.headContent("head_content") | |||
.tailContent("tail_content") | |||
.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\"}}"); | |||
} | |||
} |