微信公众号开发之回复图文消息java代码
作者:小小渔夫 发布时间:2022-11-24 00:56:19
标签: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));
}
}
运行结果:
来源:https://www.cnblogs.com/PreachChen/archive/2018/03/27/8655394.html


猜你喜欢
- 一、Activity的生命周期首先,我们来了解一下Activity典型的生命周期一个Activity从启动到结束会以如下顺序经历整个生命周期
- 本文实例为大家分享了Android实现接近传感器的具体代码,供大家参考,具体内容如下1.接近传感器检测物体与听筒(手机)的距离,单位是厘米。
- 实现需求:1.用户未登录,跳转到登录页,登录完成后会跳到初始访问页。2.用户自定义处理(如需要激活),跳转到激活页面,激活完成后会跳到初始访
- 1.for循环import com.google.common.base.Function;import com.google.common
- kafka 架构原理大数据时代来临,如果你还不知道Kafka那就真的out了!据统计,有三分之一的世界财富500强企业正在使用K
- spring.thymeleaf.cache=false不起作用配置是清除缓存,实现热部署。也就是修改了html后不用重启,刷新页面就能看到
- 之前开发项目,一直都使用的是外壳程序加子程序的模式,通过外壳程序去启动子程序,外壳程序和子程序之间的通信,是使用配置文件完成的。我总觉得这样
- SpringBoot的持久化层可以是Spring内置的轻量级JdbcTemplate、也可以是Hibernate或Mybatis等等,只需要
- 本文实例源自一个项目,其中需要调用本机的摄像头进行拍照,分享给大家供大家参考之用。具体步骤如下:硬件环境:联想C360一体机,自带摄像头编写
- 内存泄漏:是指内存得不到GC的及时回收,从而造成内存占用过多,从而导致程序Crash,也就是常说的OOM。 一、static 先来看下面一段
- 在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用。这里将会介绍如何通过设置允许局域网和外网机
- 文章目录 简介增量构建自定义inputs和outputs运行时API隐式依赖输入校验自定义缓存方法输入归一化其他使用技巧简介在我们使用的各种
- 前言本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回 APP 页面,通过例子来讲述悬浮窗口实现原理及细节处理,效
- 一、项目简述功能包括: 分为管理员及普通业主角色,业主信息,社区房屋,维护 管理,社区车辆,社区投诉,社区缴费,社区业务信息维 护等等功能。
- Eclipse 中的 GitEclipse 附带了一个名为 Egit 的插件,它提供了一个非常完善的 Git 操作接口。 这个插件可以通过切
- 引言native image是GraalVM中提供的一个命令,可以把字节码文件或Jar包编译成为一个二进制可执行文件,同时它自己也是用Jav
- 我们都知道在ios手机上面,有一个侧滑退出当前界面的功能,但是在安卓手机上系统没有给我们提供这样的功能,但是这依然阻挡不了强大的安卓的定制功
- 在EditText输入数字的时候,通常我们需要限制小数点前后位数。比如金额输入一般我们需要限制小数点后面最多2位。我们可以通过 TextWa
- 一、图示我们先来看看今天要介绍哪些内存溢出案例,这里总结了一张图,如下所示。二、定义主类结构首先,我们创建一个名称为BlowUpJVM的类,
- 前言上节在谈论Bean的实例化过程时,在说明实例化后阶段时只是粗略地看了一下populateBean,并未展开分析。本节接着populate