在開始作以前,你們可能對這個很感興趣,可是又比較茫然。是否是很複雜?很難學啊?php
其實偏偏相反,很簡單。爲了打消你們的顧慮,先簡單介紹了微信公衆平臺的基本原理。瀏覽器
微信服務器就至關於一個轉發服務器,終端(手機、Pad等)發起請求至微信服務器,微信服務器,而後將請求轉發給自定義服務(這就裏就是咱們的具體實現)。服務器
服務處理完畢,而後揮發給微信服務器,微信服務器再將具體響應回覆到終端。微信
通訊協議爲:HTTP微信公衆平臺
數據格式爲:XMLcurl
具體的流程以下圖所示:this
其實,咱們須要作的事情,就是對HTTP請求,作出響應。加密
具體的請求內容,咱們按照特定的XML格式去解析,處理完畢後,也要按照特定的XML格式返回。url
咱們只須要一個簡單的實現HttpHandler便可。spa
固然,微信平臺還能實現更加複雜的業務,好比微信能夠做爲內嵌的瀏覽器,咱們能夠經過微信的連接,打開htm界面,而後實現本身的邏輯。
點擊申請,填寫網址url和token,其中token可由開發者能夠任意填寫,用做生成簽名。
公衆平臺用戶提交信息後,微信服務器將發送GET請求到填寫的URL上,而且帶上四個參數:
參數 | 描述 |
---|---|
signature | 微信加密簽名 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
開發者經過檢驗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>
參數 | 描述 |
---|---|
ToUserName | 開發者微信號 |
FromUserName | 發送方賬號(一個OpenID) |
CreateTime | 消息建立時間 (整型) |
MsgType | text |
Content | 文本消息內容 |
MsgId | 消息id,64位整型 |
<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>
參數 | 描述 |
---|---|
ToUserName | 開發者微信號 |
FromUserName | 發送方賬號(一個OpenID) |
CreateTime | 消息建立時間 (整型) |
MsgType | image |
PicUrl | 圖片連接 |
MsgId | 消息id,64位整型 |
<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>
參數 | 描述 |
---|---|
ToUserName | 開發者微信號 |
FromUserName | 發送方賬號(一個OpenID) |
CreateTime | 消息建立時間 (整型) |
MsgType | location |
Location_X | 地理位置緯度 |
Location_Y | 地理位置經度 |
Scale | 地圖縮放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
<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>
參數 | 描述 |
---|---|
ToUserName | 接收方微信號 |
FromUserName | 發送方微信號,若爲普通用戶,則是一個OpenID |
CreateTime | 消息建立時間 |
MsgType | 消息類型,link |
Title | 消息標題 |
Description | 消息描述 |
Url | 消息連接 |
MsgId | 消息id,64位整型 |
事件推送只支持微信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>
參數 | 描述 |
---|---|
ToUserName | 接收方微信號 |
FromUserName | 發送方微信號,若爲普通用戶,則是一個OpenID |
CreateTime | 消息建立時間 |
MsgType | 消息類型,event |
Event | 事件類型,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件) |
EventKey | 事件KEY值,與自定義菜單接口中KEY值對應 |
對於每個POST請求,開發者在響應包中返回特定xml結構,對該消息進行響應(現支持回覆文本、圖文、語音、視頻、音樂)。
微信服務器在五秒內收不到響應會斷掉鏈接。
回覆xml結構以下:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[content]]></Content> </xml>
參數 | 描述 |
---|---|
ToUserName | 接收方賬號(收到的OpenID) |
FromUserName | 開發者微信號 |
CreateTime | 消息建立時間 |
MsgType | text |
Content | 回覆的消息內容,長度不超過2048字節 |
<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>
參數 | 描述 |
---|---|
ToUserName | 接收方賬號(收到的OpenID) |
FromUserName | 開發者微信號 |
CreateTime | 消息建立時間 |
MsgType | music |
MusicUrl | 音樂連接 |
HQMusicUrl | 高質量音樂連接,WIFI環境優先使用該連接播放音樂 |
<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>
參數 | 描述 |
---|---|
ToUserName | 接收方賬號(收到的OpenID) |
FromUserName | 開發者微信號 |
CreateTime | 消息建立時間 |
MsgType | news |
ArticleCount | 圖文消息個數,限制爲10條之內 |
Articles | 多條圖文消息信息,默認第一個item爲大圖 |
Title | 圖文消息標題 |
Description | 圖文消息描述 |
PicUrl | 圖片連接,支持JPG、PNG格式,較好的效果爲大圖640*320,小圖80*80。 |
Url | 點擊圖文消息跳轉連接 |
1.用戶OpenID對一個公衆號是固定惟一的串
2.請使用80端口