🎨 #2851【公众号】群发消息支持多图片群发

This commit is contained in:
唐英鹏 2022-10-25 16:45:20 +08:00 committed by GitHub
parent 62490c77b6
commit 512975fb86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 71 additions and 11 deletions

View File

@ -223,6 +223,7 @@ public class WxConsts {
public static final String TEXT = "text";
public static final String VOICE = "voice";
public static final String IMAGE = "image";
public static final String IMAGES = "images";
public static final String MPVIDEO = "mpvideo";
}

View File

@ -36,6 +36,10 @@ public class WxMpMassOpenIdsMessage implements Serializable {
private String msgType;
private String content;
private String mediaId;
/**
* 图片列表
*/
private List<String> mediaIds;
/**
* 文章被判定为转载时是否继续进行群发操作
*/

View File

@ -5,6 +5,7 @@ import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
import java.util.List;
/**
* 按标签群发的消息.
@ -34,6 +35,10 @@ public class WxMpMassTagMessage implements Serializable {
private String msgType;
private String content;
private String mediaId;
/**
* 图片列表
*/
private List<String> mediaIds;
/**
* 是否群发给所有用户.
*/

View File

@ -1,11 +1,13 @@
package me.chanjar.weixin.mp.util.json;
import com.google.gson.*;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type;
import java.util.List;
/**
* @author someone
@ -39,8 +41,17 @@ public class WxMpMassOpenIdsMessageGsonAdapter implements JsonSerializer<WxMpMas
}
if (WxConsts.MassMsgType.IMAGE.equals(message.getMsgType())) {
JsonObject sub = new JsonObject();
sub.addProperty("media_id", message.getMediaId());
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
List<String> mediaIds = message.getMediaIds();
if (mediaIds != null && !mediaIds.isEmpty() ) {
JsonArray json = new JsonArray();
mediaIds.forEach(json::add);
sub.add("media_ids", json);
messageJson.add(WxConsts.MassMsgType.IMAGES, sub);
} else {
String mediaId = message.getMediaId();
sub.addProperty("media_id", mediaId);
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
}
}
if (WxConsts.MassMsgType.MPVIDEO.equals(message.getMsgType())) {
JsonObject sub = new JsonObject();
@ -64,4 +75,7 @@ public class WxMpMassOpenIdsMessageGsonAdapter implements JsonSerializer<WxMpMas
return messageJson;
}
public static void main(String[] args) {
}
}

View File

@ -1,14 +1,13 @@
package me.chanjar.weixin.mp.util.json;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.*;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.bean.WxMpMassTagMessage;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type;
import java.util.List;
/**
* 群发消息json转换适配器.
@ -47,8 +46,17 @@ public class WxMpMassTagMessageGsonAdapter implements JsonSerializer<WxMpMassTag
}
if (WxConsts.MassMsgType.IMAGE.equals(message.getMsgType())) {
JsonObject sub = new JsonObject();
sub.addProperty("media_id", message.getMediaId());
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
List<String> mediaIds = message.getMediaIds();
if (mediaIds != null && !mediaIds.isEmpty() ) {
JsonArray json = new JsonArray();
mediaIds.forEach(json::add);
sub.add("media_ids", json);
messageJson.add(WxConsts.MassMsgType.IMAGES, sub);
} else {
String mediaId = message.getMediaId();
sub.addProperty("media_id", mediaId);
messageJson.add(WxConsts.MassMsgType.IMAGE, sub);
}
}
if (WxConsts.MassMsgType.MPVIDEO.equals(message.getMsgType())) {
JsonObject sub = new JsonObject();

View File

@ -1,6 +1,7 @@
package me.chanjar.weixin.mp.api.impl;
import com.google.inject.Inject;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
@ -21,6 +22,8 @@ import org.testng.annotations.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import static org.testng.Assert.assertNotNull;
@ -38,7 +41,7 @@ public class WxMpMassMessageServiceImplTest {
@Test
public void testTextMassOpenIdsMessageSend() throws WxErrorException {
// 发送群发消息
TestConfigStorage configProvider = (TestConfigStorage) this.wxService .getWxMpConfigStorage();
TestConfigStorage configProvider = (TestConfigStorage) this.wxService.getWxMpConfigStorage();
WxMpMassOpenIdsMessage massMessage = new WxMpMassOpenIdsMessage();
massMessage.setMsgType(WxConsts.MassMsgType.TEXT);
massMessage.setContent("测试群发消息\n欢迎欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");
@ -63,6 +66,30 @@ public class WxMpMassMessageServiceImplTest {
assertNotNull(massResult.getMsgId());
}
@Test
public void testImagesMassOpenIdsMessageSend() throws WxErrorException {
// 发送群发消息
List<String> massMsg = new ArrayList<>();
for (int i = 0; i < 2; i++) {
try (InputStream inputStream = ClassLoader
.getSystemResourceAsStream(i + ".jpeg")) {
WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, inputStream);
assertNotNull(uploadMediaRes);
assertNotNull(uploadMediaRes.getMediaId());
massMsg.add(uploadMediaRes.getMediaId());
} catch (IOException e) {
e.printStackTrace();
}
}
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
massMessage.setMsgType(WxConsts.MassMsgType.IMAGE);
massMessage.setMediaIds(new ArrayList<>(massMsg));
massMessage.setSendAll(true);
WxMpMassSendResult massResult = this.wxService.getMassMessageService().massGroupMessageSend(massMessage);
assertNotNull(massResult);
assertNotNull(massResult.getMsgId());
}
@Test
public void testTextMassGroupMessageSend() throws WxErrorException {
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
@ -77,7 +104,7 @@ public class WxMpMassMessageServiceImplTest {
}
@Test(dataProvider = "massMessages")
public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException {
public void testMediaMassGroupMessageSend(String massMsgType, String mediaId) throws WxErrorException {
WxMpMassTagMessage massMessage = new WxMpMassTagMessage();
massMessage.setMsgType(massMsgType);
massMessage.setMediaId(mediaId);
@ -123,7 +150,8 @@ public class WxMpMassMessageServiceImplTest {
.mediaUpload(WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, inputStream);
assertNotNull(uploadMediaRes);
assertNotNull(uploadMediaRes.getMediaId());
messages[1] = new Object[]{WxConsts.MassMsgType.IMAGE, uploadMediaRes.getMediaId()};
messages[1] = new Object[]{WxConsts.MassMsgType.IMAGE, uploadMediaRes.getMediaId()
};
}
/*

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB