微信公眾平臺(tái)技術(shù)實(shí)操(7):公眾平臺(tái)開發(fā)模式
開發(fā)模式簡(jiǎn)介
點(diǎn)擊公眾平臺(tái)后臺(tái)導(dǎo)航的“高級(jí)功能”就可以進(jìn)入,該頁(yè)面有兩個(gè)模式選擇,分別為“編輯模式”和“開發(fā)模式”,如下圖:

默認(rèn)兩個(gè)模式都是關(guān)閉狀態(tài),兩種模式不能同時(shí)開啟,點(diǎn)擊開發(fā)模式區(qū)域進(jìn)入開發(fā)模式設(shè)置頁(yè)面,如下圖:

模式總開關(guān)。只有“成為開發(fā)者”后才可以開啟,這里要注意的是由于編輯模式和開發(fā)模式不能同時(shí)開啟,使用開發(fā)模式前應(yīng)先關(guān)閉編輯模式。
api接口文檔。點(diǎn)擊后可以查看目前所有開放的接口使用詳細(xì)說(shuō)明,包括開發(fā)用的SDK包。(SDK,Software Development Kit 的縮寫,中文即“軟件開發(fā)工具包”。廣義上指輔助開發(fā)某一類軟件的相關(guān)文檔、范例和工具的集合。)
成為開發(fā)者。點(diǎn)擊后會(huì)出現(xiàn)接口配置頁(yè)面,用來(lái)綁定自己服務(wù)器上的程序接口與微信接口通訊,具體的操作將在第九章介紹。
二、api接口文檔簡(jiǎn)介
首先來(lái)了解下微信開發(fā)模式有那些接口,清楚微信接口能做什么不能做什么有利于自己的產(chǎn)品設(shè)計(jì),可以考慮自己的產(chǎn)品如何結(jié)合如何規(guī)劃。
由于微信本身是一個(gè)通訊工具,它所有的api接口都是基于一問(wèn)一答的通訊機(jī)制,因此它的接口文檔分為消息推送(用戶在公眾平臺(tái)上行發(fā)送 的消息)和消息回復(fù)(響應(yīng)用戶上行消息反饋下發(fā)回復(fù)的消息),本教程除了目前已經(jīng)公布的接口外,還將劇透一部分將要開放的接口,比較特殊的消息下發(fā)接口屬于最高級(jí)別接口,大部分開發(fā)者是拿不到的,所以不介紹了。
消息推送(即公眾賬號(hào)能接收到的用戶消息請(qǐng)求)
1、文本消息
此類消息即用戶向公眾賬號(hào)輸入文本發(fā)送消息,是公眾平臺(tái)接收到最多的消息,也是最重要的搜索、互動(dòng)請(qǐng)求,因?yàn)檎Z(yǔ)音識(shí)別還不成熟,圖片無(wú)法識(shí)別,地理位置用的場(chǎng)景也不多。
接口獲取到的消息格式:

這里先說(shuō)下XML數(shù)據(jù)格式,它不僅是一種非常適合web傳輸?shù)母袷?,還具有強(qiáng)大的數(shù)據(jù)索引、排序、查找、相關(guān)一致性等特點(diǎn),有些網(wǎng)站甚至拿XML來(lái)做數(shù)據(jù)庫(kù),比如射手網(wǎng),它結(jié)構(gòu)非常簡(jiǎn)單,看起來(lái)有點(diǎn)像html,可讀性比較強(qiáng),微信開發(fā)接口的消息傳遞主要在用這個(gè)。
有些人會(huì)覺(jué)得很頭大,其實(shí)不理解也沒(méi)關(guān)系,只要搞清楚它每次傳輸給你的有那些數(shù)據(jù),你怎么獲取這些數(shù)據(jù)就可以了。
文本消息的數(shù)據(jù)字段:
ToUserName:開發(fā)者微信號(hào)(公眾賬號(hào)ID)
FromUserName:發(fā)送方帳號(hào)(微信用戶的OPENID,每個(gè)微信用戶與每個(gè)公眾賬號(hào)是唯一的,不同公眾賬號(hào)同個(gè)用戶OPENID是不同的)
CreateTime:消息創(chuàng)建時(shí)間
MsgType:消息類型(文本消息為text)
Content:消息內(nèi)容
MsgId:消息的ID號(hào)
2、圖片消息
用戶使用圖片上傳發(fā)送消息,應(yīng)用場(chǎng)景:賬號(hào)注冊(cè)、隨手拍活動(dòng)征集、現(xiàn)場(chǎng)微信照片墻。
接口獲取到的消息格式:

圖片消息與文本消息數(shù)據(jù)不同:
MsgType:消息類型為image
PicUrl:圖片鏈接,該圖片保存在微信的服務(wù)器上,可以通過(guò)遠(yuǎn)程抓取圖片程序保存到本地。
3、地理位置消息
微信將LBS當(dāng)作一個(gè)交互信息進(jìn)行傳遞,比較常見(jiàn)的微信用戶之間發(fā)送地理位置告知目的地所在,公眾號(hào)里發(fā)送地理位置搜索周邊人、商家、信息等。
接口獲取到的消息格式:

地理位置消息與文本消息數(shù)據(jù)不同:
MsgType:消息類型為location
Location_X、Location_Y、Scale:地理位置的經(jīng)緯度和地圖縮放比例,用于第三方地圖接口的應(yīng)用,搜索周邊需要用到
Label:地理位置文字信息,如某某城市某某路某某號(hào),如果以城市為單位查詢直接拿這個(gè)就可以。
4、鏈接消息
微收藏、印象筆記等用來(lái)保存微信里圖文消息的應(yīng)用就是使用的這個(gè)接口,用戶將鏈接發(fā)送到該公眾賬號(hào),公眾賬號(hào)通過(guò)鏈接抓取網(wǎng)頁(yè)內(nèi)容然后收藏保存。
接口獲取到的消息格式:
鏈接消息與文本消息數(shù)據(jù)不同:
MsgType:消息類型為link
Title:消息標(biāo)題
Description:消息描述
Url:鏈接地址
5、語(yǔ)音消息(未開放)
這個(gè)消息接口并不在公開文檔上,但事實(shí)上有不少微信應(yīng)用已經(jīng)在使用,比如路況電臺(tái),不全面開放的原因我個(gè)人猜測(cè)是因?yàn)槲⑿抛约旱恼Z(yǔ)音識(shí)別還不理想,未來(lái)肯定會(huì)開放,想象一下對(duì)公眾賬號(hào)說(shuō)句話后臺(tái)就能給反饋信息多方便的功能。
接口獲取到的消息格式:

語(yǔ)音消息與文本消息數(shù)據(jù)不同:
MsgType:消息類型為voice
MediaId:語(yǔ)音消息媒體id,可以調(diào)用相應(yīng)接口獲取內(nèi)容
Format:語(yǔ)音類型,如amr,speex,wav等,目前是使用的speex。
6、視頻消息(未開放)
這個(gè)消息接口也不在公開文檔上,結(jié)構(gòu)跟語(yǔ)音消息差不多。
接口獲取到的消息格式:

視頻消息與文本消息數(shù)據(jù)不同:
MsgType:消息類型為video
MediaId:視頻消息媒體id,可以調(diào)用相應(yīng)接口獲取內(nèi)容
ThumbMediaId:視頻消息縮略圖id,可以調(diào)用相應(yīng)接口獲取內(nèi)容
7、事件推送
這個(gè)接口很重要,目前只開放了用戶關(guān)注、用戶退訂,還有自定義菜單按鈕相應(yīng)的功能,部分測(cè)試的有用戶打開公眾號(hào)提醒和自動(dòng)發(fā)送地理位置。也就是用戶不發(fā)送任何內(nèi)容也可以捕捉用戶行為做出回復(fù)。
接口獲取到的消息格式:

事件推送與文本消息數(shù)據(jù)不同:
MsgType:消息類型為event
Event:事件內(nèi)容,subscribe(訂閱)、unsubscribe(取消訂閱)、CLICK(自定義菜單點(diǎn)擊事件)
EventKey:當(dāng)用戶事件為點(diǎn)擊自定義菜單時(shí),返回事件KEY值,與自定義菜單接口中KEY值對(duì)應(yīng)。
很多人在問(wèn)如何知道用戶退訂的,其實(shí)就是這個(gè)消息接口,另外3月26日后將用戶關(guān)注消息也從文本消息改為了事件推送。
消息回復(fù)(即公眾賬號(hào)在接收到用戶消息后下發(fā)回復(fù)消息)
消息回復(fù)需要注意的一點(diǎn)是從接收用戶發(fā)送的消息,到服務(wù)器響應(yīng)返回消息,有效時(shí)間只有5秒鐘,超時(shí)的話用戶是無(wú)法接收到回復(fù)消息的。
1、回復(fù)文本消息
文字閱讀要比其他方式的閱讀成本低,所以能用文本的地方咱們就盡量用文本。
接口下發(fā)的消息格式:

回復(fù)文本消息的數(shù)據(jù)字段:
ToUserName:發(fā)送方帳號(hào)(微信用戶的OPENID,每個(gè)微信用戶與每個(gè)公眾賬號(hào)是唯一的,不同公眾賬號(hào)同個(gè)用戶OPENID是不同的)
FromUserName:開發(fā)者微信號(hào)(公眾賬號(hào)ID)
CreateTime:回復(fù)消息創(chuàng)建時(shí)間
MsgType:回復(fù)消息類型(文本消息為text)
Content:回復(fù)消息內(nèi)容(長(zhǎng)度不超過(guò)2048字節(jié))
FuncFlag:設(shè)置為1的時(shí)候,自動(dòng)星標(biāo)剛才接收到的消息,適合活動(dòng)統(tǒng)計(jì)使用
2、回復(fù)圖片消息(未開放)
這是個(gè)未公開的接口,現(xiàn)在使用開發(fā)模式最苦逼的就是沒(méi)法回復(fù)圖片,還不如編輯模式,啥都能回復(fù)!
接口下發(fā)的消息格式:

與回復(fù)文本消息的數(shù)據(jù)字段的不同:
MsgType:回復(fù)消息類型為image
MediaId: 圖片的id,需要通過(guò)其他接口上傳圖片獲得
上傳圖片限制:1MB,支持JPG格式
3、回復(fù)語(yǔ)音消息(未開放)
這是個(gè)未公開的接口,語(yǔ)音消息展現(xiàn)形式跟音樂(lè)消息還是不一樣的,也不會(huì)出現(xiàn)某些安卓版微信無(wú)法播放音樂(lè)消息的情況。
接口下發(fā)的消息格式:

與回復(fù)文本消息的數(shù)據(jù)字段的不同:
MsgType:回復(fù)消息類型為voice
MediaId: 語(yǔ)音的id,需要通過(guò)其他接口上傳語(yǔ)音獲得
上傳語(yǔ)音限制:1MB,播放長(zhǎng)度不超過(guò)60s,支持AMR格式
4、回復(fù)視頻消息(未開放)
這是個(gè)未公開的接口,和圖片消息差不多。
接口下發(fā)的消息格式:

與回復(fù)文本消息的數(shù)據(jù)字段的不同:
MsgType:回復(fù)消息類型為video
MediaId: 視頻的id,需要通過(guò)其他接口上傳視頻獲得
ThumbMediaId:縮略圖的id,通過(guò)上傳圖片(80*80)得到id
視頻限制:10MB,支持MP4格式
縮略圖限制:64KB,支持JPG格式
5、回復(fù)音樂(lè)消息
很多人問(wèn)我為什么可以播放音樂(lè),沒(méi)什么秘密,就是用這個(gè)接口了。
接口下發(fā)的消息格式:

與回復(fù)文本消息的數(shù)據(jù)字段的不同:
MsgType:回復(fù)消息類型為music
Title: 音樂(lè)標(biāo)題,我經(jīng)常是放歌名
Description: 音樂(lè)描述,我經(jīng)常是放歌手名字
MusicUrl: 音樂(lè)鏈接,支持MP3、WMV、AAC等在線音樂(lè)格式
HQMusicUrl:高質(zhì)量音樂(lè)鏈接,WIFI環(huán)境優(yōu)先使用該鏈接播放音樂(lè),可以和上面的一樣。
6、回復(fù)圖文消息
開發(fā)模式里最喜歡的就是這個(gè)了,比如可以用多圖文消息做個(gè)歡迎菜單,可以做圖文歷史文章查詢。
接口下發(fā)的消息格式:

MsgType:回復(fù)消息類型為news
ArticleCount:圖文消息個(gè)數(shù),限制為10條以內(nèi),這個(gè)必須準(zhǔn)確,有多少條圖文消息就得填寫多少,不然會(huì)出錯(cuò)。
Articles:多條圖文消息信息,默認(rèn)第一個(gè)item為大圖,每個(gè)item的結(jié)構(gòu)完全一樣,每個(gè)item表示一條圖文消息。
Title:圖文消息標(biāo)題
Description:圖文消息描述
PicUrl:圖片鏈接,支持JPG、PNG格式,較好的效果為大圖640*320,小圖80*80。
Url:點(diǎn)擊圖文消息跳轉(zhuǎn)鏈接,這個(gè)鏈接可以是自己網(wǎng)站鏈接,但是記得申請(qǐng)白名單,不然出現(xiàn)警告提示用戶一般不會(huì)點(diǎn)擊進(jìn)去。
其他消息接口
這些接口都未對(duì)外開放,看看就行,如果在寫教程中途官方開放了,我也會(huì)寫進(jìn)。
1、用戶信息接口(未開放)
公眾平臺(tái)獲取關(guān)注用戶的信息。
接口請(qǐng)求地址:
https://api.weixin.qq.com/cgi-bin/user/info
接口返回信息:
subscribe:用戶是否訂閱該公眾號(hào)標(biāo)識(shí),值為0時(shí),拉取不到其余信息
openid:用戶的標(biāo)識(shí),對(duì)當(dāng)前公眾號(hào)唯一
nickname:用戶的昵稱
sex:用戶的性別,值等于1時(shí)為男性,值等于2時(shí)為女性
city:用戶所在城市
language:用戶的語(yǔ)言,簡(jiǎn)體中文為zh_CN
2、媒體文件上傳接口(未開放)
上傳圖片、語(yǔ)音、視頻等文件,獲取media_id,media_id可復(fù)用。
接口請(qǐng)求地址:
http://api.weixin.qq.com/cgi-bin/media/upload
接口返回信息:
type:媒體文件類型,分別有圖片(image)、語(yǔ)音(voice)、視頻(video)和縮略圖(thumb)
media_id:媒體文件上傳后獲取的唯一標(biāo)識(shí)
created_at:媒體文件上傳時(shí)間
3、媒體文件獲取接口(未開放)
通過(guò)media_id獲取圖片、語(yǔ)音、視頻等文件。
接口請(qǐng)求地址:
http://api.weixin.qq.com/cgi-bin/media/get
4、拉取關(guān)注接口(未開放)
拉取公眾賬戶關(guān)注用戶列表。
接口請(qǐng)求地址:
https://api.weixin.qq.com/cgi-bin/user/get
接口返回信息:
total:關(guān)注該公眾賬號(hào)的總用戶數(shù)
count:拉取的OPENID個(gè)數(shù),最大值為10000
data:列表數(shù)據(jù),OPENID的列表
next_openid:下一次拉取的關(guān)注用戶的偏移值