zoukankan      html  css  js  c++  java
  • 【微信公众号开发】【6】图文消息加强

    前言:

    1,图文消息参数介绍

    2,注意区分图片消息和图文消息,图片消息是不能带链接的

    3,一定要给图文消息的Url属性赋值。(柳峰老师说如果Url为空,用户点击后将会打开一个空白页面,待验证,我以前直接不赋值图片是无法点击的)

    4,只有单图文的描述才会显示,多图文的描述不会被显示。

    5,图文消息的标题、描述中可以使用QQ表情和符号表情。

    6,图文消息的标题、描述中可以使用换行符。( )

    6,图文消息的标题、描述中不支持超文本链接(html的<a>标签)。

    7,图文消息的链接、图片链接可以使用外部域名下的资源。

    8,使用指定大小的图片。第一条图文的图片大小建议为640*320,其他图文的图片大小建议为80*80。

    9,每条图文消息的图文建议控制在1-4条。

    正文:

    以下内容完全参照柳峰老师

    package org.liufeng.course.service;  
      
    import java.util.ArrayList;  
    import java.util.Date;  
    import java.util.List;  
    import java.util.Map;  
      
    import javax.servlet.http.HttpServletRequest;  
      
    import org.liufeng.course.message.resp.Article;  
    import org.liufeng.course.message.resp.NewsMessage;  
    import org.liufeng.course.message.resp.TextMessage;  
    import org.liufeng.course.util.MessageUtil;  
      
    /** 
     * 核心服务类 
     *  
     * @author liufeng 
     * @date 2013-07-25 
     */  
    public class CoreService {  
        /** 
         * 处理微信发来的请求 
         *  
         * @param request 
         * @return 
         */  
        public static String processRequest(HttpServletRequest request) {  
            String respMessage = null;  
            try {  
                // xml请求解析  
                Map<String, String> requestMap = MessageUtil.parseXml(request);  
      
                // 发送方帐号(open_id)  
                String fromUserName = requestMap.get("FromUserName");  
                // 公众帐号  
                String toUserName = requestMap.get("ToUserName");  
                // 消息类型  
                String msgType = requestMap.get("MsgType");  
      
                // 默认回复此文本消息  
                TextMessage textMessage = new TextMessage();  
                textMessage.setToUserName(fromUserName);  
                textMessage.setFromUserName(toUserName);  
                textMessage.setCreateTime(new Date().getTime());  
                textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);  
                textMessage.setFuncFlag(0);  
                // 由于href属性值必须用双引号引起,这与字符串本身的双引号冲突,所以要转义  
                textMessage.setContent("欢迎访问<a href="http://blog.csdn.net/lyq8479">柳峰的博客</a>!");  
                // 将文本消息对象转换成xml字符串  
                respMessage = MessageUtil.textMessageToXml(textMessage);  
      
                // 文本消息  
                if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {  
                    // 接收用户发送的文本消息内容  
                    String content = requestMap.get("Content");  
      
                    // 创建图文消息  
                    NewsMessage newsMessage = new NewsMessage();  
                    newsMessage.setToUserName(fromUserName);  
                    newsMessage.setFromUserName(toUserName);  
                    newsMessage.setCreateTime(new Date().getTime());  
                    newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);  
                    newsMessage.setFuncFlag(0);  
      
                    List<Article> articleList = new ArrayList<Article>();  
                    // 单图文消息  
                    if ("1".equals(content)) {  
                        Article article = new Article();  
                        article.setTitle("微信公众帐号开发教程Java版");  
                        article.setDescription("柳峰,80后,微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列教程,也希望借此机会认识更多同行!");  
                        article.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");  
                        article.setUrl("http://blog.csdn.net/lyq8479");  
                        articleList.add(article);  
                        // 设置图文消息个数  
                        newsMessage.setArticleCount(articleList.size());  
                        // 设置图文消息包含的图文集合  
                        newsMessage.setArticles(articleList);  
                        // 将图文消息对象转换成xml字符串  
                        respMessage = MessageUtil.newsMessageToXml(newsMessage);  
                    }  
                    // 单图文消息---不含图片  
                    else if ("2".equals(content)) {  
                        Article article = new Article();  
                        article.setTitle("微信公众帐号开发教程Java版");  
                        // 图文消息中可以使用QQ表情、符号表情  
                        article.setDescription("柳峰,80后," + emoji(0x1F6B9)  
                                + ",微信公众帐号开发经验4个月。为帮助初学者入门,特推出此系列连载教程,也希望借此机会认识更多同行!
    
    目前已推出教程共12篇,包括接口配置、消息封装、框架搭建、QQ表情发送、符号表情发送等。
    
    后期还计划推出一些实用功能的开发讲解,例如:天气预报、周边搜索、聊天功能等。");  
                        // 将图片置为空  
                        article.setPicUrl("");  
                        article.setUrl("http://blog.csdn.net/lyq8479");  
                        articleList.add(article);  
                        newsMessage.setArticleCount(articleList.size());  
                        newsMessage.setArticles(articleList);  
                        respMessage = MessageUtil.newsMessageToXml(newsMessage);  
                    }  
                    // 多图文消息  
                    else if ("3".equals(content)) {  
                        Article article1 = new Article();  
                        article1.setTitle("微信公众帐号开发教程
    引言");  
                        article1.setDescription("");  
                        article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");  
                        article1.setUrl("http://blog.csdn.net/lyq8479/article/details/8937622");  
      
                        Article article2 = new Article();  
                        article2.setTitle("第2篇
    微信公众帐号的类型");  
                        article2.setDescription("");  
                        article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8941577");  
      
                        Article article3 = new Article();  
                        article3.setTitle("第3篇
    开发模式启用及接口配置");  
                        article3.setDescription("");  
                        article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8944988");  
      
                        articleList.add(article1);  
                        articleList.add(article2);  
                        articleList.add(article3);  
                        newsMessage.setArticleCount(articleList.size());  
                        newsMessage.setArticles(articleList);  
                        respMessage = MessageUtil.newsMessageToXml(newsMessage);  
                    }  
                    // 多图文消息---首条消息不含图片  
                    else if ("4".equals(content)) {  
                        Article article1 = new Article();  
                        article1.setTitle("微信公众帐号开发教程Java版");  
                        article1.setDescription("");  
                        // 将图片置为空  
                        article1.setPicUrl("");  
                        article1.setUrl("http://blog.csdn.net/lyq8479");  
      
                        Article article2 = new Article();  
                        article2.setTitle("第4篇
    消息及消息处理工具的封装");  
                        article2.setDescription("");  
                        article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article2.setUrl("http://blog.csdn.net/lyq8479/article/details/8949088");  
      
                        Article article3 = new Article();  
                        article3.setTitle("第5篇
    各种消息的接收与响应");  
                        article3.setDescription("");  
                        article3.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article3.setUrl("http://blog.csdn.net/lyq8479/article/details/8952173");  
      
                        Article article4 = new Article();  
                        article4.setTitle("第6篇
    文本消息的内容长度限制揭秘");  
                        article4.setDescription("");  
                        article4.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article4.setUrl("http://blog.csdn.net/lyq8479/article/details/8967824");  
      
                        articleList.add(article1);  
                        articleList.add(article2);  
                        articleList.add(article3);  
                        articleList.add(article4);  
                        newsMessage.setArticleCount(articleList.size());  
                        newsMessage.setArticles(articleList);  
                        respMessage = MessageUtil.newsMessageToXml(newsMessage);  
                    }  
                    // 多图文消息---最后一条消息不含图片  
                    else if ("5".equals(content)) {  
                        Article article1 = new Article();  
                        article1.setTitle("第7篇
    文本消息中换行符的使用");  
                        article1.setDescription("");  
                        article1.setPicUrl("http://0.xiaoqrobot.duapp.com/images/avatar_liufeng.jpg");  
                        article1.setUrl("http://blog.csdn.net/lyq8479/article/details/9141467");  
      
                        Article article2 = new Article();  
                        article2.setTitle("第8篇
    文本消息中使用网页超链接");  
                        article2.setDescription("");  
                        article2.setPicUrl("http://avatar.csdn.net/1/4/A/1_lyq8479.jpg");  
                        article2.setUrl("http://blog.csdn.net/lyq8479/article/details/9157455");  
      
                        Article article3 = new Article();  
                        article3.setTitle("如果觉得文章对你有所帮助,请通过博客留言或关注微信公众帐号xiaoqrobot来支持柳峰!");  
                        article3.setDescription("");  
                        // 将图片置为空  
                        article3.setPicUrl("");  
                        article3.setUrl("http://blog.csdn.net/lyq8479");  
      
                        articleList.add(article1);  
                        articleList.add(article2);  
                        articleList.add(article3);  
                        newsMessage.setArticleCount(articleList.size());  
                        newsMessage.setArticles(articleList);  
                        respMessage = MessageUtil.newsMessageToXml(newsMessage);  
                    }  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            return respMessage;  
        }  
      
        /** 
         * emoji表情转换(hex -> utf-16) 
         *  
         * @param hexEmoji 
         * @return 
         */  
        public static String emoji(int hexEmoji) {  
            return String.valueOf(Character.toChars(hexEmoji));  
        }  
    } 

    a)用户发送1,回复单图文消息。参考代码68~81行,运行效果如下:

    b)用户发送2,回复单图文消息---不含图片。参考代码82~96行,运行效果如下:

    说明:图文消息的标题、描述是可以包含QQ表情、符号表情的。

    c)用户发送3,回复多图文消息。参考代码97~123行,运行效果如下:

    说明:对于多图文消息,描述不会被显示,可以在标题使用换行符,使得显示更加美观。

    d)用户发送4,回复多图文消息---首条消息不含图片。参考代码124~158行,运行效果如下:

    e)用户发送5,回复多图文消息---最后一条消息不含图片。参考代码159~186行,运行效果如下:

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/huashengweilong/p/7716931.html
Copyright © 2011-2022 走看看