微信开发之消息回复--图文消息

Posted 程序猿一个人的生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信开发之消息回复--图文消息相关的知识,希望对你有一定的参考价值。

一、消息格式

 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     }

七、项目部署及查看结果  

  向公众号发送信息,看是否能够正常返回信息。效果图如下:

 

以上是关于微信开发之消息回复--图文消息的主要内容,如果未能解决你的问题,请参考以下文章

Java微信公众平台开发--文本及图文消息回复的实现

微信公众号自动回复多图文(php)

微信公众平台开发(26) 消息回复总结

微信公众平台开发 消息回复总结——用其xml模板

微信公众号好开发--开发模式

微信公众号好开发--开发模式