微信公眾號開發之回复圖文消息,供大家參考,具體內容如下
圖文消息的主要參數說明
通過微信官方的消息接口指南,可以看到對圖文消息的參數介紹,如下圖所示:
從上圖可以了解到:
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)); }}運行結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。