微信公众号实现回复图文消息

图文消息的主要参数说明

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

从上图可以了解到:

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<ArticlesItem> Articles;

    public int getArticleCount() {
        return ArticleCount;
    }

    public void setArticleCount(int articleCount) {
        ArticleCount = articleCount;
    }

    public List<ArticlesItem> getArticles() {
        return Articles;
    }

    public void setArticles(List<ArticlesItem> articles) {
        Articles = articles;
    }
}

图文消息中的Articles类:

import com.thoughtworks.xstream.annotations.XStreamAlias;

import java.util.List;

@XStreamAlias("Articles")
public class Articles {
    private List<ArticlesItem> 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<ArticlesItem> 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值