一、基本原理
在開始做之前,大家可能對這個很感興趣,但是又比較茫然。是不是很復(fù)雜?很難學(xué)啊?
其實恰恰相反,很簡單。為了打消大家的顧慮,先簡單介紹了微信公眾平臺的基本原理。
微信服務(wù)器就相當(dāng)于一個轉(zhuǎn)發(fā)服務(wù)器,終端(手機(jī)、Pad等)發(fā)起請求至微信服務(wù)器,微信服務(wù)器,然后將請求轉(zhuǎn)發(fā)給自定義服務(wù)(這就里就是我們的具體實現(xiàn))。
服務(wù)處理完畢,然后揮發(fā)給微信服務(wù)器,微信服務(wù)器再將具體響應(yīng)回復(fù)到終端。
通信協(xié)議為:HTTP
數(shù)據(jù)格式為:XML
具體的流程如下圖所示:
其實,我們需要做的事情,就是對HTTP請求,做出響應(yīng)。
具體的請求內(nèi)容,我們按照特定的XML格式去解析,處理完畢后,也要按照特定的XML格式返回。
我們只需要一個簡單的實現(xiàn)HttpHandler即可。
當(dāng)然,微信平臺還能實現(xiàn)更加復(fù)雜的業(yè)務(wù),比如微信可以作為內(nèi)嵌的瀏覽器,我們可以通過微信的鏈接,打開htm界面,然后實現(xiàn)自己的邏輯。
二、消息接口(官方文檔)
申請消息接口
點擊申請 ,填寫網(wǎng)址url和token,其中token可由開發(fā)者可以任意填寫,用作生成簽名。
網(wǎng)址接入
公眾平臺用戶提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的URL上,并且?guī)纤膫€參數(shù):
參數(shù) | 描述 |
---|---|
signature | 微信加密簽名 |
timestamp | 時間戳 |
nonce | 隨機(jī)數(shù) |
echostr | 隨機(jī)字符串 |
開發(fā)者通過檢驗signature對請求進(jìn)行校驗(下面有校驗方式)。若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,否則接入失敗。
signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)。
加密/校驗流程:
1. 將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
2. 將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密
3. 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信
消息推送
當(dāng)普通微信用戶向公眾賬號發(fā)消息時,微信服務(wù)器將POST該消息到填寫的URL上。結(jié)構(gòu)如下:
文本消息
1
2
3
4
5
6
7
8
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 開發(fā)者微信號 |
FromUserName | 發(fā)送方帳號(一個OpenID) |
CreateTime | 消息創(chuàng)建時間 (整型) |
MsgType | text |
Content | 文本消息內(nèi)容 |
MsgId | 消息id,64位整型 |
圖片消息
1
2
3
4
5
6
7
8
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 開發(fā)者微信號 |
FromUserName | 發(fā)送方帳號(一個OpenID) |
CreateTime | 消息創(chuàng)建時間 (整型) |
MsgType | image |
PicUrl | 圖片鏈接 |
MsgId | 消息id,64位整型 |
地理位置消息
1
2
3
4
5
6
7
8
9
10
11
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 開發(fā)者微信號 |
FromUserName | 發(fā)送方帳號(一個OpenID) |
CreateTime | 消息創(chuàng)建時間 (整型) |
MsgType | location |
Location_X | 地理位置緯度 |
Location_Y | 地理位置經(jīng)度 |
Scale | 地圖縮放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
鏈接消息
1
2
3
4
5
6
7
8
9
10
|
< xml > < ToUserName > <![CDATA[toUser]]> </ ToUserName > < FromUserName > <![CDATA[fromUser]]> </ FromUserName > < CreateTime >1351776360</ CreateTime > < MsgType > <![CDATA[link]]> </ MsgType > < Title > <![CDATA[公眾平臺官網(wǎng)鏈接]]> </ Title > < Description > <![CDATA[公眾平臺官網(wǎng)鏈接]]> </ Description > < Url > <![CDATA[url]]> </ Url > < MsgId >1234567890123456</ MsgId > </ xml > |
參數(shù) | 描述 |
---|---|
ToUserName | 接收方微信號 |
FromUserName | 發(fā)送方微信號,若為普通用戶,則是一個OpenID |
CreateTime | 消息創(chuàng)建時間 |
MsgType | 消息類型,link |
Title | 消息標(biāo)題 |
Description | 消息描述 |
Url | 消息鏈接 |
MsgId | 消息id,64位整型 |
事件推送
事件推送只支持微信4.5版本,目前開啟自定義菜單接口事件推送、關(guān)注與取消關(guān)注事件推送。其余功能即將開放,敬請期待。
1
2
3
4
5
6
7
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 接收方微信號 |
FromUserName | 發(fā)送方微信號,若為普通用戶,則是一個OpenID |
CreateTime | 消息創(chuàng)建時間 |
MsgType | 消息類型,event |
Event | 事件類型,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點擊事件) |
EventKey | 事件KEY值,與自定義菜單接口中KEY值對應(yīng) |
消息回復(fù)
對于每一個POST請求,開發(fā)者在響應(yīng)包中返回特定xml結(jié)構(gòu),對該消息進(jìn)行響應(yīng)(現(xiàn)支持回復(fù)文本、圖文、語音、視頻、音樂)。
微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會斷掉連接。
回復(fù)xml結(jié)構(gòu)如下:
回復(fù)文本消息
1
2
3
4
5
6
7
|
< xml > < ToUserName > <![CDATA[toUser]]> </ ToUserName > < FromUserName > <![CDATA[fromUser]]> </ FromUserName > < CreateTime >12345678</ CreateTime > < MsgType > <![CDATA[text]]> </ MsgType > < Content > <![CDATA[content]]> </ Content > </ xml > |
參數(shù) | 描述 |
---|---|
ToUserName | 接收方帳號(收到的OpenID) |
FromUserName | 開發(fā)者微信號 |
CreateTime | 消息創(chuàng)建時間 |
MsgType | text |
Content | 回復(fù)的消息內(nèi)容,長度不超過2048字節(jié) |
回復(fù)音樂消息
1
2
3
4
5
6
7
8
9
10
11
12
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 接收方帳號(收到的OpenID) |
FromUserName | 開發(fā)者微信號 |
CreateTime | 消息創(chuàng)建時間 |
MsgType | music |
MusicUrl | 音樂鏈接 |
HQMusicUrl | 高質(zhì)量音樂鏈接,WIFI環(huán)境優(yōu)先使用該鏈接播放音樂 |
回復(fù)圖文消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
< 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 > |
參數(shù) | 描述 |
---|---|
ToUserName | 接收方帳號(收到的OpenID) |
FromUserName | 開發(fā)者微信號 |
CreateTime | 消息創(chuàng)建時間 |
MsgType | news |
ArticleCount | 圖文消息個數(shù),限制為10條以內(nèi) |
Articles | 多條圖文消息信息,默認(rèn)第一個item為大圖 |
Title | 圖文消息標(biāo)題 |
Description | 圖文消息描述 |
PicUrl | 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80。 |
Url | 點擊圖文消息跳轉(zhuǎn)鏈接 |
官方接口文檔: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端口
盡請關(guān)注:后續(xù)我們將全面講解具體的開發(fā)過程。
三、消息類圖
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/yank/p/3507326.html