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

网友投稿 408 2023-02-10


微信公众号开发之回复图文消息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)http:// {

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")

privahttp://te 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));

}

}

运行结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么测试usb接口(怎么测试usb接口的输出电压)
下一篇:springboot 监控管理模块搭建的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~