热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

微信公众号开发之回复图文消息java代码

这篇文章主要为大家详细介绍了微信公众号开发之回复图文消息java代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

微信公众号开发之回复图文消息,供大家参考,具体内容如下

图文消息的主要参数说明

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

从上图可以了解到:

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));
        }
} 

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文介绍如何将自定义项目设置为Tomcat的默认访问项目,使得通过IP地址访问时直接展示该自定义项目。提供了三种配置方法:修改项目路径、调整配置文件以及使用WAR包部署。 ... [详细]
  • 本文详细介绍Python编程的基础知识,涵盖从安装环境到编写简单程序的核心内容,并深入探讨网络编程的基本概念和实践。提供多种资源下载方式,帮助读者快速上手。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
author-avatar
小闯娃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有