您的位置:首页 > 移动开发 > 微信开发

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

2018-03-27 08:48 190 查看

图文消息的主要参数说明

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



从上图可以了解到:

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

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: