| @@ -0,0 +1,95 @@ | |||||
| package me.chanjar.weixin.mp.api; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.mp.bean.*; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | |||||
| /** | |||||
| * <pre> | |||||
| * 群发消息服务类 | |||||
| * Created by Binary Wang on 2017-8-16. | |||||
| * </pre> | |||||
| * | |||||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||||
| */ | |||||
| public interface WxMpMassMessageService { | |||||
| /** | |||||
| * 上传群发用的图文消息 | |||||
| */ | |||||
| String MEDIA_UPLOAD_NEWS_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; | |||||
| /** | |||||
| * 上传群发用的视频 | |||||
| */ | |||||
| String MEDIA_UPLOAD_VIDEO_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadvideo"; | |||||
| /** | |||||
| * 分组群发消息 | |||||
| */ | |||||
| String MESSAGE_MASS_SENDALL_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; | |||||
| /** | |||||
| * 按openId列表群发消息 | |||||
| */ | |||||
| String MESSAGE_MASS_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; | |||||
| /** | |||||
| * 群发消息预览接口 | |||||
| */ | |||||
| String MESSAGE_MASS_PREVIEW_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/preview"; | |||||
| /** | |||||
| * <pre> | |||||
| * 上传群发用的图文消息,上传后才能群发图文消息 | |||||
| * | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @see #massGroupMessageSend(WxMpMassTagMessage) | |||||
| * @see #massOpenIdsMessageSend(WxMpMassOpenIdsMessage) | |||||
| */ | |||||
| WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 上传群发用的视频,上传后才能群发视频消息 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @see #massGroupMessageSend(WxMpMassTagMessage) | |||||
| * @see #massOpenIdsMessageSend(WxMpMassOpenIdsMessage) | |||||
| */ | |||||
| WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 分组群发消息 | |||||
| * 如果发送图文消息,必须先使用 {@link #massNewsUpload(WxMpMassNews)} 获得media_id,然后再发送 | |||||
| * 如果发送视频消息,必须先使用 {@link #massVideoUpload(WxMpMassVideo)} 获得media_id,然后再发送 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| */ | |||||
| WxMpMassSendResult massGroupMessageSend(WxMpMassTagMessage message) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 按openId列表群发消息 | |||||
| * 如果发送图文消息,必须先使用 {@link #massNewsUpload(WxMpMassNews)} 获得media_id,然后再发送 | |||||
| * 如果发送视频消息,必须先使用 {@link #massVideoUpload(WxMpMassVideo)} 获得media_id,然后再发送 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| */ | |||||
| WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 群发消息预览接口 | |||||
| * 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。 | |||||
| * 接口调用请求说明 | |||||
| * http请求方式: POST | |||||
| * https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN | |||||
| * 详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @return wxMpMassSendResult | |||||
| */ | |||||
| WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception; | |||||
| } | |||||
| @@ -20,26 +20,6 @@ public interface WxMpService { | |||||
| * 获得jsapi_ticket | * 获得jsapi_ticket | ||||
| */ | */ | ||||
| String GET_JSAPI_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi"; | String GET_JSAPI_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi"; | ||||
| /** | |||||
| * 上传群发用的图文消息 | |||||
| */ | |||||
| String MEDIA_UPLOAD_NEWS_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; | |||||
| /** | |||||
| * 上传群发用的视频 | |||||
| */ | |||||
| String MEDIA_UPLOAD_VIDEO_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadvideo"; | |||||
| /** | |||||
| * 分组群发消息 | |||||
| */ | |||||
| String MESSAGE_MASS_SENDALL_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; | |||||
| /** | |||||
| * 按openId列表群发消息 | |||||
| */ | |||||
| String MESSAGE_MASS_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; | |||||
| /** | |||||
| * 群发消息预览接口 | |||||
| */ | |||||
| String MESSAGE_MASS_PREVIEW_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/preview"; | |||||
| /** | /** | ||||
| * 长链接转短链接接口 | * 长链接转短链接接口 | ||||
| */ | */ | ||||
| @@ -141,63 +121,6 @@ public interface WxMpService { | |||||
| */ | */ | ||||
| WxJsapiSignature createJsapiSignature(String url) throws WxErrorException; | WxJsapiSignature createJsapiSignature(String url) throws WxErrorException; | ||||
| /** | |||||
| * <pre> | |||||
| * 上传群发用的图文消息,上传后才能群发图文消息 | |||||
| * | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @see #massGroupMessageSend(me.chanjar.weixin.mp.bean.WxMpMassTagMessage) | |||||
| * @see #massOpenIdsMessageSend(me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage) | |||||
| */ | |||||
| WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 上传群发用的视频,上传后才能群发视频消息 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @see #massGroupMessageSend(me.chanjar.weixin.mp.bean.WxMpMassTagMessage) | |||||
| * @see #massOpenIdsMessageSend(me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage) | |||||
| */ | |||||
| WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 分组群发消息 | |||||
| * 如果发送图文消息,必须先使用 {@link #massNewsUpload(me.chanjar.weixin.mp.bean.WxMpMassNews)} 获得media_id,然后再发送 | |||||
| * 如果发送视频消息,必须先使用 {@link #massVideoUpload(me.chanjar.weixin.mp.bean.WxMpMassVideo)} 获得media_id,然后再发送 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| */ | |||||
| WxMpMassSendResult massGroupMessageSend(WxMpMassTagMessage message) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 按openId列表群发消息 | |||||
| * 如果发送图文消息,必须先使用 {@link #massNewsUpload(me.chanjar.weixin.mp.bean.WxMpMassNews)} 获得media_id,然后再发送 | |||||
| * 如果发送视频消息,必须先使用 {@link #massVideoUpload(me.chanjar.weixin.mp.bean.WxMpMassVideo)} 获得media_id,然后再发送 | |||||
| * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| */ | |||||
| WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 群发消息预览接口 | |||||
| * 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。 | |||||
| * 接口调用请求说明 | |||||
| * http请求方式: POST | |||||
| * https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN | |||||
| * 详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN | |||||
| * </pre> | |||||
| * | |||||
| * @return wxMpMassSendResult | |||||
| */ | |||||
| WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 长链接转短链接接口 | * 长链接转短链接接口 | ||||
| @@ -451,5 +374,9 @@ public interface WxMpService { | |||||
| */ | */ | ||||
| RequestHttp getRequestHttp(); | RequestHttp getRequestHttp(); | ||||
| /** | |||||
| * 返回群发消息相关接口方法的实现类对象,以方便调用其各个接口 | |||||
| * @return WxMpMassMessageService | |||||
| */ | |||||
| WxMpMassMessageService getMassMessageService(); | |||||
| } | } | ||||
| @@ -0,0 +1,58 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | |||||
| import me.chanjar.weixin.common.exception.WxErrorException; | |||||
| import me.chanjar.weixin.mp.api.WxMpMassMessageService; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.bean.*; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | |||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| /** | |||||
| * <pre> | |||||
| * 群发消息服务类 | |||||
| * Created by Binary Wang on 2017-8-16. | |||||
| * </pre> | |||||
| * | |||||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||||
| */ | |||||
| public class WxMpMassMessageServiceImpl implements WxMpMassMessageService { | |||||
| protected final Logger log = LoggerFactory.getLogger(this.getClass()); | |||||
| private WxMpService wxMpService; | |||||
| public WxMpMassMessageServiceImpl(WxMpService wxMpService) { | |||||
| this.wxMpService = wxMpService; | |||||
| } | |||||
| @Override | |||||
| public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { | |||||
| String responseContent = this.wxMpService.post(MEDIA_UPLOAD_NEWS_URL, news.toJson()); | |||||
| return WxMpMassUploadResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException { | |||||
| String responseContent = this.wxMpService.post(MEDIA_UPLOAD_VIDEO_URL, video.toJson()); | |||||
| return WxMpMassUploadResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massGroupMessageSend(WxMpMassTagMessage message) throws WxErrorException { | |||||
| String responseContent = this.wxMpService.post(WxMpMassMessageService.MESSAGE_MASS_SENDALL_URL, message.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException { | |||||
| String responseContent = this.wxMpService.post(MESSAGE_MASS_SEND_URL, message.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception { | |||||
| String responseContent = this.wxMpService.post(MESSAGE_MASS_PREVIEW_URL, wxMpMassPreviewMessage.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| } | |||||
| @@ -43,6 +43,7 @@ public abstract class WxMpServiceAbstractImpl<H, P> implements WxMpService, Requ | |||||
| private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this); | private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this); | ||||
| private WxMpShakeService shakeService = new WxMpShakeServiceImpl(this); | private WxMpShakeService shakeService = new WxMpShakeServiceImpl(this); | ||||
| private WxMpMemberCardService memberCardService = new WxMpMemberCardServiceImpl(this); | private WxMpMemberCardService memberCardService = new WxMpMemberCardServiceImpl(this); | ||||
| private WxMpMassMessageService massMessageService = new WxMpMassMessageServiceImpl(this); | |||||
| private int retrySleepMillis = 1000; | private int retrySleepMillis = 1000; | ||||
| private int maxRetryTimes = 5; | private int maxRetryTimes = 5; | ||||
| @@ -108,36 +109,6 @@ public abstract class WxMpServiceAbstractImpl<H, P> implements WxMpService, Requ | |||||
| return getAccessToken(false); | return getAccessToken(false); | ||||
| } | } | ||||
| @Override | |||||
| public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { | |||||
| String responseContent = this.post(WxMpService.MEDIA_UPLOAD_NEWS_URL, news.toJson()); | |||||
| return WxMpMassUploadResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException { | |||||
| String responseContent = this.post(WxMpService.MEDIA_UPLOAD_VIDEO_URL, video.toJson()); | |||||
| return WxMpMassUploadResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massGroupMessageSend(WxMpMassTagMessage message) throws WxErrorException { | |||||
| String responseContent = this.post(WxMpService.MESSAGE_MASS_SENDALL_URL, message.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException { | |||||
| String responseContent = this.post(WxMpService.MESSAGE_MASS_SEND_URL, message.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | |||||
| public WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception { | |||||
| String responseContent = this.post(WxMpService.MESSAGE_MASS_PREVIEW_URL, wxMpMassPreviewMessage.toJson()); | |||||
| return WxMpMassSendResult.fromJson(responseContent); | |||||
| } | |||||
| @Override | @Override | ||||
| public String shortUrl(String long_url) throws WxErrorException { | public String shortUrl(String long_url) throws WxErrorException { | ||||
| JsonObject o = new JsonObject(); | JsonObject o = new JsonObject(); | ||||
| @@ -415,4 +386,9 @@ public abstract class WxMpServiceAbstractImpl<H, P> implements WxMpService, Requ | |||||
| public RequestHttp getRequestHttp() { | public RequestHttp getRequestHttp() { | ||||
| return this; | return this; | ||||
| } | } | ||||
| @Override | |||||
| public WxMpMassMessageService getMassMessageService() { | |||||
| return this.massMessageService; | |||||
| } | |||||
| } | } | ||||
| @@ -1,9 +1,10 @@ | |||||
| package me.chanjar.weixin.mp.api; | |||||
| package me.chanjar.weixin.mp.api.impl; | |||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||
| import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
| import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | |||||
| import me.chanjar.weixin.mp.api.test.ApiTestModule; | import me.chanjar.weixin.mp.api.test.ApiTestModule; | ||||
| import me.chanjar.weixin.mp.api.test.TestConfigStorage; | import me.chanjar.weixin.mp.api.test.TestConfigStorage; | ||||
| import me.chanjar.weixin.mp.api.test.TestConstants; | import me.chanjar.weixin.mp.api.test.TestConstants; | ||||
| @@ -13,21 +14,21 @@ import me.chanjar.weixin.mp.bean.WxMpMassTagMessage; | |||||
| import me.chanjar.weixin.mp.bean.WxMpMassVideo; | import me.chanjar.weixin.mp.bean.WxMpMassVideo; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; | ||||
| import org.testng.*; | |||||
| import org.testng.annotations.*; | import org.testng.annotations.*; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import static org.testng.Assert.*; | |||||
| /** | /** | ||||
| * 测试群发消息 | * 测试群发消息 | ||||
| * | * | ||||
| * @author chanjarster | * @author chanjarster | ||||
| */ | */ | ||||
| @Test(groups = "massAPI", dependsOnGroups = {"baseAPI", "mediaAPI", "groupAPI"}) | |||||
| @Test | |||||
| @Guice(modules = ApiTestModule.class) | @Guice(modules = ApiTestModule.class) | ||||
| public class WxMpMassMessageAPITest { | |||||
| public class WxMpMassMessageServiceImplTest { | |||||
| @Inject | @Inject | ||||
| protected WxMpService wxService; | protected WxMpService wxService; | ||||
| @@ -41,10 +42,10 @@ public class WxMpMassMessageAPITest { | |||||
| massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | massMessage.setContent("测试群发消息\n欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | ||||
| massMessage.getToUsers().add(configProvider.getOpenid()); | massMessage.getToUsers().add(configProvider.getOpenid()); | ||||
| WxMpMassSendResult massResult = this.wxService | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massOpenIdsMessageSend(massMessage); | .massOpenIdsMessageSend(massMessage); | ||||
| Assert.assertNotNull(massResult); | |||||
| Assert.assertNotNull(massResult.getMsgId()); | |||||
| assertNotNull(massResult); | |||||
| assertNotNull(massResult.getMsgId()); | |||||
| } | } | ||||
| @Test(dataProvider = "massMessages") | @Test(dataProvider = "massMessages") | ||||
| @@ -57,10 +58,10 @@ public class WxMpMassMessageAPITest { | |||||
| massMessage.setMediaId(mediaId); | massMessage.setMediaId(mediaId); | ||||
| massMessage.getToUsers().add(configProvider.getOpenid()); | massMessage.getToUsers().add(configProvider.getOpenid()); | ||||
| WxMpMassSendResult massResult = this.wxService | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massOpenIdsMessageSend(massMessage); | .massOpenIdsMessageSend(massMessage); | ||||
| Assert.assertNotNull(massResult); | |||||
| Assert.assertNotNull(massResult.getMsgId()); | |||||
| assertNotNull(massResult); | |||||
| assertNotNull(massResult.getMsgId()); | |||||
| } | } | ||||
| @Test | @Test | ||||
| @@ -71,10 +72,10 @@ public class WxMpMassMessageAPITest { | |||||
| massMessage | massMessage | ||||
| .setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | .setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | ||||
| WxMpMassSendResult massResult = this.wxService | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massGroupMessageSend(massMessage); | .massGroupMessageSend(massMessage); | ||||
| Assert.assertNotNull(massResult); | |||||
| Assert.assertNotNull(massResult.getMsgId()); | |||||
| assertNotNull(massResult); | |||||
| assertNotNull(massResult.getMsgId()); | |||||
| } | } | ||||
| @Test(dataProvider = "massMessages") | @Test(dataProvider = "massMessages") | ||||
| @@ -85,10 +86,10 @@ public class WxMpMassMessageAPITest { | |||||
| massMessage.setMediaId(mediaId); | massMessage.setMediaId(mediaId); | ||||
| massMessage.setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | massMessage.setTagId(this.wxService.getUserTagService().tagGet().get(0).getId()); | ||||
| WxMpMassSendResult massResult = this.wxService | |||||
| WxMpMassSendResult massResult = this.wxService.getMassMessageService() | |||||
| .massGroupMessageSend(massMessage); | .massGroupMessageSend(massMessage); | ||||
| Assert.assertNotNull(massResult); | |||||
| Assert.assertNotNull(massResult.getMsgId()); | |||||
| assertNotNull(massResult); | |||||
| assertNotNull(massResult.getMsgId()); | |||||
| } | } | ||||
| @DataProvider | @DataProvider | ||||
| @@ -103,17 +104,17 @@ public class WxMpMassMessageAPITest { | |||||
| // 上传视频到媒体库 | // 上传视频到媒体库 | ||||
| WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | ||||
| .mediaUpload(WxConsts.MEDIA_VIDEO, TestConstants.FILE_MP4, inputStream); | .mediaUpload(WxConsts.MEDIA_VIDEO, TestConstants.FILE_MP4, inputStream); | ||||
| Assert.assertNotNull(uploadMediaRes); | |||||
| Assert.assertNotNull(uploadMediaRes.getMediaId()); | |||||
| assertNotNull(uploadMediaRes); | |||||
| assertNotNull(uploadMediaRes.getMediaId()); | |||||
| // 把视频变成可被群发的媒体 | // 把视频变成可被群发的媒体 | ||||
| WxMpMassVideo video = new WxMpMassVideo(); | WxMpMassVideo video = new WxMpMassVideo(); | ||||
| video.setTitle("测试标题"); | video.setTitle("测试标题"); | ||||
| video.setDescription("测试描述"); | video.setDescription("测试描述"); | ||||
| video.setMediaId(uploadMediaRes.getMediaId()); | video.setMediaId(uploadMediaRes.getMediaId()); | ||||
| WxMpMassUploadResult uploadResult = this.wxService.massVideoUpload(video); | |||||
| Assert.assertNotNull(uploadResult); | |||||
| Assert.assertNotNull(uploadResult.getMediaId()); | |||||
| WxMpMassUploadResult uploadResult = this.wxService.getMassMessageService().massVideoUpload(video); | |||||
| assertNotNull(uploadResult); | |||||
| assertNotNull(uploadResult.getMediaId()); | |||||
| messages[0] = new Object[]{WxConsts.MASS_MSG_VIDEO, uploadResult.getMediaId()}; | messages[0] = new Object[]{WxConsts.MASS_MSG_VIDEO, uploadResult.getMediaId()}; | ||||
| } | } | ||||
| @@ -124,8 +125,8 @@ public class WxMpMassMessageAPITest { | |||||
| .getSystemResourceAsStream("mm.jpeg")) { | .getSystemResourceAsStream("mm.jpeg")) { | ||||
| WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | ||||
| .mediaUpload(WxConsts.MEDIA_IMAGE, TestConstants.FILE_JPG, inputStream); | .mediaUpload(WxConsts.MEDIA_IMAGE, TestConstants.FILE_JPG, inputStream); | ||||
| Assert.assertNotNull(uploadMediaRes); | |||||
| Assert.assertNotNull(uploadMediaRes.getMediaId()); | |||||
| assertNotNull(uploadMediaRes); | |||||
| assertNotNull(uploadMediaRes.getMediaId()); | |||||
| messages[1] = new Object[]{WxConsts.MASS_MSG_IMAGE, uploadMediaRes.getMediaId()}; | messages[1] = new Object[]{WxConsts.MASS_MSG_IMAGE, uploadMediaRes.getMediaId()}; | ||||
| } | } | ||||
| @@ -136,8 +137,8 @@ public class WxMpMassMessageAPITest { | |||||
| .getSystemResourceAsStream("mm.mp3")) { | .getSystemResourceAsStream("mm.mp3")) { | ||||
| WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | ||||
| .mediaUpload(WxConsts.MEDIA_VOICE, TestConstants.FILE_MP3, inputStream); | .mediaUpload(WxConsts.MEDIA_VOICE, TestConstants.FILE_MP3, inputStream); | ||||
| Assert.assertNotNull(uploadMediaRes); | |||||
| Assert.assertNotNull(uploadMediaRes.getMediaId()); | |||||
| assertNotNull(uploadMediaRes); | |||||
| assertNotNull(uploadMediaRes.getMediaId()); | |||||
| messages[2] = new Object[]{WxConsts.MASS_MSG_VOICE, uploadMediaRes.getMediaId()}; | messages[2] = new Object[]{WxConsts.MASS_MSG_VOICE, uploadMediaRes.getMediaId()}; | ||||
| } | } | ||||
| @@ -149,8 +150,8 @@ public class WxMpMassMessageAPITest { | |||||
| // 上传照片到媒体库 | // 上传照片到媒体库 | ||||
| WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | WxMediaUploadResult uploadMediaRes = this.wxService.getMaterialService() | ||||
| .mediaUpload(WxConsts.MEDIA_IMAGE, TestConstants.FILE_JPG, inputStream); | .mediaUpload(WxConsts.MEDIA_IMAGE, TestConstants.FILE_JPG, inputStream); | ||||
| Assert.assertNotNull(uploadMediaRes); | |||||
| Assert.assertNotNull(uploadMediaRes.getMediaId()); | |||||
| assertNotNull(uploadMediaRes); | |||||
| assertNotNull(uploadMediaRes.getMediaId()); | |||||
| // 上传图文消息 | // 上传图文消息 | ||||
| WxMpMassNews news = new WxMpMassNews(); | WxMpMassNews news = new WxMpMassNews(); | ||||
| @@ -170,10 +171,10 @@ public class WxMpMassMessageAPITest { | |||||
| article2.setDigest("摘要2"); | article2.setDigest("摘要2"); | ||||
| news.addArticle(article2); | news.addArticle(article2); | ||||
| WxMpMassUploadResult massUploadResult = this.wxService | |||||
| WxMpMassUploadResult massUploadResult = this.wxService.getMassMessageService() | |||||
| .massNewsUpload(news); | .massNewsUpload(news); | ||||
| Assert.assertNotNull(massUploadResult); | |||||
| Assert.assertNotNull(uploadMediaRes.getMediaId()); | |||||
| assertNotNull(massUploadResult); | |||||
| assertNotNull(uploadMediaRes.getMediaId()); | |||||
| messages[3] = new Object[]{WxConsts.MASS_MSG_NEWS, massUploadResult.getMediaId()}; | messages[3] = new Object[]{WxConsts.MASS_MSG_NEWS, massUploadResult.getMediaId()}; | ||||
| } | } | ||||
| @@ -5,7 +5,7 @@ | |||||
| <classes> | <classes> | ||||
| <class name="me.chanjar.weixin.mp.api.WxMpBusyRetryTest"/> | <class name="me.chanjar.weixin.mp.api.WxMpBusyRetryTest"/> | ||||
| <class name="me.chanjar.weixin.mp.api.WxMpBaseAPITest"/> | <class name="me.chanjar.weixin.mp.api.WxMpBaseAPITest"/> | ||||
| <class name="me.chanjar.weixin.mp.api.WxMpMassMessageAPITest"/> | |||||
| <class name="me.chanjar.weixin.mp.api.impl.WxMpMassMessageServiceImplTest"/> | |||||
| <class name="me.chanjar.weixin.mp.api.impl.WxMpUserServiceImplTest"/> | <class name="me.chanjar.weixin.mp.api.impl.WxMpUserServiceImplTest"/> | ||||
| <class name="me.chanjar.weixin.mp.api.impl.WxMpQrcodeServiceImplTest"/> | <class name="me.chanjar.weixin.mp.api.impl.WxMpQrcodeServiceImplTest"/> | ||||
| <class name="me.chanjar.weixin.mp.api.WxMpShortUrlAPITest"/> | <class name="me.chanjar.weixin.mp.api.WxMpShortUrlAPITest"/> | ||||