根据图文消息的形式,我们可以看出,上面<xml>标签到<Articles>标签是图文的发送信息,<item>标签内是图文的信息,所以我们分两个对象来创建,
1.首先创建一个图文信息的类News: 4个属性
private String Title;
private String Description;
private String PicUrl;
private String Url;
2.创建一个总的图文消息的类,注意区别信息和消息,图文消息类包含图文信息类,由于一个图文消息里面可以包含多个图文信息,所以在图文消息类中定义一个List泛型用于添加图文消息,从属性上来看前面四个属性跟文本消息是一样的,所以我们可以创建基本消息类BaseMessage,让TextMessage和NewsMessage都继承它;
private String ToUserName;
private String FromUserName;
private Long CreateTime;
private String MsgType;
NewsMessage类:
private int ArticleCount;
private List<News> Articles;
定义完成后就可以在MessageUtil类中进行拼接:
//初始化图文消息
public static String initNewsMessage(String toUserName, String fromUserName){
String message = null;
List<News> newsList = new ArrayList<News>();
NewsMessage newsMessage = new NewsMessage();
//设置新闻
News news = new News();
news.setTitle("南京理工大学泰州科技学院");
news.setDescription("南京理工大学泰州科技学院由国家首批“211工程”重点建设院校——南京理工大学与泰州市人民政府于2004年合作创办,是一所以工为主,工、经、管、文、艺等多学科综合配套、协调发展的全日制本科高校。学校围绕建设特色鲜明的高水平应用技术大学的奋斗目标,坚持“明体达用”的教育理念,秉持“帮助学生发挥优势潜能”的育人宗旨,培养高层次技术与管理人才。学校被教育部吸纳为全国CDIO工程教育改革试点高校,被誉为“工程师的摇篮”。");
news.setPicUrl("http://58.193.194.56/weixin/image/njusttz.jpg");
news.setUrl("www.nustti.edu.cn");
//放入集合
newsList.add(news);
//设置图文消息
newsMessage.setToUserName(fromUserName);
newsMessage.setFromUserName(toUserName);
newsMessage.setCreateTime(new Date().getTime());
newsMessage.setMsgType(MESSAGE_NEWS);
newsMessage.setArticles(newsList);
newsMessage.setArticleCount(newsList.size());
//转成xml
message = newsMessageToXml(newsMessage);
return message;
}
拼接完成后将他转成微信可识别的xml形式: //图文消息转为xml
public static String newsMessageToXml(NewsMessage newsMessage) {
XStream xStream = new XStream();
xStream.alias("xml", newsMessage.getClass());
xStream.alias("item", new News().getClass());
return xStream.toXML(newsMessage);
}
这样我们就可以把刚才Servlet中的菜单里的“1.南泰介绍”改成图文消息;
if ("1".equals(content)) {
//message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.njusttzIntroduceText());
message = MessageUtil.initNewsMessage(toUserName, fromUserName);
}
这样图文消息就完成了。