Skip to content

Commit 512975f

Browse files
🎨 #2851【公众号】群发消息支持多图片群发
1 parent 62490c7 commit 512975f

File tree

8 files changed

+71
-11
lines changed

8 files changed

+71
-11
lines changed

weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ public static class MassMsgType {
223223
public static final String TEXT = "text";
224224
public static final String VOICE = "voice";
225225
public static final String IMAGE = "image";
226+
public static final String IMAGES = "images";
226227
public static final String MPVIDEO = "mpvideo";
227228
}
228229

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassOpenIdsMessage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public class WxMpMassOpenIdsMessage implements Serializable {
3636
private String msgType;
3737
private String content;
3838
private String mediaId;
39+
/**
40+
* 图片列表
41+
*/
42+
private List<String> mediaIds;
3943
/**
4044
* 文章被判定为转载时,是否继续进行群发操作。
4145
*/

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpMassTagMessage.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
66

77
import java.io.Serializable;
8+
import java.util.List;
89

910
/**
1011
* 按标签群发的消息.
@@ -34,6 +35,10 @@ public class WxMpMassTagMessage implements Serializable {
3435
private String msgType;
3536
private String content;
3637
private String mediaId;
38+
/**
39+
* 图片列表
40+
*/
41+
private List<String> mediaIds;
3742
/**
3843
* 是否群发给所有用户.
3944
*/

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package me.chanjar.weixin.mp.util.json;
22

33
import com.google.gson.*;
4+
45
import me.chanjar.weixin.common.api.WxConsts;
56
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
67
import org.apache.commons.lang3.StringUtils;
78

89
import java.lang.reflect.Type;
10+
import java.util.List;
911

1012
/**
1113
* @author someone
@@ -39,8 +41,17 @@ public JsonElement serialize(WxMpMassOpenIdsMessage message, Type typeOfSrc, Jso
3941
}
4042
if (WxConsts.MassMsgType.IMAGE.equals(message.getMsgType())) {
4143
JsonObject sub = new JsonObject();
42-
sub.addProperty("media_id", message.getMediaId());
43-
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
44+
List<String> mediaIds = message.getMediaIds();
45+
if (mediaIds != null && !mediaIds.isEmpty() ) {
46+
JsonArray json = new JsonArray();
47+
mediaIds.forEach(json::add);
48+
sub.add("media_ids", json);
49+
messageJson.add(WxConsts.MassMsgType.IMAGES, sub);
50+
} else {
51+
String mediaId = message.getMediaId();
52+
sub.addProperty("media_id", mediaId);
53+
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
54+
}
4455
}
4556
if (WxConsts.MassMsgType.MPVIDEO.equals(message.getMsgType())) {
4657
JsonObject sub = new JsonObject();
@@ -64,4 +75,7 @@ public JsonElement serialize(WxMpMassOpenIdsMessage message, Type typeOfSrc, Jso
6475
return messageJson;
6576
}
6677

78+
public static void main(String[] args) {
79+
80+
}
6781
}

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package me.chanjar.weixin.mp.util.json;
22

3-
import com.google.gson.JsonElement;
4-
import com.google.gson.JsonObject;
5-
import com.google.gson.JsonSerializationContext;
6-
import com.google.gson.JsonSerializer;
3+
import com.google.gson.*;
4+
75
import me.chanjar.weixin.common.api.WxConsts;
86
import me.chanjar.weixin.mp.bean.WxMpMassTagMessage;
97
import org.apache.commons.lang3.StringUtils;
108

119
import java.lang.reflect.Type;
10+
import java.util.List;
1211

1312
/**
1413
* 群发消息json转换适配器.
@@ -47,8 +46,17 @@ public JsonElement serialize(WxMpMassTagMessage message, Type typeOfSrc, JsonSer
4746
}
4847
if (WxConsts.MassMsgType.IMAGE.equals(message.getMsgType())) {
4948
JsonObject sub = new JsonObject();
50-
sub.addProperty("media_id", message.getMediaId());
51-
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
49+
List<String> mediaIds = message.getMediaIds();
50+
if (mediaIds != null && !mediaIds.isEmpty() ) {
51+
JsonArray json = new JsonArray();
52+
mediaIds.forEach(json::add);
53+
sub.add("media_ids", json);
54+
messageJson.add(WxConsts.MassMsgType.IMAGES, sub);
55+
} else {
56+
String mediaId = message.getMediaId();
57+
sub.addProperty("media_id", mediaId);
58+
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
59+
}
5260
}
5361
if (WxConsts.MassMsgType.MPVIDEO.equals(message.getMsgType())) {
5462
JsonObject sub = new JsonObject();

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImplTest.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.chanjar.weixin.mp.api.impl;
22

33
import com.google.inject.Inject;
4+
45
import me.chanjar.weixin.common.api.WxConsts;
56
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
67
import me.chanjar.weixin.common.error.WxErrorException;
@@ -21,6 +22,8 @@
2122

2223
import java.io.IOException;
2324
import java.io.InputStream;
25+
import java.util.ArrayList;
26+
import java.util.List;
2427

2528
import static org.testng.Assert.assertNotNull;
2629

@@ -38,7 +41,7 @@ public class WxMpMassMessageServiceImplTest {
3841
@Test
3942
public void testTextMassOpenIdsMessageSend() throws WxErrorException {
4043
// 发送群发消息
41-
TestConfigStorage configProvider = (TestConfigStorage) this.wxService .getWxMpConfigStorage();
44+
TestConfigStorage configProvider = (TestConfigStorage) this.wxService.getWxMpConfigStorage();
4245
WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage();
4346
massMessage.setMsgType(WxConsts.MassMsgType.TEXT);
4447
massMessage.setContent("测试群发消息\n欢迎欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");
@@ -63,6 +66,30 @@ public void testMediaMassOpenIdsMessageSend(String massMsgType, String mediaId)
6366
assertNotNull(massResult.getMsgId());
6467
}
6568

69+
@Test
70+
public void testImagesMassOpenIdsMessageSend() throws WxErrorException {
71+
// 发送群发消息
72+
List<String> massMsg = new ArrayList<>();
73+
for (int i = 0; i < 2; i++) {
74+
try (InputStream inputStream = ClassLoader
75+
.getSystemResourceAsStream(i + ".jpeg")) {
76+
WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, inputStream);
77+
assertNotNull(uploadMediaRes);
78+
assertNotNull(uploadMediaRes.getMediaId());
79+
massMsg.add(uploadMediaRes.getMediaId());
80+
} catch (IOException e) {
81+
e.printStackTrace();
82+
}
83+
}
84+
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
85+
massMessage.setMsgType(WxConsts.MassMsgType.IMAGE);
86+
massMessage.setMediaIds(new ArrayList<>(massMsg));
87+
massMessage.setSendAll(true);
88+
WxMpMassSendResult massResult = this.wxService.getMassMessageService().massGroupMessageSend(massMessage);
89+
assertNotNull(massResult);
90+
assertNotNull(massResult.getMsgId());
91+
}
92+
6693
@Test
6794
public void testTextMassGroupMessageSend() throws WxErrorException {
6895
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
@@ -77,7 +104,7 @@ public void testTextMassGroupMessageSend() throws WxErrorException {
77104
}
78105

79106
@Test(dataProvider = "massMessages")
80-
public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException {
107+
public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException {
81108
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
82109
massMessage.setMsgType(massMsgType);
83110
massMessage.setMediaId(mediaId);
@@ -123,7 +150,8 @@ public Object[][] massMessages() throws WxErrorException, IOException {
123150
.mediaUpload(WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, inputStream);
124151
assertNotNull(uploadMediaRes);
125152
assertNotNull(uploadMediaRes.getMediaId());
126-
messages[1] = new Object[]{WxConsts.MassMsgType.IMAGE, uploadMediaRes.getMediaId()};
153+
messages[1] = new Object[]{WxConsts.MassMsgType.IMAGE, uploadMediaRes.getMediaId()
154+
};
127155
}
128156

129157
/*
59.5 KB
Loading
74.7 KB
Loading

0 commit comments

Comments
 (0)