1. 程式人生 > >微信開發之消息回復--圖文消息(四)

微信開發之消息回復--圖文消息(四)

轉換 turn ews exce 默認 nal ini equal 介紹

一、消息格式

 1 <xml>
 2     <ToUserName>
 3         < ![CDATA[toUser] ]>
 4     </ToUserName>
 5     <FromUserName>
 6         < ![CDATA[fromUser] ]>
 7     </FromUserName>
 8     <CreateTime>12345678</CreateTime>
 9     <MsgType>
10         < ![CDATA
[news] ]> 11 </MsgType> 12 <ArticleCount>2</ArticleCount> 13 <Articles> 14 <item> 15 <Title> 16 < ![CDATA[title1] ]> 17 </Title> 18 <Description> 19 < ![CDATA
[description1] ]> 20 </Description> 21 <PicUrl> 22 < ![CDATA[picurl] ]> 23 </PicUrl> 24 <Url> 25 < ![CDATA[url] ]> 26 </Url> 27 </item> 28 <item
> 29 <Title> 30 < ![CDATA[title] ]> 31 </Title> 32 <Description> 33 < ![CDATA[description] ]> 34 </Description> 35 <PicUrl> 36 < ![CDATA[picurl] ]> 37 </PicUrl> 38 <Url> 39 < ![CDATA[url] ]> 40 </Url> 41 </item> 42 </Articles> 43 </xml>

二、參數介紹

參數是否必須說明
ToUserName 接收方帳號(收到的OpenID)
FromUserName 開發者微信號
CreateTime 消息創建時間 (整型)
MsgType news
ArticleCount 圖文消息個數,限制為8條以內
Articles 多條圖文消息信息,默認第一個item為大圖,註意,如果圖文數超過8,則將會無響應
Title 圖文消息標題
Description 圖文消息描述
PicUrl 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖360*200,小圖200*200
Url 點擊圖文消息跳轉鏈接

三、圖文消息實體類(圖文消息內容實體)

1.圖文消息內容實體

 1 /**
 2  * 
 3  * @author 4  * @date 2018年1月27日 上午10:12:08
 5  * @TODO TODO圖文消息外層實體
 6  */
 7 public class NewsMessage extends BaseMessge{
 8 
 9     private int ArticleCount;//    圖文消息個數,限制為8條以內
10     private List<News> Articles;//多條圖文消息信息,默認第一個item為大圖,註意,如果圖文數超過8,則將會無響應
11     public int getArticleCount() {
12         return ArticleCount;
13     }
14     public void setArticleCount(int articleCount) {
15         ArticleCount = articleCount;
16     }
17     public List<News> getArticles() {
18         return Articles;
19     }
20     public void setArticles(List<News> articles) {
21         Articles = articles;
22     }
23     @Override
24     public String toString() {
25         return "NewsMessage [ArticleCount=" + ArticleCount + ", Articles="
26                 + Articles + "]";
27     }
28 }

2.圖文消息外層實體

 1 /**
 2  * 
 3  * @author 4  * @date 2018年1月27日 上午10:12:08
 5  * @TODO TODO圖文消息外層實體
 6  */
 7 public class NewsMessage extends BaseMessge{
 8 
 9     private int ArticleCount;//    圖文消息個數,限制為8條以內
10     private List<News> Articles;//多條圖文消息信息,默認第一個item為大圖,註意,如果圖文數超過8,則將會無響應
11     public int getArticleCount() {
12         return ArticleCount;
13     }
14     public void setArticleCount(int articleCount) {
15         ArticleCount = articleCount;
16     }
17     public List<News> getArticles() {
18         return Articles;
19     }
20     public void setArticles(List<News> articles) {
21         Articles = articles;
22     }
23     @Override
24     public String toString() {
25         return "NewsMessage [ArticleCount=" + ArticleCount + ", Articles="
26                 + Articles + "]";
27     }
28 }

四、添加將圖文消息轉換為xml方法

/**
 * 圖文消息轉換為xml
 * @param newsMessage
 * @return
 */
  public static String newsMessageToXml(NewsMessage newsMessage){
    //XStream xStream = new XStream(new StaxDriver());
    xStream.alias("xml", newsMessage.getClass());
    xStream.alias("item", new News().getClass());
    return xStream.toXML(newsMessage);
  }

五、添加初始化圖文消息代碼

 1 public static String initNewsMessage(String toUserName,String fromUserName){
 2         String message = "";
 3         List<News> newsList = new ArrayList<News>();
 4         //圖文消息實體
 5         NewsMessage newsMessage = new NewsMessage();
 6         //圖文消息的內容實體
 7         News news = new News();
 8         news.setTitle("壽光小夥誰最帥!");
 9         news.setDescription("讓金融活水更好澆灌實體經濟,不僅是做大做強經濟“蛋糕”的根本選擇,也是防範化解金融風險的必由路徑.");
10         news.setPicUrl("http://fujilong.ngrok.cc/Weixin/image/test.jpg");//需要替換本地服務器圖片文件
11         news.setUrl("www.shouguang.gov.cn");
12         News newsTwo = new News();
13         newsTwo.setTitle("壽光美女誰最美!");
14         newsTwo.setDescription("讓金融活水更好澆灌實體經濟,不僅是做大做強經濟“蛋糕”的根本選擇,也是防範化解金融風險的必由路徑.");
15         newsTwo.setPicUrl("http://fujilong.ngrok.cc/Weixin/image/test.jpg");//需要替換本地服務器圖片文件
16         newsTwo.setUrl("www.shouguang.gov.cn");
17         newsList.add(news);
18         newsList.add(newsTwo);
19         newsMessage.setFromUserName(toUserName);
20         newsMessage.setToUserName(fromUserName);
21         newsMessage.setMsgType(MessageUtil.MESSAGE_NEWS);
22         newsMessage.setCreateTime(new Date().getTime()+"");
23         newsMessage.setArticles(newsList);
24         newsMessage.setArticleCount(newsList.size());
25         message = newsMessageToXml(newsMessage);
26         System.err.println(message);
27         return message;
28     }

六、修改Servlet中的Post方法,加入如下代碼:

 1 @Override
 2     protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
 3         req.setCharacterEncoding("UTF-8");
 4         resp.setCharacterEncoding("UTF-8");
 5         PrintWriter out = resp.getWriter();
 6         try {
 7             Map<String, String> map = MessageUtil.xmlToMap(req);
 8             String fromUserName = map.get("FromUserName");
 9             String toUserName = map.get("ToUserName");
10             //消息類型
11             String msgType = map.get("MsgType");
12             String content = map.get("Content");
13             //回復文本消息
14             String message = null;
15             //消息類型判斷
16             /*if(MsgTypeParam.MESSAGE_TEXT.equals(msgType)){
17                 String text = "山東京帝軟件微信公眾號測試";
18                 //調用初始化文本消息方法
19                 message = InitMsgContentUtil.initText(toUserName, fromUserName, text);
20             }*/
21             if("文本".equals(content)){
22                 String text = "山東京帝軟件微信公眾號測試";
23                 //調用初始化文本消息方法
24                 message = InitMsgContentUtil.initText(toUserName, fromUserName, text);
25             }
26             if("圖文".equals(content)){
27                 message = InitMsgContentUtil.initNewsMessage(toUserName, fromUserName);
28             }
29             out.print(message);
30         } catch (DocumentException e) {
31             e.printStackTrace();
32         }finally{
33             out.close();
34         }
35     }

七、項目部署及查看結果  

  向公眾號發送信息,看是否能夠正常返回信息。效果圖如下:

技術分享圖片

微信開發之消息回復--圖文消息(四)