微信公众号java开发沉淀(五)推送群发消息

xiaoxiao2025-09-01  10


权限

只有认证的的订阅号 和 服务号,可以群发消息。自己申请的测试号,或者没认证的订阅号、服务号,没有权限。

样子

发出去的文字消息、图片消息等于普通消息无差,我就不多说了。发送出去的图文消息是这样子的。

者其实是两条图文消息,上面的真好是第一条,下面的Happy Day是第二条。多条的时候依次在后面增加。

使用fastweixin 的api, 群发消息

package com.tsing.fast; import com.alibaba.fastjson.JSON; import com.github.sd4324530.fastweixin.api.MessageAPI; import com.github.sd4324530.fastweixin.api.config.ApiConfig; import com.github.sd4324530.fastweixin.api.enums.MediaType; import com.github.sd4324530.fastweixin.api.response.GetSendMessageResponse; import com.github.sd4324530.fastweixin.message.ImageMsg; import com.github.sd4324530.fastweixin.message.MpNewsMsg; import com.github.sd4324530.fastweixin.message.TextMsg; import com.tsing.wechat.utils.HttpUtils; import com.tsing.wechat.utils.ResourceUtils; import java.util.HashMap; import java.util.Map; /** * @author susq * @since 2018-10-24 */ public class MessageService extends BaseService { private static final String DEL_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token="; public static void main(String[] args) { ApiConfig config = new ApiConfig(APP_ID, ENCODING_AES_KEY); MessageAPI messageAPI = new MessageAPI(config); // TextMsg textMsg = getMsg(); // ImageMsg imageMsg = getImgMsg(); MpNewsMsg mpNewsMsg = getMaNewMsg(); // isToAll 是否发送给全部用户。false时需要填写tagId,true时可忽略tagId树形 GetSendMessageResponse response = messageAPI.sendMessageToUser(mpNewsMsg, true, null); System.out.println("发送结果:" + JSON.toJSONString(response)); } private static void delSendAll(ApiConfig config) { String param = ResourceUtils.getResourceString(MediaService.class.getResourceAsStream("/del.txt")); String response = HttpUtils.doPost(DEL_URL + config.getAccessToken(), param); System.out.println("发送结果:" + JSON.toJSONString(response)); } private static MpNewsMsg getMaNewMsg() { MpNewsMsg msg = new MpNewsMsg(); msg.setMediaId("2XkN4_oHgQAghifHt5iemp1lOvLsH5pZfNrB8Avat5rAcMzpCnVi0WAMcM8yZFsz"); return msg; } private static TextMsg getMsg() { TextMsg textMsg = new TextMsg(); textMsg.setContent("群发消息"); textMsg.setMsgType("text"); return textMsg; } private static ImageMsg getImgMsg() { ImageMsg imageMsg = new ImageMsg(); imageMsg.setMsgType(MediaType.IMAGE.toString()); imageMsg.setMediaId("PSUYMe5hdzqT-JrvKg-FEId9iGBj-648kuMLqDQPGr1ffA0yCCF4HxlmFuzrIfAL"); return imageMsg; } }

需要注意的是:如果发送的是文本消息,直接写。 如果发送的是媒体文件,图片,语音等。需要先通过素材上传接口上传。返回 media_id, 后面发群发消息的时候设置这个 media_id 到消息中即可。

上传素材

package com.tsing.fast; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.sd4324530.fastweixin.api.MediaAPI; import com.github.sd4324530.fastweixin.api.config.ApiConfig; import com.github.sd4324530.fastweixin.api.entity.Article; import com.github.sd4324530.fastweixin.api.enums.MediaType; import com.github.sd4324530.fastweixin.api.response.UploadMediaResponse; import com.google.common.collect.Lists; import com.tsing.wechat.utils.ResourceUtils; import java.io.File; /** * @author susq * @since 2018-10-21 */ public class MediaService extends BaseService { public static void main(String[] args) { ApiConfig config = new ApiConfig(APP_ID, ENCODING_AES_KEY); MediaAPI mediaAPI = new MediaAPI(config); // updaloadImg(mediaAPI); uploadNews(mediaAPI); } /** * @param mediaAPI */ private static void updaloadImg(MediaAPI mediaAPI) { File file = new File("E:/title.png"); UploadMediaResponse response = mediaAPI.uploadMedia(MediaType.IMAGE, file); System.out.println("上传结果:" + JSON.toJSONString(response)); } /** * 上传结果:{"created_at":1540365524,"media_id":"G03TyVQ14R3nRfyTqItxF4OeFX_t_hniGUGAzWXIjy5VtUaR8ynCMlyt_giabLDW","type":"news"} * @param mediaAPI */ private static void uploadNews(MediaAPI mediaAPI) { String new1 = ResourceUtils.getResourceString(MediaService.class.getResourceAsStream("/new1.txt")); String new2 = ResourceUtils.getResourceString(MediaService.class.getResourceAsStream("/new2.txt")); Article article1 = JSONObject.parseObject(new1, Article.class); Article article2 = JSONObject.parseObject(new2, Article.class); UploadMediaResponse response = mediaAPI.uploadNews(Lists.newArrayList(article1, article2)); System.out.println("上传结果:" + JSON.toJSONString(response)); } }

如果发送的是图文消息,也需要提前上传,发送的是图文消息的 media_id, 需要注意的是图文消息的缩略图,需要提前上传,获取到的media_id写入到图文消息的 thumb_media_id 字段中。

例如文中开始的那张图文消息,原本是这样的

{ "thumb_media_id": "WU0huRZOFJk_ItOiC_AXIyaNszCKaih9yiy6ofDn1F0nRBGL5xjqNQhwsEC6xfUh", "author": "苏少青", "title": "真好", "content_source_url": "www.qq.com", "content": "第一个图文消息的内容。", "digest": "digest", "show_cover_pic": 1 } { "thumb_media_id": "WU0huRZOFJk_ItOiC_AXIyaNszCKaih9yiy6ofDn1F0nRBGL5xjqNQhwsEC6xfUh", "author": "susq", "title": "Happy Day", "content_source_url": "blog.csdn.net/u013041642", "content": "content", "digest": "digest", "show_cover_pic": 0 }

thumb_media_id 是已经上传好的一张图片的 media_id, 把这两条图文,通过uploadNews 方法上传,得到图文消息的media_id, 再发送。所有关注当前公众号的粉丝。都可以收到了。

最后

详细的消息格式文档里都有 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1481187827_i0l21, 发送消息的接口,上传素材等等所哟接口文档里也都有。对照fastweixin 里面封装的消息对象,和API,阅读效果更佳。 https://gitee.com/pyinjava/fastweixin/

转载请注明原文地址: https://www.6miu.com/read-5035588.html

最新回复(0)