Skip to content

Commit b346224

Browse files
billytomatobinarywang
authored andcommitted
#1099 优化客服消息接口菜单消息实现
1 parent 09b726f commit b346224

File tree

4 files changed

+59
-34
lines changed

4 files changed

+59
-34
lines changed

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ public class WxMpKefuMessage implements Serializable {
3232
private String mpNewsMediaId;
3333
private String miniProgramAppId;
3434
private String miniProgramPagePath;
35-
private List<WxArticle> articles = new ArrayList<>();
36-
3735
private String headContent;
3836
private String tailContent;
37+
private List<WxArticle> articles = new ArrayList<>();
38+
private List<WxMsgMenu> list = new ArrayList<>();
3939
/**
4040
* 菜单消息里的菜单内容.
4141
* 请使用逗号分割的形式将id和content连起来放在数组的里面
@@ -145,4 +145,10 @@ public static class WxArticle implements Serializable {
145145
private String url;
146146
private String picUrl;
147147
}
148+
149+
@Data
150+
public static class WxMsgMenu implements Serializable {
151+
private String id;
152+
private String content;
153+
}
148154
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,37 @@
33
import me.chanjar.weixin.common.api.WxConsts;
44
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
55

6+
import java.util.ArrayList;
7+
import java.util.Collections;
8+
import java.util.List;
9+
610
/**
7-
* 卡券消息builder
11+
* 菜单消息builder
812
* <pre>
9-
* 用法: WxMpKefuMessage m = WxMpKefuMessage.WXCARD().cardId(...).toUser(...).build();
13+
* 用法:
14+
* WxMpKefuMessage m = WxMpKefuMessage.MSGMENU().addList(lists).headContent(headContent).tailContent(tailContent).toUser(...).build();
1015
* </pre>
1116
*
12-
* @author <a href="https://github.com/binarywang">Binary Wang</a>
17+
* @author billytomato
1318
*/
1419
public final class WxMsgMenuBuilder extends BaseBuilder<WxMsgMenuBuilder> {
20+
private List<WxMpKefuMessage.WxMsgMenu> list = new ArrayList<>();
1521
private String headContent;
1622
private String tailContent;
17-
private String[] msgMenuList;
23+
1824

1925
public WxMsgMenuBuilder() {
2026
this.msgType = WxConsts.KefuMsgType.MSGMENU;
2127
}
2228

23-
@Override
24-
public WxMpKefuMessage build() {
25-
WxMpKefuMessage m = super.build();
26-
m.setHeadContent(this.headContent);
27-
m.setMsgMenuList(this.msgMenuList);
28-
m.setTailContent(this.tailContent);
29-
return m;
29+
public WxMsgMenuBuilder addList(WxMpKefuMessage.WxMsgMenu... list) {
30+
Collections.addAll(this.list, list);
31+
return this;
32+
}
33+
34+
public WxMsgMenuBuilder list(List<WxMpKefuMessage.WxMsgMenu> list) {
35+
this.list = list;
36+
return this;
3037
}
3138

3239
public WxMsgMenuBuilder headContent(String headContent) {
@@ -39,8 +46,12 @@ public WxMsgMenuBuilder tailContent(String tailContent) {
3946
return this;
4047
}
4148

42-
public WxMsgMenuBuilder msgMenuList(String... msgMenuList) {
43-
this.msgMenuList = msgMenuList;
44-
return this;
49+
@Override
50+
public WxMpKefuMessage build() {
51+
WxMpKefuMessage m = super.build();
52+
m.setHeadContent(this.headContent);
53+
m.setTailContent(this.tailContent);
54+
m.setList(this.list);
55+
return m;
4556
}
4657
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,18 @@ public JsonElement serialize(WxMpKefuMessage message, Type typeOfSrc, JsonSerial
8181
messageJson.add("miniprogrampage", miniProgramPage);
8282
break;
8383
case KefuMsgType.MSGMENU: {
84-
JsonObject msgMenu = new JsonObject();
85-
JsonArray array = new JsonArray();
86-
for (String s : message.getMsgMenuList()) {
87-
JsonObject innerJson = new JsonObject();
88-
final String[] split = s.split(",");
89-
innerJson.addProperty("id", split[0]);
90-
innerJson.addProperty("content", split[1]);
91-
array.add(innerJson);
92-
}
93-
msgMenu.addProperty("head_content", message.getHeadContent());
94-
msgMenu.add("list", array);
95-
msgMenu.addProperty("tail_content", message.getTailContent());
96-
messageJson.add("msgmenu", msgMenu);
84+
JsonObject msgmenuJsonObject = new JsonObject();
85+
JsonArray listJsonArray = new JsonArray();
86+
for (WxMpKefuMessage.WxMsgMenu list : message.getList()) {
87+
JsonObject listJson = new JsonObject();
88+
listJson.addProperty("id", list.getId());
89+
listJson.addProperty("content", list.getContent());
90+
listJsonArray.add(listJson);
91+
}
92+
msgmenuJsonObject.addProperty("head_content",message.getHeadContent());
93+
msgmenuJsonObject.add("list", listJsonArray);
94+
msgmenuJsonObject.addProperty("tail_content",message.getTailContent());
95+
messageJson.add("msgmenu", msgmenuJsonObject);
9796
break;
9897
}
9998
default: {

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,24 @@ public void testMiniProgramPageBuild() {
156156
}
157157

158158
public void testMsgMenuBuild() {
159+
160+
WxMpKefuMessage.WxMsgMenu wxMsgMenu1=new WxMpKefuMessage.WxMsgMenu();
161+
wxMsgMenu1.setId("101");
162+
wxMsgMenu1.setContent("msgmenu1");
163+
164+
WxMpKefuMessage.WxMsgMenu wxMsgMenu2=new WxMpKefuMessage.WxMsgMenu();
165+
wxMsgMenu2.setId("102");
166+
wxMsgMenu2.setContent("msgmenu2");
167+
159168
WxMpKefuMessage reply = WxMpKefuMessage.MSGMENU()
160169
.toUser("OPENID")
161-
.msgMenuList("101,满意", "102,不满意")
162-
.headContent("您对本次服务是否满意呢?")
163-
.tailContent("欢迎再次光临")
170+
.addList(wxMsgMenu1).addList(wxMsgMenu2)
171+
.headContent("head_content")
172+
.tailContent("tail_content")
164173
.build();
165174

166-
assertThat(reply.toJson())
167-
.isEqualTo("{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"您对本次服务是否满意呢?\",\"list\":[{\"id\":\"101\",\"content\":\"满意\"},{\"id\":\"102\",\"content\":\"不满意\"}],\"tail_content\":\"欢迎再次光临\"}}");
175+
Assert.assertEquals(reply.toJson(),
176+
"{\"touser\":\"OPENID\",\"msgtype\":\"msgmenu\",\"msgmenu\":{\"head_content\":\"head_content\",\"list\":[{\"id\":\"101\",\"content\":\"msgmenu1\"},{\"id\":\"102\",\"content\":\"msgmenu2\"}],\"tail_content\":\"tail_content\"}}");
168177
}
169178

170179
}

0 commit comments

Comments
 (0)