博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众号实现回复图文消息
阅读量:6272 次
发布时间:2019-06-22

本文共 6086 字,大约阅读时间需要 20 分钟。

hot3.png

图文消息的主要参数说明

通过微信官方的消息接口指南,可以看到对图文消息的参数介绍,如下图所示:

从上图可以了解到:

1、图文消息的个数限制为10,也就是图文中ArticleCount的值(图文消息的个数,限制在10条以内)

2、对于图文消息,第一条图文的图片显示为大图,其他图文的图片显示为小图。

3、第一条图文的图片大小建议为640*320,其他图文的图片建议为80*80

下面开始实现:

请求消息的基类:

import com.thoughtworks.xstream.annotations.XStreamAlias;import java.io.Serializable;/** * @author inchlifc */public class BaseMessage implements Serializable {    @XStreamAlias("ToUserName")    @XStreamCDATA    private String ToUserName;    @XStreamAlias("FromUserName")    @XStreamCDATA    private String FromUserName;    @XStreamAlias("CreateTime")    private Long CreateTime;    @XStreamAlias("MsgType")    @XStreamCDATA    private String MsgType;    public BaseMessage() {        super();    }    public BaseMessage(String fromUserName, String toUserName) {        super();        FromUserName = fromUserName;        ToUserName = toUserName;        CreateTime = System.currentTimeMillis();    }    public String getToUserName() {        return ToUserName;    }    public void setToUserName(String toUserName) {        ToUserName = toUserName;    }    public String getFromUserName() {        return FromUserName;    }    public void setFromUserName(String fromUserName) {        FromUserName = fromUserName;    }    public Long getCreateTime() {        return CreateTime;    }    public void setCreateTime(Long createTime) {        CreateTime = createTime;    }    public String getMsgType() {        return MsgType;    }    public void setMsgType(String msgType) {        MsgType = msgType;    }}

图文消息类:

import com.thoughtworks.xstream.annotations.XStreamAlias;import java.util.List;@XStreamAlias("xml")public class ArticlesMessage extends BaseMessage {    @XStreamAlias("ArticleCount")    private int ArticleCount;    @XStreamAlias("Articles")    private List
Articles; public int getArticleCount() { return ArticleCount; } public void setArticleCount(int articleCount) { ArticleCount = articleCount; } public List
getArticles() { return Articles; } public void setArticles(List
articles) { Articles = articles; }}

图文消息中的Articles类:

import com.thoughtworks.xstream.annotations.XStreamAlias;import java.util.List;@XStreamAlias("Articles")public class Articles {    private List
Articles;}

图文消息中的ArticlesItem类:

import com.thoughtworks.xstream.annotations.XStreamAlias;import java.io.Serializable;@XStreamAlias("item")public class ArticlesItem implements Serializable {    @XStreamAlias("Title")    @XStreamCDATA    private String Title;    @XStreamAlias("Description")    @XStreamCDATA    private String Description;    @XStreamAlias("PicUrl")    @XStreamCDATA    private String PicUrl;    @XStreamAlias("Url")    @XStreamCDATA    private String Url;    public String getTitle() {        return Title;    }    public void setTitle(String title) {        Title = title;    }    public String getDescription() {        return Description;    }    public void setDescription(String description) {        Description = description;    }    public String getPicUrl() {        return PicUrl;    }    public void setPicUrl(String picUrl) {        PicUrl = picUrl;    }    public String getUrl() {        return Url;    }    public void setUrl(String url) {        Url = url;    }}

service层实现方法:

封装方法

/**     * 获取博客图文消息     *     * @param custermName     * @param serverName     * @param createTime     * @return     */    private ArticlesMessage getBlogMessage(String custermName, String serverName, Long createTime) {        ArticlesMessage outputMsg = new ArticlesMessage();        outputMsg.setFromUserName(serverName);        outputMsg.setToUserName(custermName);        outputMsg.setCreateTime(createTime);        outputMsg.setMsgType(MsgType.NEWS.getValue());        List
articles = new ArrayList<>(); ArticlesItem item1 = new ArticlesItem(); item1.setTitle("晚天吹凉风"); item1.setDescription("点击进入晚天吹凉风博客"); item1.setPicUrl(WechatConstant.BASE_SERVER + "resources/images/wechat/a.png"); item1.setUrl("https://my.oschina.net/inchlifc/blog"); articles.add(item1); outputMsg.setArticles(articles); outputMsg.setArticleCount(articles.size()); return outputMsg; }

判断如果输入数字1,返回图文消息推送

// 处理接收消息        ServletInputStream in = request.getInputStream();        // 将POST流转换为XStream对象        XStream xs = new XStream();        xs = SerializeXmlUtil.createXstream();        XStream.setupDefaultSecurity(xs);        xs.allowTypes(new Class[]{TextMessage.class, InputMessage.class, ArticlesMessage.class});        xs.processAnnotations(InputMessage.class);        xs.processAnnotations(ArticlesMessage.class);        xs.processAnnotations(ImageMessage.class);        // 将指定节点下的xml节点数据映射为对象        xs.alias("xml", InputMessage.class);        // 将流转换为字符串        StringBuilder xmlMsg = new StringBuilder();        byte[] b = new byte[4096];        for (int n; (n = in.read(b)) != -1; ) {            xmlMsg.append(new String(b, 0, n, "UTF-8"));        }        logger.info("收到消息====" + xmlMsg.toString());        // 将xml内容转换为InputMessage对象        InputMessage inputMsg = (InputMessage) xs.fromXML(xmlMsg.toString());        // 服务端        String servername = inputMsg.getToUserName();        // 客户端        String custermname = inputMsg.getFromUserName();        // 接收时间        long createTime = inputMsg.getCreateTime();        // 返回时间        Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;        //接手文本内容        String content = inputMsg.getContent();        // 取得消息类型        String msgType = inputMsg.getMsgType();if (MsgType.TEXT.getValue().equals(msgType)) {                //输入1 推送博客信息                if ("1".equals(content)) {                    logger.info("收到文本1");                    ArticlesMessage outputMsg = getBlogMessage(custermname, servername, returnTime);                    logger.info("返回博客图文消息===" + xs.toXML(outputMsg));                    response.getWriter().write(xs.toXML(outputMsg));                }}

运行结果:

转载于:https://my.oschina.net/inchlifc/blog/1619689

你可能感兴趣的文章
iOS播放短的音效
查看>>
[java] java 线程join方法详解
查看>>
JQuery datepicker 用法
查看>>
golang(2):beego 环境搭建
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
查看>>
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>
Netty中的三种Reactor(反应堆)
查看>>
网页内容的html标签补全和过滤的两种方法
查看>>
前端源码安全
查看>>
【CodeForces 618B】Guess the Permutation
查看>>
【转】如何实现一个配置中心
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
查看>>
Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)
查看>>
Atitit.Java exe bat 作为windows系统服务程序运行
查看>>
session的生命周期
查看>>
数据库的本质、概念及其应用实践(二)
查看>>
iOS开发多线程--(NSOperation/Queue)
查看>>
php的ajax简单实例
查看>>
maven常用构建命令
查看>>