1. 微信公众号可以回复不同类型的消息,具体有以下种类:文本,图片,语音,视频,音乐,图文。
2. 回复消息其实就是在构建xml文件,使用xstrem工具将实体类序列化为xml
3. 构建不同消息的实体类
消息基类-所有消息共同的信息
/**
* 回复消息基类
*
* @author WRY
*
*/
public class BaseMessage {
// 接收方帐号
private String ToUserName;
// 开发者微信号
private String FromUserName;
// 消息创建时间
private long CreateTime;
// 文本类型
private String MsgType;
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
}
文本消息
/**
* 文本类型信息
*
* @author WRY
*
*/
public class TextMessage extends BaseMessage {
// 内容
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
图片消息
/**
* 图像内容
* @author WRY
*
*/
public class Image {
// 图片id。
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
/**
* 图片回复消息
*
* @author WRY
*
*/
public class ImageMessage extends BaseMessage {
private Image Image;
public Image getImage() {
return Image;
}
public void setImage(Image image) {
this.Image = image;
}
}
语音,视频,音乐和图片一致,media_id需要现在素材管理中上传。
图文消息
/**
* 单条图文消息
*
* @author WRY
*
*/
public class News {
// Title 是 图文消息标题
private String Title;
// Description 是 图文消息描述
private String Description;
// PicUrl 是 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200
private String PicUrl;
// Url 是 点击图文消息跳转链接
private String Url;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getUrl() {
return Url;
}
public void setUrl(String url) {
Url = url;
}
}
/**
* 图文回复消息
*
* @author WRY
*
*/
public class NewsMessage extends BaseMessage {
// ArticleCount 是 图文消息个数,限制为8条以内
private Integer ArticleCount;
private List<News> Articles = new ArrayList<News>();
public Integer getArticleCount() {
return ArticleCount;
}
public void setArticleCount(Integer articleCount) {
ArticleCount = articleCount;
}
public List<News> getArticles() {
return Articles;
}
public void setArticles(List<News> articles) {
Articles = articles;
}
}
4. 序列化
文本消息
/**
* 发送文本消息
*
* @param map
* @return
*/
public String replyText(Map<String, String> map) {
// 构建恢复消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(map.get(MessageParameter.FROMUSERNAME));
textMessage.setCreateTime(new Date().getTime());
textMessage.setFromUserName(map.get(MessageParameter.TOUSERNAME));
textMessage.setMsgType(MessageParameter.TEXT);
textMessage.setContent("你好你好");
// 将pojo对象转成xml
XmlUtil.xstream.alias("xml", textMessage.getClass());
return XmlUtil.xstream.toXML(textMessage);
}
图片消息,语音视频音乐类似
/**
* 回复图片消息
*
* @param map
* @return
*/
public String replyImage(Map<String, String> map) {
Image image = new Image();
image.setMediaId("5qQ62MbSXKzsmCKoiBE4SWviiJt8bbJiNtlbYhPPQmY");
ImageMessage imageMessage = new ImageMessage();
imageMessage.setCreateTime(new Date().getTime());
imageMessage.setFromUserName(map.get(MessageParameter.TOUSERNAME));
imageMessage.setToUserName(map.get(MessageParameter.FROMUSERNAME));
imageMessage.setMsgType(MessageParameter.IMAGE);
imageMessage.setImage(image);
// 将pojo对象转成xml
XmlUtil.xstream.alias("xml", imageMessage.getClass());
return XmlUtil.xstream.toXML(imageMessage);
}
图文消息
/**
* 回复图文消息
*
* @param map
* @return
*/
public String replyNews(Map<String, String> map) {
News news = new News();
news.setDescription("程序员薪酬报告:过去1年大数据领域薪资有多高? ");
news.setPicUrl("http://mmbiz.qpic.cn/mmbiz_jpg/qAVuTCR99vXYU0lnG7kbweH8oDGmp4J8JZmwhDI36aL1GHPosLBl4u3U4q1NkSu1RPAhDQ3scY9FTAHFhGobKQ/0?wx_fmt=jpeg");
news.setTitle("程序员薪酬报告:过去1年大数据领域薪资有多高?");
news.setUrl("https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650697704&idx=2&sn=793101bd3f862e7219065acb86c57267&chksm=bea61e3b89d1972d7d1f13a871b1b04f01eb133b703a5fa9025cb7bf72f879f8f02effaaa63a&scene=0#rd");
NewsMessage newsMessage = new NewsMessage();
newsMessage.setArticleCount(1);
newsMessage.getArticles().add(news);
newsMessage.setCreateTime(new Date().getTime());
newsMessage.setFromUserName(map.get(MessageParameter.TOUSERNAME));
newsMessage.setMsgType(MessageParameter.NEWS);
newsMessage.setToUserName(map.get(MessageParameter.FROMUSERNAME));
// 将pojo对象转成xml
XStream xStream = new XStream();
xStream.alias("xml", NewsMessage.class);
xStream.alias("item", News.class);
return xStream.toXML(newsMessage);
}
图文消息中会用到重命名策略。