zoukankan      html  css  js  c++  java
  • 微信开发之消息回复--图文消息(四)

    一、消息格式

     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     }

    七、项目部署及查看结果  

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

  • 相关阅读:
    前端页面适配的rem换算
    Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
    ES5, ES6, ES2016, ES.Next: What's going on with JavaScript versioning?
    国内的Android SDK镜像
    虚拟串口VSPD破解版 亲测win10 64可用
    Mybatis : "less than" issue in Select annotations
    如何在MyBatis中优雅的使用枚举
    Adding a custom jar as a maven dependency
    Error: Invalid or corrupt jarfile
    使用Json让Java和C#沟通的方法
  • 原文地址:https://www.cnblogs.com/jilongfu/p/8376547.html
Copyright © 2011-2022 走看看