1. 程式人生 > >java微信公眾平臺開發

java微信公眾平臺開發

http style 消息發送 req gets 信號 多說 接收消息 servle

微信公眾平臺的開發,總體說來也是簡單的,就是先大概看下微信公眾平臺接口文檔

請先大概瀏覽一下API手冊,我們會發現,推送給微信服務器的數據有兩種:xml的形式,和json的形式.

那麽什麽時候是XML格式,什麽時候是json格式呢?

技術分享

廢話不多說,先上個流程圖:用戶發送任意文字,我們回復一條圖文消息:

(1)這是一種接收消息--回復消息的模式:

技術分享

2標誌的xml格式:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>


<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>

3標誌的xml格式:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title> 
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
</xml>

==》這就說明我們想要發送圖文消息出去,還要構造圖文消息。
需要SendMessageVo:
public class SendMessageVo {
// 開發者微信號
private String ToUserName;
// 發送方帳號(一個OpenID)
private String FromUserName;
// 消息創建時間 (整型)
private long CreateTime;
// 消息類型(text/image/location/link)
private String MsgType;

// 圖文消息個數,限制為10條以內
private int ArticleCount;

// 多條圖文消息信息,默認第一個item為大圖
private List<ArticleVo> Articles;
}
public class ArticleVo {
// 圖文消息名稱
private String Title;
// 圖文消息描述
private String Description;
// 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80,限制圖片鏈接的域名需要與開發者填寫的基本資料中的Url一致
private String PicUrl;
// 點擊圖文消息跳轉鏈接
private String Url;
}
這些屬性都是和XMl裏面的元素一一對應的。
通過將對象轉換成xml格式,然後return就可以。

// 調用核心業務類接收消息、處理消息跟推送消息
@RequestMapping(value = "", method = RequestMethod.POST)
public void post(PrintWriter out, HttpServletRequest req, HttpServletResponse response) {
  jsonObject str= weixinService.processRequest(req);
  out.print(str);
}

以上:我們接收到微信服務器的post請求,經過解析後,獲得openid,然後構造我們自己的xml數據,返回給微信服務器,微信服務器就會把我們的消息發送給用戶。

(2)這是一種單方向發送的模式:

技術分享

註意,這裏構造的不再是xml格式,而是json數據:

{
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",  
           "miniprogram":{
             "appid":"xiaochengxuappid12345",
             "pagepath":"index?foo=bar"
           },          
           "data":{
                   "first": {
                       "value":"恭喜你購買成功!",
                       "color":"#173177"
                   },
                   "keynote1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keynote2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keynote3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"歡迎再次購買!",
                       "color":"#173177"
                   }
           }
       }
標紅的是必填選項。模板的內容可以在公眾號中模板的模塊中查看。
String putStr = JSONObject.toJSONString(sendTemplateVo);
String url = send_template_url.replace("ACCESS_TOKEN", token);
JSONObject jsonObject = WeiXinHttpRequest.httpRequest(url, "POST", putStr);
if (!("ok".equals(jsonObject.getString("errmsg")))) {
System.out.println("發送失敗!");
}
send_template_url=“https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN”可以在微信API上查看,
JSONObject 裏面的內容,可以知道發送失敗或成功:
    {
           "errcode":0,
           "errmsg":"ok",
           "msgid":200228332
    }

SendTemplateVo對象:
public class SendTemplateVo {
private String touser;

private String template_id;

private String url;

private Map<String, TemplateDataVo> data;
}
public class TemplateDataVo {
private String value;
private String color;
}


 


以上:其實說白了,就是自己寫一個對象,然後構造成微信服務器規定的格式(json),再調用微信服務器提供的URL接口,返回jsonObject成功的話,表示微信服務器已經幫你的消息發送給了用戶。

 

java微信公眾平臺開發