mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-04 12:47:46 +08:00
#615 公众号客服消息添加 "发送小程序卡片" 类型
This commit is contained in:
parent
f704b1a538
commit
96e7310143
@ -78,6 +78,11 @@ public class WxConsts {
|
|||||||
* 转发到客服的消息.
|
* 转发到客服的消息.
|
||||||
*/
|
*/
|
||||||
public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
|
public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序卡片(要求小程序与公众号已关联)
|
||||||
|
*/
|
||||||
|
public static final String MINIPROGRAMPAGE="miniprogrampage";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,6 +30,8 @@ public class WxMpKefuMessage implements Serializable {
|
|||||||
private String kfAccount;
|
private String kfAccount;
|
||||||
private String cardId;
|
private String cardId;
|
||||||
private String mpNewsMediaId;
|
private String mpNewsMediaId;
|
||||||
|
private String miniProgramAppId;
|
||||||
|
private String miniProgramPagePath;
|
||||||
private List<WxArticle> articles = new ArrayList<>();
|
private List<WxArticle> articles = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,6 +90,13 @@ public class WxMpKefuMessage implements Serializable {
|
|||||||
return new WxCardBuilder();
|
return new WxCardBuilder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序卡片
|
||||||
|
*/
|
||||||
|
public static MiniProgramPageBuilder MINIPROGRAMPAGE() {
|
||||||
|
return new MiniProgramPageBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
* 请使用
|
* 请使用
|
||||||
@ -99,6 +108,7 @@ public class WxMpKefuMessage implements Serializable {
|
|||||||
* {@link WxConsts.KefuMsgType#NEWS}
|
* {@link WxConsts.KefuMsgType#NEWS}
|
||||||
* {@link WxConsts.KefuMsgType#MPNEWS}
|
* {@link WxConsts.KefuMsgType#MPNEWS}
|
||||||
* {@link WxConsts.KefuMsgType#WXCARD}
|
* {@link WxConsts.KefuMsgType#WXCARD}
|
||||||
|
* {@link WxConsts.KefuMsgType#MINIPROGRAMPAGE}
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package me.chanjar.weixin.mp.builder.kefu;
|
||||||
|
|
||||||
|
import me.chanjar.weixin.common.api.WxConsts.KefuMsgType;
|
||||||
|
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序卡片 builder
|
||||||
|
* <pre>
|
||||||
|
* 用法:
|
||||||
|
* WxMpKefuMessage m = WxMpKefuMessage.MINIPROGRAMPAGE().title("xxxx").thumbMediaId("xxxxx").appId("xxxx").pagePath("****").toUser(...).build();
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author boris.bao
|
||||||
|
*/
|
||||||
|
public final class MiniProgramPageBuilder extends BaseBuilder<MiniProgramPageBuilder> {
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
private String appId;
|
||||||
|
private String pagePath;
|
||||||
|
private String thumbMediaId;
|
||||||
|
|
||||||
|
public MiniProgramPageBuilder() {
|
||||||
|
this.msgType = KefuMsgType.MINIPROGRAMPAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MiniProgramPageBuilder title(String title) {
|
||||||
|
this.title = title;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MiniProgramPageBuilder appId(String appId) {
|
||||||
|
this.appId = appId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MiniProgramPageBuilder pagePath(String pagePath) {
|
||||||
|
this.pagePath = pagePath;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MiniProgramPageBuilder thumbMediaId(String thumbMediaId) {
|
||||||
|
this.thumbMediaId = thumbMediaId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxMpKefuMessage build() {
|
||||||
|
WxMpKefuMessage m = super.build();
|
||||||
|
m.setTitle(this.title);
|
||||||
|
m.setMiniProgramAppId(this.appId);
|
||||||
|
m.setMiniProgramPagePath(this.pagePath);
|
||||||
|
m.setThumbMediaId(this.thumbMediaId);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.util.json;
|
|||||||
|
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import me.chanjar.weixin.common.api.WxConsts;
|
import me.chanjar.weixin.common.api.WxConsts;
|
||||||
|
import me.chanjar.weixin.common.api.WxConsts.KefuMsgType;
|
||||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
|
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -79,6 +80,15 @@ public class WxMpKefuMessageGsonAdapter implements JsonSerializer<WxMpKefuMessag
|
|||||||
messageJson.add("wxcard", wxcard);
|
messageJson.add("wxcard", wxcard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (KefuMsgType.MINIPROGRAMPAGE.equals(message.getMsgType())) {
|
||||||
|
JsonObject miniProgramPage = new JsonObject();
|
||||||
|
miniProgramPage.addProperty("title", message.getTitle());
|
||||||
|
miniProgramPage.addProperty("appid", message.getMiniProgramAppId());
|
||||||
|
miniProgramPage.addProperty("pagepath", message.getMiniProgramPagePath());
|
||||||
|
miniProgramPage.addProperty("thumb_media_id", message.getThumbMediaId());
|
||||||
|
messageJson.add("miniprogrampage", miniProgramPage);
|
||||||
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(message.getKfAccount())) {
|
if (StringUtils.isNotBlank(message.getKfAccount())) {
|
||||||
JsonObject newsJsonObject = new JsonObject();
|
JsonObject newsJsonObject = new JsonObject();
|
||||||
newsJsonObject.addProperty("kf_account", message.getKfAccount());
|
newsJsonObject.addProperty("kf_account", message.getKfAccount());
|
||||||
|
@ -2,8 +2,8 @@ package me.chanjar.weixin.mp.bean.kefu;
|
|||||||
|
|
||||||
import me.chanjar.weixin.common.api.WxConsts;
|
import me.chanjar.weixin.common.api.WxConsts;
|
||||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage.WxArticle;
|
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage.WxArticle;
|
||||||
import org.testng.*;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.*;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public class WxMpKefuMessageTest {
|
public class WxMpKefuMessageTest {
|
||||||
@ -13,12 +13,14 @@ public class WxMpKefuMessageTest {
|
|||||||
reply.setToUser("OPENID");
|
reply.setToUser("OPENID");
|
||||||
reply.setMsgType(WxConsts.KefuMsgType.TEXT);
|
reply.setMsgType(WxConsts.KefuMsgType.TEXT);
|
||||||
reply.setContent("sfsfdsdf");
|
reply.setContent("sfsfdsdf");
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
|
Assert
|
||||||
|
.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testTextBuild() {
|
public void testTextBuild() {
|
||||||
WxMpKefuMessage reply = WxMpKefuMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
|
WxMpKefuMessage reply = WxMpKefuMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build();
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
|
Assert
|
||||||
|
.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testImageReply() {
|
public void testImageReply() {
|
||||||
@ -26,12 +28,14 @@ public class WxMpKefuMessageTest {
|
|||||||
reply.setToUser("OPENID");
|
reply.setToUser("OPENID");
|
||||||
reply.setMsgType(WxConsts.KefuMsgType.IMAGE);
|
reply.setMsgType(WxConsts.KefuMsgType.IMAGE);
|
||||||
reply.setMediaId("MEDIA_ID");
|
reply.setMediaId("MEDIA_ID");
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testImageBuild() {
|
public void testImageBuild() {
|
||||||
WxMpKefuMessage reply = WxMpKefuMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
|
WxMpKefuMessage reply = WxMpKefuMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build();
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVoiceReply() {
|
public void testVoiceReply() {
|
||||||
@ -39,12 +43,14 @@ public class WxMpKefuMessageTest {
|
|||||||
reply.setToUser("OPENID");
|
reply.setToUser("OPENID");
|
||||||
reply.setMsgType(WxConsts.KefuMsgType.VOICE);
|
reply.setMsgType(WxConsts.KefuMsgType.VOICE);
|
||||||
reply.setMediaId("MEDIA_ID");
|
reply.setMediaId("MEDIA_ID");
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVoiceBuild() {
|
public void testVoiceBuild() {
|
||||||
WxMpKefuMessage reply = WxMpKefuMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
|
WxMpKefuMessage reply = WxMpKefuMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build();
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVideoReply() {
|
public void testVideoReply() {
|
||||||
@ -55,12 +61,15 @@ public class WxMpKefuMessageTest {
|
|||||||
reply.setThumbMediaId("MEDIA_ID");
|
reply.setThumbMediaId("MEDIA_ID");
|
||||||
reply.setTitle("TITLE");
|
reply.setTitle("TITLE");
|
||||||
reply.setDescription("DESCRIPTION");
|
reply.setDescription("DESCRIPTION");
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVideoBuild() {
|
public void testVideoBuild() {
|
||||||
WxMpKefuMessage reply = WxMpKefuMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build();
|
WxMpKefuMessage reply = WxMpKefuMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID")
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}");
|
.thumbMediaId("MEDIA_ID").description("DESCRIPTION").build();
|
||||||
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testMusicReply() {
|
public void testMusicReply() {
|
||||||
@ -72,7 +81,8 @@ public class WxMpKefuMessageTest {
|
|||||||
reply.setTitle("TITLE");
|
reply.setTitle("TITLE");
|
||||||
reply.setMusicUrl("MUSIC_URL");
|
reply.setMusicUrl("MUSIC_URL");
|
||||||
reply.setHqMusicUrl("HQ_MUSIC_URL");
|
reply.setHqMusicUrl("HQ_MUSIC_URL");
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testMusicBuild() {
|
public void testMusicBuild() {
|
||||||
@ -84,7 +94,8 @@ public class WxMpKefuMessageTest {
|
|||||||
.musicUrl("MUSIC_URL")
|
.musicUrl("MUSIC_URL")
|
||||||
.hqMusicUrl("HQ_MUSIC_URL")
|
.hqMusicUrl("HQ_MUSIC_URL")
|
||||||
.build();
|
.build();
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNewsReply() {
|
public void testNewsReply() {
|
||||||
@ -106,8 +117,8 @@ public class WxMpKefuMessageTest {
|
|||||||
article2.setTitle("Happy Day");
|
article2.setTitle("Happy Day");
|
||||||
reply.getArticles().add(article2);
|
reply.getArticles().add(article2);
|
||||||
|
|
||||||
|
Assert.assertEquals(reply.toJson(),
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}");
|
"{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNewsBuild() {
|
public void testNewsBuild() {
|
||||||
@ -125,7 +136,22 @@ public class WxMpKefuMessageTest {
|
|||||||
|
|
||||||
WxMpKefuMessage reply = WxMpKefuMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build();
|
WxMpKefuMessage reply = WxMpKefuMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build();
|
||||||
|
|
||||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}");
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testMiniProgramPageBuild() {
|
||||||
|
|
||||||
|
WxMpKefuMessage reply = WxMpKefuMessage.MINIPROGRAMPAGE()
|
||||||
|
.toUser("OPENID")
|
||||||
|
.title("title")
|
||||||
|
.appId("appid")
|
||||||
|
.pagePath("pagepath")
|
||||||
|
.thumbMediaId("thumb_media_id")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Assert.assertEquals(reply.toJson(),
|
||||||
|
"{\"touser\":\"OPENID\",\"msgtype\":\"miniprogrampage\",\"miniprogrampage\":{\"title\":\"title\",\"appid\":\"appid\",\"pagepath\":\"pagepath\",\"thumb_media_id\":\"thumb_media_id\"}}");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user