一、消息格式
1 <xml> 2 <ToUserName> 3 < ![CDATA[toUser] ]> 4 </ToUserName> 5 <FromUserName> 6 < ![CDATA[fromUser] ]> 7 </FromUserName> 8 <CreateTime>12345678</CreateTime> 9 <MsgType> 10 < ![CDATA[news] ]> 11 </MsgType> 12 <ArticleCount>2</ArticleCount> 13 <Articles> 14 <item> 15 <Title> 16 < ![CDATA[title1] ]> 17 </Title> 18 <Description> 19 < ![CDATA[description1] ]> 20 </Description> 21 <PicUrl> 22 < ![CDATA[picurl] ]> 23 </PicUrl> 24 <Url> 25 < ![CDATA[url] ]> 26 </Url> 27 </item> 28 <item> 29 <Title> 30 < ![CDATA[title] ]> 31 </Title> 32 <Description> 33 < ![CDATA[description] ]> 34 </Description> 35 <PicUrl> 36 < ![CDATA[picurl] ]> 37 </PicUrl> 38 <Url> 39 < ![CDATA[url] ]> 40 </Url> 41 </item> 42 </Articles> 43 </xml>
二、参数介绍
参数 | 是否必须 | 说明 |
---|---|---|
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者微信号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | news |
ArticleCount | 是 | 图文消息个数,限制为8条以内 |
Articles | 是 | 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应 |
Title | 是 | 图文消息标题 |
Description | 是 | 图文消息描述 |
PicUrl | 是 | 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 |
Url | 是 | 点击图文消息跳转链接 |
三、图文消息实体类(图文消息内容实体)
1.图文消息内容实体
1 /** 2 * 3 * @author 付 4 * @date 2018年1月27日 上午10:12:08 5 * @TODO TODO图文消息外层实体 6 */ 7 public class NewsMessage extends BaseMessge{ 8 9 private int ArticleCount;// 图文消息个数,限制为8条以内 10 private List<News> Articles;//多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应 11 public int getArticleCount() { 12 return ArticleCount; 13 } 14 public void setArticleCount(int articleCount) { 15 ArticleCount = articleCount; 16 } 17 public List<News> getArticles() { 18 return Articles; 19 } 20 public void setArticles(List<News> articles) { 21 Articles = articles; 22 } 23 @Override 24 public String toString() { 25 return "NewsMessage [ArticleCount=" + ArticleCount + ", Articles=" 26 + Articles + "]"; 27 } 28 }
2.图文消息外层实体
1 /** 2 * 3 * @author 付 4 * @date 2018年1月27日 上午10:12:08 5 * @TODO TODO图文消息外层实体 6 */ 7 public class NewsMessage extends BaseMessge{ 8 9 private int ArticleCount;// 图文消息个数,限制为8条以内 10 private List<News> Articles;//多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应 11 public int getArticleCount() { 12 return ArticleCount; 13 } 14 public void setArticleCount(int articleCount) { 15 ArticleCount = articleCount; 16 } 17 public List<News> getArticles() { 18 return Articles; 19 } 20 public void setArticles(List<News> articles) { 21 Articles = articles; 22 } 23 @Override 24 public String toString() { 25 return "NewsMessage [ArticleCount=" + ArticleCount + ", Articles=" 26 + Articles + "]"; 27 } 28 }
四、添加将图文消息转换为xml方法
/** * 图文消息转换为xml * @param newsMessage * @return */ public static String newsMessageToXml(NewsMessage newsMessage){ //XStream xStream = new XStream(new StaxDriver()); xStream.alias("xml", newsMessage.getClass()); xStream.alias("item", new News().getClass()); return xStream.toXML(newsMessage); }
五、添加初始化图文消息代码
1 public static String initNewsMessage(String toUserName,String fromUserName){ 2 String message = ""; 3 List<News> newsList = new ArrayList<News>(); 4 //图文消息实体 5 NewsMessage newsMessage = new NewsMessage(); 6 //图文消息的内容实体 7 News news = new News(); 8 news.setTitle("寿光小伙谁最帅!"); 9 news.setDescription("让金融活水更好浇灌实体经济,不仅是做大做强经济“蛋糕”的根本选择,也是防范化解金融风险的必由路径."); 10 news.setPicUrl("http://fujilong.ngrok.cc/Weixin/image/test.jpg");//需要替换本地服务器图片文件 11 news.setUrl("www.shouguang.gov.cn"); 12 News newsTwo = new News(); 13 newsTwo.setTitle("寿光美女谁最美!"); 14 newsTwo.setDescription("让金融活水更好浇灌实体经济,不仅是做大做强经济“蛋糕”的根本选择,也是防范化解金融风险的必由路径."); 15 newsTwo.setPicUrl("http://fujilong.ngrok.cc/Weixin/image/test.jpg");//需要替换本地服务器图片文件 16 newsTwo.setUrl("www.shouguang.gov.cn"); 17 newsList.add(news); 18 newsList.add(newsTwo); 19 newsMessage.setFromUserName(toUserName); 20 newsMessage.setToUserName(fromUserName); 21 newsMessage.setMsgType(MessageUtil.MESSAGE_NEWS); 22 newsMessage.setCreateTime(new Date().getTime()+""); 23 newsMessage.setArticles(newsList); 24 newsMessage.setArticleCount(newsList.size()); 25 message = newsMessageToXml(newsMessage); 26 System.err.println(message); 27 return message; 28 }
六、修改Servlet中的Post方法,加入如下代码:
1 @Override 2 protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { 3 req.setCharacterEncoding("UTF-8"); 4 resp.setCharacterEncoding("UTF-8"); 5 PrintWriter out = resp.getWriter(); 6 try { 7 Map<String, String> map = MessageUtil.xmlToMap(req); 8 String fromUserName = map.get("FromUserName"); 9 String toUserName = map.get("ToUserName"); 10 //消息类型 11 String msgType = map.get("MsgType"); 12 String content = map.get("Content"); 13 //回复文本消息 14 String message = null; 15 //消息类型判断 16 /*if(MsgTypeParam.MESSAGE_TEXT.equals(msgType)){ 17 String text = "山东京帝软件微信公众号测试"; 18 //调用初始化文本消息方法 19 message = InitMsgContentUtil.initText(toUserName, fromUserName, text); 20 }*/ 21 if("文本".equals(content)){ 22 String text = "山东京帝软件微信公众号测试"; 23 //调用初始化文本消息方法 24 message = InitMsgContentUtil.initText(toUserName, fromUserName, text); 25 } 26 if("图文".equals(content)){ 27 message = InitMsgContentUtil.initNewsMessage(toUserName, fromUserName); 28 } 29 out.print(message); 30 } catch (DocumentException e) { 31 e.printStackTrace(); 32 }finally{ 33 out.close(); 34 } 35 }
七、项目部署及查看结果
向公众号发送信息,看是否能够正常返回信息。效果图如下: