Browse Source

#1099 优化客服消息接口菜单消息实现

master
billytomato 5 years ago
committed by Binary Wang
parent
commit
b3462243e5
4 changed files with 59 additions and 34 deletions
  1. +8
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java
  2. +25
    -14
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java
  3. +12
    -13
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java
  4. +14
    -5
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java

+ 8
- 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessage.java View File

@@ -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;
}
} }

+ 25
- 14
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/kefu/WxMsgMenuBuilder.java View File

@@ -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;
} }
} }

+ 12
- 13
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpKefuMessageGsonAdapter.java View File

@@ -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: {


+ 14
- 5
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/kefu/WxMpKefuMessageTest.java View File

@@ -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\"}}");
} }


} }

Loading…
Cancel
Save