热门标签 | 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));
        }
} 

运行结果:

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


推荐阅读
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
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社区 版权所有