Skip to content

Commit a687d00

Browse files
committed
binarywang#425 小程序客服消息新增图文链接消息支持
1 parent b44f9b3 commit a687d00

File tree

11 files changed

+185
-107
lines changed

11 files changed

+185
-107
lines changed

weixin-java-miniapp/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
<artifactId>joda-time</artifactId>
6262
<scope>test</scope>
6363
</dependency>
64+
<dependency>
65+
<groupId>org.assertj</groupId>
66+
<artifactId>assertj-guava</artifactId>
67+
<scope>test</scope>
68+
</dependency>
6469
<dependency>
6570
<groupId>redis.clients</groupId>
6671
<artifactId>jedis</artifactId>

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaKefuMessage.java

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package cn.binarywang.wx.miniapp.bean;
22

33
import cn.binarywang.wx.miniapp.builder.ImageBuilder;
4+
import cn.binarywang.wx.miniapp.builder.LinkBuilder;
45
import cn.binarywang.wx.miniapp.builder.TextBuilder;
5-
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
6+
import com.google.gson.GsonBuilder;
7+
import com.google.gson.annotations.SerializedName;
8+
import lombok.AllArgsConstructor;
9+
import lombok.Builder;
610
import lombok.Data;
711

812
import java.io.Serializable;
@@ -16,13 +20,59 @@
1620
public class WxMaKefuMessage implements Serializable {
1721
private static final long serialVersionUID = -9196732086954365246L;
1822

23+
@SerializedName("touser")
1924
private String toUser;
25+
26+
@SerializedName("msgtype")
2027
private String msgType;
21-
private String content;
22-
private String mediaId;
23-
private String thumbMediaId;
24-
private String title;
25-
private String description;
28+
29+
@SerializedName("text")
30+
private KfText text;
31+
32+
@SerializedName("image")
33+
private KfImage image;
34+
35+
@SerializedName("link")
36+
private KfLink link;
37+
38+
@SerializedName("miniprogrampage")
39+
private KfMaPage maPage;
40+
41+
@Data
42+
@AllArgsConstructor
43+
public static class KfText {
44+
private String content;
45+
}
46+
47+
@Data
48+
@AllArgsConstructor
49+
public static class KfImage {
50+
@SerializedName("media_id")
51+
private String mediaId;
52+
}
53+
54+
@Data
55+
@Builder
56+
public static class KfLink {
57+
private String title;
58+
private String description;
59+
private String url;
60+
61+
@SerializedName("thumb_url")
62+
private String thumbUrl;
63+
}
64+
65+
@Data
66+
@Builder
67+
public static class KfMaPage {
68+
private String title;
69+
70+
@SerializedName("pagepath")
71+
private String pagePath;
72+
73+
@SerializedName("thumb_media_id")
74+
private String thumbMediaId;
75+
}
2676

2777
/**
2878
* 获得文本消息builder.
@@ -38,8 +88,15 @@ public static ImageBuilder newImageBuilder() {
3888
return new ImageBuilder();
3989
}
4090

91+
/**
92+
* 获得图文链接消息builder.
93+
*/
94+
public static LinkBuilder newLinkBuilder() {
95+
return new LinkBuilder();
96+
}
97+
4198
public String toJson() {
42-
return WxMaGsonBuilder.create().toJson(this);
99+
return new GsonBuilder().create().toJson(this);
43100
}
44101

45102
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ public static WxMaWxcodeLimit fromJson(String json) {
3131
return WxMaGsonBuilder.create().fromJson(json, WxMaWxcodeLimit.class);
3232
}
3333

34+
@Override
3435
public String toString() {
3536
return super.toString();
36-
}
37-
37+
}
38+
3839
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
55

66
/**
7+
* 图片消息builder.
8+
*
79
* @author <a href="https://github.com/binarywang">Binary Wang</a>
810
*/
911
public final class ImageBuilder extends BaseBuilder<ImageBuilder> {
@@ -21,7 +23,7 @@ public ImageBuilder mediaId(String mediaId) {
2123
@Override
2224
public WxMaKefuMessage build() {
2325
WxMaKefuMessage m = super.build();
24-
m.setMediaId(this.mediaId);
26+
m.setImage(new WxMaKefuMessage.KfImage(this.mediaId));
2527
return m;
2628
}
2729
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package cn.binarywang.wx.miniapp.builder;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
4+
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
5+
6+
/**
7+
* 图文链接builder
8+
*
9+
* @author <a href="https://github.com/binarywang">Binary Wang</a>
10+
*/
11+
public class LinkBuilder extends BaseBuilder<LinkBuilder> {
12+
private String title;
13+
private String description;
14+
private String url;
15+
private String thumbUrl;
16+
17+
public LinkBuilder() {
18+
this.msgType = WxMaConstants.KefuMsgType.IMAGE;
19+
}
20+
21+
public LinkBuilder title(String title) {
22+
this.title = title;
23+
return this;
24+
}
25+
26+
public LinkBuilder description(String description) {
27+
this.description = description;
28+
return this;
29+
}
30+
31+
public LinkBuilder url(String url) {
32+
this.url = url;
33+
return this;
34+
}
35+
36+
public LinkBuilder thumbUrl(String thumbUrl) {
37+
this.thumbUrl = thumbUrl;
38+
return this;
39+
}
40+
41+
@Override
42+
public WxMaKefuMessage build() {
43+
WxMaKefuMessage m = super.build();
44+
m.setLink(WxMaKefuMessage.KfLink.builder().title(this.title)
45+
.description(this.description)
46+
.url(this.url)
47+
.thumbUrl(this.thumbUrl)
48+
.build()
49+
);
50+
return m;
51+
}
52+
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/TextBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
55

66
/**
7+
* 文本消息builder.
8+
*
79
* @author <a href="https://github.com/binarywang">Binary Wang</a>
810
*/
911
public final class TextBuilder extends BaseBuilder<TextBuilder> {
@@ -21,7 +23,7 @@ public TextBuilder content(String content) {
2123
@Override
2224
public WxMaKefuMessage build() {
2325
WxMaKefuMessage m = super.build();
24-
m.setContent(this.content);
26+
m.setText(new WxMaKefuMessage.KfText(this.content));
2527
return m;
2628
}
2729
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,70 @@
22

33
/**
44
* <pre>
5-
* 小程序常量
5+
* 小程序常量.
66
* </pre>
77
*
88
* @author <a href="https://github.com/binarywang">Binary Wang</a>
99
*/
1010
public class WxMaConstants {
1111
/**
12-
* 微信接口返回的参数errcode
12+
* 微信接口返回的参数errcode.
1313
*/
1414
public static final String ERRCODE = "errcode";
1515

1616
/**
17-
* 素材类型
17+
* 素材类型.
1818
*/
1919
public static class MediaType {
2020
/**
21-
* 图片
21+
* 图片.
2222
*/
2323
public static final String IMAGE = "image";
2424
}
2525

2626
/**
27-
* 消息格式
27+
* 消息格式.
2828
*/
2929
public static class MsgDataFormat {
3030
public static final String XML = "XML";
3131
public static final String JSON = "JSON";
3232
}
3333

3434
/**
35-
* 客服消息的消息类型
35+
* 客服消息的消息类型.
3636
*/
3737
public static class KefuMsgType {
3838
/**
39-
* 文本消息
39+
* 文本消息.
4040
*/
4141
public static final String TEXT = "text";
4242
/**
43-
* 图片消息
43+
* 图片消息.
4444
*/
4545
public static final String IMAGE = "image";
46+
/**
47+
* 图文链接.
48+
*/
49+
public static final String LINK = "link";
50+
/**
51+
* 小程序卡片消息.
52+
*/
53+
public static final String MA_PAGE = "miniprogrampage";
4654
}
4755

4856
public static final class ErrorCode {
4957
/**
50-
* 40001 获取access_token时AppSecret错误,或者access_token无效
58+
* 40001 获取access_token时AppSecret错误,或者access_token无效.
5159
*/
5260
public static final int ERR_40001 = 40001;
5361

5462
/**
55-
* 42001 access_token超时
63+
* 42001 access_token超时.
5664
*/
5765
public static final int ERR_42001 = 42001;
5866

5967
/**
60-
* 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期)
68+
* 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期).
6169
*/
6270
public static final int ERR_40014 = 40014;
6371
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaGsonBuilder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cn.binarywang.wx.miniapp.util.json;
22

3-
import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
43
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
54
import com.google.gson.Gson;
65
import com.google.gson.GsonBuilder;
@@ -13,7 +12,6 @@ public class WxMaGsonBuilder {
1312

1413
static {
1514
INSTANCE.disableHtmlEscaping();
16-
INSTANCE.registerTypeAdapter(WxMaKefuMessage.class, new WxMaKefuMessageGsonAdapter());
1715
INSTANCE.registerTypeAdapter(WxMaTemplateMessage.class, new WxMaTemplateMessageGsonAdapter());
1816
}
1917

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaKefuMessageGsonAdapter.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@
77
import cn.binarywang.wx.miniapp.test.TestConfig;
88
import com.google.common.collect.Lists;
99
import com.google.inject.Inject;
10-
import me.chanjar.weixin.common.api.WxConsts;
1110
import me.chanjar.weixin.common.exception.WxErrorException;
12-
import org.testng.annotations.Guice;
13-
import org.testng.annotations.Test;
11+
import org.testng.annotations.*;
1412

1513
import java.text.SimpleDateFormat;
1614
import java.util.Date;
1715

1816
/**
19-
* 测试客服相关接口
17+
* 测试消息相关接口
2018
*
2119
* @author <a href="https://github.com/binarywang">Binary Wang</a>
2220
*/
@@ -25,26 +23,14 @@
2523
public class WxMaMsgServiceImplTest {
2624

2725
@Inject
28-
protected WxMaService wxService;
29-
30-
public void testSendKefuMpNewsMessage() throws WxErrorException {
31-
TestConfig configStorage = (TestConfig) this.wxService
32-
.getWxMaConfig();
33-
WxMaKefuMessage message = new WxMaKefuMessage();
34-
message.setMsgType(WxConsts.KefuMsgType.MPNEWS);
35-
message.setToUser(configStorage.getOpenid());
36-
37-
this.wxService.getMsgService().sendKefuMsg(message);
38-
}
26+
private WxMaService wxService;
3927

4028
public void testSendKefuMessage() throws WxErrorException {
41-
TestConfig config = (TestConfig) this.wxService
42-
.getWxMaConfig();
43-
WxMaKefuMessage message = new WxMaKefuMessage();
44-
message.setMsgType(WxConsts.KefuMsgType.TEXT);
45-
message.setToUser(config.getOpenid());
46-
message.setContent(
47-
"欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");
29+
TestConfig config = (TestConfig) this.wxService.getWxMaConfig();
30+
WxMaKefuMessage message = WxMaKefuMessage.newTextBuilder()
31+
.toUser(config.getOpenid())
32+
.content("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>")
33+
.build();
4834

4935
this.wxService.getMsgService().sendKefuMsg(message);
5036
}

0 commit comments

Comments
 (0)