如何创建微信回复的图文消息?
根据开发文档,我们要返回一条图文信息需要返回一个如图所以的 XML 格式的信息。所以我们需要根据规定的格式构造出 XML 信息。可以发现信息分成两部分,一部分是所有消息都需要包含的基本的参数,以及图文消息所特有的一些参数,具体含义见图片下半部分。
我们只需要构建出正确的 XML 信息即可。
XML 的参数分成两种,基本参数BaseMessage和图文消息NewsMessage(继承与基本参数类)参数,所以把它们封装在两个 实体 类中。
BaseMessage
public class BaseMessage { //消息来源用户 private String ToUserName; //消息去向用户 private String FromUserName; // 消息创建时间 private long CreateTime; private String MsgType;
News
public class News {
private String Title; private String Description; private String PicUrl; private String Url;
NewsMessage
public class NewsMessage extends BaseMessage{
private int ArticleCount; private List<News> Articles;
微信返回的图文消息可以一次包含多条,所以用集合类型保存。如果包含多条图文消息,不显示描述 (Description)。
图文消息转成 XML:方法写在MessageUtil消息工具类中,下面组装图文消息方法也是如此。
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); }
组装一个图文消息
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("图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复图文消息回复"); news.setPicUrl("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1821218122,25120525&fm=23&gp=0.jpg"); news.setUrl("http://blog.csdn.net/shuicsdn/article/details/71023212"); 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()); message = newsMessageToXml(newsMessage); return message; }
最后在 Servlet 中返回图文消息即可
在DoCheckServlet处理程序中,用户回复数字2 ,即可收到图文消息。
if ("2".equals(content)) { message = MessageUtil.initNewsMessage(toUserName, fromUserName);
参考文章:https://blog.csdn.net/shuicsdn/article/details/72085716