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


权限

只有认证的的订阅号 和 服务号,可以群发消息。自己申请的测试号,或者没认证的订阅号、服务号,没有权限。
在这里插入图片描述

样子

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

在这里插入图片描述

者其实是两条图文消息,上面的真好是第一条,下面的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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值