Skip to content

Commit 23046ba

Browse files
committed
补全视频号客服消息类型映射
1 parent 4b5575c commit 23046ba

5 files changed

Lines changed: 139 additions & 6 deletions

File tree

.superpowers/sdd/task-1-report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
## Commit
1717

18-
`d742d673b`(新增视频号客服消息模型)。
18+
`a651123a1`(新增视频号客服消息模型)。
1919

2020
## 顾虑
2121

.superpowers/sdd/task-2-report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@
5252

5353
## 兼容性修复 Commit
5454

55-
待提交(仅包含接口变更与本报告;保留工作树中其他任务的未提交修改)。
55+
`4b5575cce`(修复客服服务入口接口兼容性)。

weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/kf/WxChannelKfSendMsgParam.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,26 @@ public class WxChannelKfSendMsgParam implements Serializable {
2828
@JsonProperty("text")
2929
private Text text;
3030

31+
/** 图片消息内容。 */
32+
@JsonProperty("image")
33+
private CosUrlMessage image;
34+
35+
/** 视频消息内容。 */
36+
@JsonProperty("video")
37+
private CosUrlMessage video;
38+
39+
/** 文件消息内容。 */
40+
@JsonProperty("file")
41+
private CosUrlMessage file;
42+
43+
/** 商品卡片消息内容。 */
44+
@JsonProperty("product_share")
45+
private ProductShareMessage productShare;
46+
47+
/** 订单卡片消息内容。 */
48+
@JsonProperty("order_share")
49+
private OrderShareMessage orderShare;
50+
3151
@Data
3252
@NoArgsConstructor
3353
public static class Text implements Serializable {
@@ -37,4 +57,34 @@ public static class Text implements Serializable {
3757
@JsonProperty("content")
3858
private String content;
3959
}
60+
61+
@Data
62+
@NoArgsConstructor
63+
public static class CosUrlMessage implements Serializable {
64+
65+
private static final long serialVersionUID = 1L;
66+
67+
@JsonProperty("cos_url")
68+
private String cosUrl;
69+
}
70+
71+
@Data
72+
@NoArgsConstructor
73+
public static class ProductShareMessage implements Serializable {
74+
75+
private static final long serialVersionUID = 1L;
76+
77+
@JsonProperty("product_id")
78+
private String productId;
79+
}
80+
81+
@Data
82+
@NoArgsConstructor
83+
public static class OrderShareMessage implements Serializable {
84+
85+
private static final long serialVersionUID = 1L;
86+
87+
@JsonProperty("order_id")
88+
private String orderId;
89+
}
4090
}

weixin-java-channel/src/test/java/me/chanjar/weixin/channel/bean/kf/WxChannelKfBeanTest.java

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.testng.Assert.assertEquals;
44
import static org.testng.Assert.assertFalse;
55
import static org.testng.Assert.assertNotNull;
6+
import static org.testng.Assert.assertTrue;
67

78
import me.chanjar.weixin.channel.util.JsonUtils;
89
import org.testng.annotations.Test;
@@ -12,10 +13,7 @@ public class WxChannelKfBeanTest {
1213

1314
@Test
1415
public void testSendMsgParamJson() {
15-
WxChannelKfSendMsgParam param = new WxChannelKfSendMsgParam();
16-
param.setRequestId("request-1");
17-
param.setOpenId("open-1");
18-
param.setMsgType("text");
16+
WxChannelKfSendMsgParam param = createSendMsgParam("text");
1917
WxChannelKfSendMsgParam.Text text = new WxChannelKfSendMsgParam.Text();
2018
text.setContent("hello");
2119
param.setText(text);
@@ -33,6 +31,67 @@ public void testSendMsgParamJson() {
3331
assertEquals(decoded.getText().getContent(), "hello");
3432
}
3533

34+
@Test
35+
public void testImageMessageJson() {
36+
WxChannelKfSendMsgParam param = createSendMsgParam("image");
37+
WxChannelKfSendMsgParam.CosUrlMessage image = new WxChannelKfSendMsgParam.CosUrlMessage();
38+
image.setCosUrl("https://example.test/image");
39+
param.setImage(image);
40+
41+
assertCosUrlMessageJson(param, "image", "https://example.test/image");
42+
}
43+
44+
@Test
45+
public void testVideoMessageJson() {
46+
WxChannelKfSendMsgParam param = createSendMsgParam("video");
47+
WxChannelKfSendMsgParam.CosUrlMessage video = new WxChannelKfSendMsgParam.CosUrlMessage();
48+
video.setCosUrl("https://example.test/video");
49+
param.setVideo(video);
50+
51+
assertCosUrlMessageJson(param, "video", "https://example.test/video");
52+
}
53+
54+
@Test
55+
public void testFileMessageJson() {
56+
WxChannelKfSendMsgParam param = createSendMsgParam("file");
57+
WxChannelKfSendMsgParam.CosUrlMessage file = new WxChannelKfSendMsgParam.CosUrlMessage();
58+
file.setCosUrl("https://example.test/file");
59+
param.setFile(file);
60+
61+
assertCosUrlMessageJson(param, "file", "https://example.test/file");
62+
}
63+
64+
@Test
65+
public void testProductShareMessageJson() {
66+
WxChannelKfSendMsgParam param = createSendMsgParam("product_share");
67+
WxChannelKfSendMsgParam.ProductShareMessage product =
68+
new WxChannelKfSendMsgParam.ProductShareMessage();
69+
product.setProductId("product-1");
70+
param.setProductShare(product);
71+
72+
String json = JsonUtils.encode(param);
73+
assertTrue(json.contains("\"product_share\":{\"product_id\":\"product-1\"}"));
74+
assertFalse(json.contains("productShare"));
75+
assertFalse(json.contains("productId"));
76+
WxChannelKfSendMsgParam decoded = JsonUtils.decode(json, WxChannelKfSendMsgParam.class);
77+
assertEquals(decoded.getProductShare().getProductId(), "product-1");
78+
}
79+
80+
@Test
81+
public void testOrderShareMessageJson() {
82+
WxChannelKfSendMsgParam param = createSendMsgParam("order_share");
83+
WxChannelKfSendMsgParam.OrderShareMessage order = new WxChannelKfSendMsgParam.OrderShareMessage();
84+
order.setOrderId("order-1");
85+
param.setOrderShare(order);
86+
87+
String json = JsonUtils.encode(param);
88+
assertTrue(json.contains("\"order_share\":{\"order_id\":\"order-1\"}"));
89+
assertFalse(json.contains("orderShare"));
90+
assertFalse(json.contains("orderId"));
91+
WxChannelKfSendMsgParam decoded = JsonUtils.decode(json, WxChannelKfSendMsgParam.class);
92+
assertEquals(decoded.getOrderShare().getOrderId(), "order-1");
93+
}
94+
3695
@Test
3796
public void testCosUploadResponseJson() {
3897
WxChannelKfCosUploadResponse response = JsonUtils.decode(
@@ -56,4 +115,27 @@ public void testSendMsgResponseJson() {
56115
assertEquals(JsonUtils.decode(JsonUtils.encode(response), WxChannelKfSendMsgResponse.class)
57116
.getMsgId(), "msg-1");
58117
}
118+
119+
private WxChannelKfSendMsgParam createSendMsgParam(String msgType) {
120+
WxChannelKfSendMsgParam param = new WxChannelKfSendMsgParam();
121+
param.setRequestId("request-1");
122+
param.setOpenId("open-1");
123+
param.setMsgType(msgType);
124+
return param;
125+
}
126+
127+
private void assertCosUrlMessageJson(WxChannelKfSendMsgParam param, String fieldName,
128+
String cosUrl) {
129+
String json = JsonUtils.encode(param);
130+
assertTrue(json.contains("\"" + fieldName + "\":{\"cos_url\":\"" + cosUrl + "\"}"));
131+
assertFalse(json.contains("cosUrl"));
132+
WxChannelKfSendMsgParam decoded = JsonUtils.decode(json, WxChannelKfSendMsgParam.class);
133+
if ("image".equals(fieldName)) {
134+
assertEquals(decoded.getImage().getCosUrl(), cosUrl);
135+
} else if ("video".equals(fieldName)) {
136+
assertEquals(decoded.getVideo().getCosUrl(), cosUrl);
137+
} else {
138+
assertEquals(decoded.getFile().getCosUrl(), cosUrl);
139+
}
140+
}
59141
}

weixin-java-channel/src/test/resources/testng.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
</test>
1919
<test name="Kf_Service_Test">
2020
<classes>
21+
<class name="me.chanjar.weixin.channel.bean.kf.WxChannelKfBeanTest"/>
2122
<class name="me.chanjar.weixin.channel.api.impl.WxChannelKfServiceImplTest"/>
2223
</classes>
2324
</test>

0 commit comments

Comments
 (0)