一、基本原理
在開始做之前,大家可能對這個很感興趣,但是又比較茫然。是不是很復雜?很難學啊?
其實恰恰相反,很簡單。為了打消大家的顧慮,先簡單介紹了微信公眾平台的基本原理。
微信服務器就相當於一個轉發服務器,終端(手機、Pad等)發起請求至微信服務器,微信服務器,然後將請求轉發給自定義服務(這就裡就是我們的具體實現)。
服務處理完畢,然後揮發給微信服務器,微信服務器再將具體響應回復到終端。
通信協議為:HTTP
數據格式為:XML
具體的流程如下圖所示:
其實,我們需要做的事情,就是對HTTP請求,做出響應。
具體的請求內容,我們按照特定的XML格式去解析,處理完畢後,也要按照特定的XML格式返回。
我們只需要一個簡單的實現HttpHandler即可。
當然,微信平台還能實現更加復雜的業務,比如微信可以作為內嵌的浏覽器,我們可以通過微信的鏈接,打開htm界面,然後實現自己的邏輯。
二、消息接口(官方文檔)
申請消息接口
點擊申請 ,填寫網址url和token,其中token可由開發者可以任意填寫,用作生成簽名。
網址接入
公眾平台用戶提交信息後,微信服務器將發送GET請求到填寫的URL上,並且帶上四個參數:
開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,否則接入失敗。
signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
加密/校驗流程:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信
消息推送
當普通微信用戶向公眾賬號發消息時,微信服務器將POST該消息到填寫的URL上。結構如下:
文本消息
<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>
圖片消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MsgId>1234567890123456</MsgId> </xml>
地理位置消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml>
鏈接消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[公眾平台官網鏈接]]></Title> <Description><![CDATA[公眾平台官網鏈接]]></Description> <Url><![CDATA[url]]></Url> <MsgId>1234567890123456</MsgId> </xml>
事件推送
事件推送只支持微信4.5版本,目前開啟自定義菜單接口事件推送、關注與取消關注事件推送。其余功能即將開放,敬請期待。
<xml><ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[EVENT]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
消息回復
對於每一個POST請求,開發者在響應包中返回特定xml結構,對該消息進行響應(現支持回復文本、圖文、語音、視頻、音樂)。
微信服務器在五秒內收不到響應會斷掉連接。
回復xml結構如下:
回復文本消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[content]]></Content> </xml>
回復音樂消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[TITLE]]></Title> <Description><![CDATA[DESCRIPTION]]></Description> <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl> <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl> </Music> </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>
官方接口文檔:http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97
注意事項
1.用戶OpenID對一個公眾號是固定唯一的串
2.請使用80端口
盡請關注:後續我們將全面講解具體的開發過程。
三、消息類圖
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持幫客之家。