权限
只有认证的的订阅号 和 服务号,可以群发消息。自己申请的测试号,或者没认证的订阅号、服务号,没有权限。
样子
发出去的文字消息、图片消息等于普通消息无差,我就不多说了。发送出去的图文消息是这样子的。
者其实是两条图文消息,上面的真好是第一条,下面的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
;
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
);
MpNewsMsg mpNewsMsg
= getMaNewMsg();
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
;
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
);
uploadNews(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
));
}
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/