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

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)