微信公眾號(hào)開發(fā)之回復(fù)圖文消息java代碼
微信公眾號(hào)開發(fā)之回復(fù)圖文消息,供大家參考,具體內(nèi)容如下
圖文消息的主要參數(shù)說(shuō)明
通過(guò)微信官方的消息接口指南,可以看到對(duì)圖文消息的參數(shù)介紹,如下圖所示:

從上圖可以了解到:
1、圖文消息的個(gè)數(shù)限制為10,也就是圖文中ArticleCount的值(圖文消息的個(gè)數(shù),限制在10條以內(nèi))
2、對(duì)于圖文消息,第一條圖文的圖片顯示為大圖,其他圖文的圖片顯示為小圖。
3、第一條圖文的圖片大小建議為640*320,其他圖文的圖片建議為80*80
下面開始實(shí)現(xiàn):
請(qǐng)求消息的基類:
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層實(shí)現(xiàn)方法:
封裝方法
/**
* 獲取博客圖文消息
*
* @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("晚天吹涼風(fēng)");
item1.setDescription("點(diǎn)擊進(jìn)入晚天吹涼風(fēng)博客");
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;
}
判斷如果輸入數(shù)字1,返回圖文消息推送
// 處理接收消息
ServletInputStream in = request.getInputStream();
// 將POST流轉(zhuǎn)換為XStream對(duì)象
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);
// 將指定節(jié)點(diǎn)下的xml節(jié)點(diǎn)數(shù)據(jù)映射為對(duì)象
xs.alias("xml", InputMessage.class);
// 將流轉(zhuǎn)換為字符串
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內(nèi)容轉(zhuǎn)換為InputMessage對(duì)象
InputMessage inputMsg = (InputMessage) xs.fromXML(xmlMsg.toString());
// 服務(wù)端
String servername = inputMsg.getToUserName();
// 客戶端
String custermname = inputMsg.getFromUserName();
// 接收時(shí)間
long createTime = inputMsg.getCreateTime();
// 返回時(shí)間
Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;
//接手文本內(nèi)容
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));
}
}
運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java微信公眾號(hào)企業(yè)付款開發(fā)
- Java版微信公眾號(hào)支付開發(fā)全過(guò)程
- 微信公眾號(hào)開發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】
- java微信公眾號(hào)支付開發(fā)之現(xiàn)金紅包
- Java微信公眾號(hào)開發(fā)之通過(guò)微信公眾號(hào)獲取用戶信息
- java微信公眾號(hào)開發(fā)案例
- 用Java設(shè)計(jì)模式中的觀察者模式開發(fā)微信公眾號(hào)的例子
- java微信公眾號(hào)開發(fā)第一步 公眾號(hào)接入和access_token管理
- Java開發(fā)微信公眾號(hào)接收和被動(dòng)回復(fù)普通消息
- java微信公眾號(hào)開發(fā)(搭建本地測(cè)試環(huán)境)
- java開發(fā)微信公眾號(hào)支付
- Java 微信公眾號(hào)開發(fā)相關(guān)總結(jié)
相關(guān)文章
Java Collections.shuffle()方法案例詳解
這篇文章主要介紹了Java Collections.shuffle()方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
關(guān)于Spring?Cache?緩存攔截器(?CacheInterceptor)
這篇文章主要介紹了關(guān)于Spring?Cache緩存攔截器(?CacheInterceptor),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring關(guān)于@Configuration配置處理流程
這篇文章主要介紹了Spring關(guān)于@Configuration配置處理流程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Java實(shí)現(xiàn)仿淘寶滑動(dòng)驗(yàn)證碼研究代碼詳解
這篇文章主要介紹了Java實(shí)現(xiàn)仿淘寶滑動(dòng)驗(yàn)證碼研究代碼詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Java DefaultListableBeanFactory接口超詳細(xì)介紹
這篇文章主要介紹了Java DefaultListableBeanFactory接口,DefaultListableBeanFactory是整個(gè)bean加載的核心部分,是Spring注冊(cè)機(jī)加載bean的默認(rèn)實(shí)現(xiàn)2022-11-11
MyBatis的配置對(duì)象Configuration作用及說(shuō)明
MyBatis的Configuration對(duì)象是MyBatis的核心配置對(duì)象,它包含了MyBatis運(yùn)行時(shí)所需的幾乎所有配置信息,這個(gè)對(duì)象負(fù)責(zé)管理MappedStatement、創(chuàng)建核心組件、提供配置信息的訪問(wèn)接口以及作為插件機(jī)制的入口2025-03-03

