微信公众号开发之回复图文消息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<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));
        }
}

运行结果:

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

(0)

相关推荐

  • Java开发微信公众号接收和被动回复普通消息

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息 2.图片消息 3.语音消息 4.视频消息 5.小视频消息 6.地理位置消息 7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息 2.回复图片消息 3.回复语音消息 4.回复视频消息 5.回复音乐消息 6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本

  • java开发微信公众号支付

    最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者. 微信公众号支付的总体其实很简单,大致就分为三步.第一步需要获取用户授权:第二步调用统一下单接口获取预支付id:第三步H5调起微信支付的内置的js.下面介绍具体每一步的开发流程. 一    首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权.也就是需要获取用户的openid.微信公众号使用的交易类型是JSAPI,

  • Java微信公众平台开发(1) 接入微信公众平台

    前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html 通过上面我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成: 填写服务器配置 验证服务

  • Java微信公众平台开发(9) 关键字回复以及客服接口实现

    我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就是关键字回复以及服务器无响应的时候返回的[服务器无法响应]等问题 ,这里我给出的解决方案是:①对关键字给出关键字回复的代码实现:②[服务器5s无响应]解决方案是接入多客服,以方便我们的消息处理! (一)关键字自动回复 在前面的文章中我们已经完成对消息回复的分类以及实现,这里说的关键字回复只是对消息回

  • java实现微信公众平台自定义菜单的创建示例

    复制代码 代码如下: import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL; import org.json.JSONObject; public class MenuUtil { /**  * 获得ACC

  • java微信公众号开发案例

    微信公众号开发一般是针对企业和组织的,个人一般只能申请订阅号,并且调用的接口有限,下面我们就来简单的描述下接入公众号的步骤: 1.首先你需要一个邮箱在微信公众号平台进行注册:      注册的方式有订阅号.公众号.小程序和企业号,个人我们这里只能选择订阅号 2.注册完后,我们登录到公众号平台--->开发--->基本配置,这里需要填写URL和token,URL就是我们使用服务器的接口: 3.Java Web服务器程序编译好且在服务器上部署可以运行的话,可在微信公众号进行在线接口调试: 1).选择

  • java微信公众号开发第一步 公众号接入和access_token管理

    本文就来说一说微信开发第一步,公众号接入以及access_token的管理. 一.微信公众号接入 在微信公众号开发手册上,关于公众号接入这一节内容还是写的比较详细的,文档中说接入公众号需要3个步骤,分别是: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 其实,第3步已经不能算做公众号接入的步骤,而是接入之后,开发人员可以根据微信公众号提供的接口所能做的一些开发. 第1步中服务器配置包含服务器地址(URL).Token和EncodingAESKey. 服务器地址即公

  • Java微信支付之公众号支付、扫码支付实例

    微信支付现在已经变得越来越流行了,随之也出现了很多以可以快速接入微信支付为噱头的产品,不过方便之余也使得我们做东西慢慢依赖第三方,丧失了独立思考的能力,这次打算分享下我之前开发过的微信支付. 一 .H5公众号支付 要点:正确获取openId以及统一下单接口,正确处理支付结果通知,正确配置支付授权目录 H5的支付方式是使用较为广泛的方式,这种支付方式主要用于微信内自定义菜单的网页,依赖手机上安装的微信客户端,高版本的微信才支持微信支付,下面按我的流程注意说明 1  编写用于支付的页面,由于是测试用

  • 微信公众平台开发实战Java版之微信获取用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 开发者可通过OpenID来获取用户基本信息.请使用https协议. 我们可以看看官方的文档:获取用户的基本信息. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-b

  • java微信公众号开发(搭建本地测试环境)

    俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一个用来测试的公众号,还有一个用来调式代码的开发环境. 测试公众号 微信公众号有订阅号.服务号.企业号,在注册的时候看到这样的信息,只有订阅号可以个人申请,服务号和企业号要有企业资质才可以.这里所说的微信公众号开发指的是订阅号和服务号. 另外,未认证的个人订阅号有一些接口是没有权限的,并且目前个人订阅号已不支持微信认证,也就是说个人订阅号无法调用一些高级的权限接口,下图就是一个未认证的个人订阅号所具备权限列表,像生成二

随机推荐