公衆帳號發送歡迎圖文消息php
原文:http://www.cnblogs.com/imaker/p/6249972.htmlhtml
昨天已經講了如何實現用戶訂閱公衆帳號時發送歡迎詞,但這個貌似體現不出開發模式的優點啊,我用編輯模式作不是更加簡單嘛,那麼今天就來個升級版的歡迎詞吧。先看最後的效果,以下圖:瀏覽器
當用戶關注公衆帳號時自動回覆一個多圖文消息,每一個圖文消息能夠對應一篇文章或者本身網站的某個網頁,用戶點擊就能夠查看,是否是很是棒,特別適合一些企業用來作公司業務介紹。如今就教你們如何實現,順便就能夠把圖文消息的回覆講了。緩存
1、使用SAE的分佈式存儲服務服務器
在編輯模式裏作圖文消息回覆時,直接經過關鍵字回覆就能夠很方便的實現,可是編輯模式下的關注回覆不能用圖文消息,因此你們都是用文字的,可是在開發模式裏就可使用了,圖文消息的輸出格式以下:微信
其中圖片是用圖片連接(在上圖標籤PicUrl處)的形式出現,也就是圖片得先上傳到服務器,而後將圖片鏈接放置到輸出代碼裏,這裏提供三種圖片鏈接生成方法:微信開發
一、直接複製第三方網站的圖片連接,好比咱們在百度圖片搜索到某張圖片,將該圖片的連接直接複製過來就能夠,很是方便,可是若是第三方網站把圖片刪除或者說有防盜鏈機制,就會形成圖片不顯示。因此不推薦這類方式,除非能夠保證該圖片連接永久有效。微信公衆平臺
二、將圖片上傳到新浪微博、騰訊微博這些地方發微博(微信的素材管理圖片連接不能使用),而後將圖片連接複製過來,這裏要注意的是記得把微博水印關掉,不然這個圖片上就帶着你的微博名字了。dom
三、我們都已經在用雲計算平臺了,就順便用下雲存儲服務吧,我目前本身是在用又拍雲存儲,那個有點複雜後面作具體完整項目時再介紹。分佈式
如今先使用SAE的 Storage存儲服務,這是SAE爲開發者提供分佈式文件存儲,由於SAE平臺限制使用本地存儲,全部須要持久化的文件好比圖片、音樂等只能保存到Storage上。
首先是啓動Storage服務,進入我們的應用首頁,在左邊導航裏找到」Storage」這個選項,以下圖:
點擊打開後右邊頁面會進入開啓「Storage」服務的設置頁面,以下圖:
點擊「新建一個domain」按鈕,進入存儲空間的設置頁面,以下圖:
存儲空間的名稱,只能由數字和字母組成,根據本身喜愛取個吧。
存儲空間的介紹,用來提示該空間的用途,好比我這個是用來放圖片和音樂文件的。
是否私有云存儲,若是打勾則沒法經過URL直接訪問,只能經過程序接口讀取訪問,我們不用搞那麼複雜因此別打勾了
緩存時間。這個能夠減小服務器的負擔,通常設6小時就能夠了。
防盜鏈設置。能夠設置可以訪問文件的白名單網址,我們也不用搞那麼複雜所別打勾了。
建立成功之後在右邊會出現存儲空間管理,如圖:
存儲空間屬性修改,除了名稱不能修改之外其餘均可以,包括設置訪問權限、說明、防盜鏈以及緩存時間修改等。
刪除該存儲空間,刪除時將會將會把該空間內全部文件都刪除,因此當心操做。
管理存儲空間。點擊後進入管理頁面,能夠看到存儲空間默認的容量是10G,確定夠用,以下圖:
下載客戶端,直接用應用程序管理存儲空間,有點像FTP管理,我們如今是初學者,不用去管這個。
返回Storage的管理首頁。
新建子目錄方便文件分類,好比能夠建一個目錄叫pic,裏面存放圖片文件。
上傳文件,點擊後彈出文件上傳窗口,跟普通的文件上傳操做同樣,支持批量上傳,我就很少介紹了,微信開發模式只支持jpg和png文件,請注意圖片文件格式。另外須要注意的是文件名須要規範,不要和以前的已經上傳的文件同名,不然會覆蓋掉,建議每次上傳前使用日期+編號+文件名的方式。這裏給你們一個我上傳圖片後的樣例:
點擊圖片名稱就會在新窗口打開該圖片,複製瀏覽器的URL就是該圖片的連接,能夠直接用到圖文消息的代碼裏。
可能有朋友會說爲何不把圖片直接上傳到SAE的代碼管理目錄裏訪問,確實能夠這樣作,可是不推薦這樣作,一個是代碼的空間大小默認只有100M,擴容會增長開銷,二是代碼空間是用來跑腳本的,同等流量費用要高不少,三是代碼空間不容許寫入文件,未來沒法實現經過程序上傳圖片的功能。
2、製做多圖文消息
囉嗦一大堆朋友們都等急了吧,如今咱們開始作圖文消息歡迎詞!
昨天我教你們的是用戶訂閱後回覆文字消息,最後實際輸出的是一個通過拼裝的符合文字消息回覆格式的字符串,其結構以下圖:
裏面的一些帶「$」的變量在前面代碼都賦了值,最後回覆到微信公衆平臺接口的實際消息是這樣:
如今打開SAE的代碼管理,進入編輯模式,修改咱們的微信接口文件,首先將代碼中第29行到第31行的三行代碼註釋掉,就是輸出文本消息的三行代碼,如圖所示:
註釋多行代碼使用/*.....*/來包含,在中間的全部內容都再也不被執行。
而後在註釋前面開始寫圖文消息回覆,前面咱們看到過圖文消息回覆的格式了,如今就是要拼接出一個符合圖文消息回覆格式的字符串,當用戶關注時回覆給用戶,首先咱們把圖文消息的公共部分先賦值,如圖:
代碼從30行開始,前面的跟昨天是同樣的,就是監測是否用戶訂閱事件。
首先是賦值給$resultStr這個變量圖文消息的數據頭部,跟文本消息的差很少,只是昨天是用了sprintf這個函數直接將數據寫到模板裏去了,今天是拿模板直接來用,實際效果是同樣的,與文字消息不一樣的是:
第34行,MsgType變成了news;
第35行多了一個ArticleCount,這個值表示多圖文消息的條數,包括了封面消息在內,我這裏是5,各位能夠根據本身實際修改。
當ArticleCount爲1,只放一條消息時則爲單圖文消息,大於2,放了兩條消息以上則爲多圖文消息。
第36行是圖片消息列表標籤的開始,最後會有一個</Articles>來閉合整個圖文消息列表。
PS:在php裏字符串的拼接使用「.」,echo "A"."B";輸出的是AB。固然高級程序猿爲了提升運行效率會使用其餘方法來拼接字符串,這裏就不說了。
而後是封面消息,如圖下:
這裏能夠看到$resultStr和「=」之間多了一個「.」,這也是字符串拼接語法,等於$resultStr=$resultStr.「....」,將新的字符串拼接到以前已經賦值的$resultStr後面再賦值給$resultStr。
圖文消息裏用<item>...</item>來區分各條消息,每條圖文消息數據格式都同樣,分別爲:
第41行,圖文消息的標題
第42行,圖問消息的摘要,若是是多圖文能夠爲空不填寫,若是是單圖文消息須要填寫。
第43行,封面圖片,放置圖片連接,官方給出較好的效果爲大圖即多圖文的封面消息圖片爲640*320,小圖即列表消息的縮略圖80*80,注意這裏的圖片其實能夠跟實際連接打開的文章圖片不一致。
第44行,文章連接,放置點擊該圖文消息時打開的頁面,這裏能夠放置本身的網頁連接,好比淘寶店的或者本身網站的,固然也能夠放置微信公衆平臺的圖文消息連接(ZTalk的文章查詢裏其實放的都是微信文章連接,省事又省流量,哈哈哈)。
剩下就是放四個列表消息,結構跟封面消息實際上是同樣的,只是在多圖文消息模式下默認會將第一個消息做爲封面消息,如圖:
只須要將前面的封面消息複製粘貼一下,而後把標題、摘要、圖片和鏈接這些修改下就能夠了。
最後是把圖文消息的尾巴加上,如圖:
第76行就是我前面說的閉合圖文消息內容;
第77行是用來星標用戶請求消息的,因爲這個消息是實際上是用戶訂閱事件,不用打星標,因此這裏的值爲0。
第78行是閉合整個輸出圖文消息結構的。
好了,如今保存下,從新關注下公衆帳號,看看是否成功回覆了一個圖文菜單,是否是頗有成就感!
給你們一個做業:試試關注時回覆單條圖文或者5條以上的多圖文消息。
ZTalk祕籍
微信開發的調試是個很麻煩的事情,爲何呢?由於接口是微信來調用的,全部的結果都是返回到微信公衆平臺去的,咱們沒法獲得運行結果,除了語法錯誤還能夠直接打開接口網頁看錯誤提示,好比下圖表示個人代碼第16行語法錯了:
其餘錯誤就全得從公衆帳號裏看了,但實際上只要有錯,公衆帳號裏啥反應都沒有了,通常來講就是邏輯出錯或者變量沒有獲取到值什麼的,這個時候就須要設置一些斷點來檢查,好比咱們在今天的這個課程中若是發現訂閱後沒有任何歡迎提示,咱們能夠在輸出前設置一個斷點,將結果先保存成一個文件,而後查看該文件檢查結果是否正確,如圖:
前面說了SAE不容許在本地生成文件,因此咱們得把文件生成到Storage存儲空間去。
第87行是新建一個Storage的對象,定義爲$s;
第88行是寫入一個文件到Storage空間,格式爲$s->write(空間名稱,寫入文件名,寫入的內容)
而後咱們取消並從新訂閱公衆帳號後,到Storage會看到多了一個test.txt的文件,如圖:
點擊打開後就能夠看到內容,若是正常的話裏面內容就是多圖文消息的XML數據,如圖:
若是文件沒有生成,或者文件裏面是空的,就說明程序運行有問題,我們把斷點上移,由於程序運行通常是從上至下的,因此咱們能夠把斷點放到第一個邏輯判斷處,如圖我移動到了是否接收到微信接口發送消息的判斷位置:
主要是監測有沒有收到微信的請求,我直接用字符串"get_post"(記得字符串要用雙引號包含)來代替以前的變量,而後在公衆號裏發送任意字符,再查看Storage裏的test.txt文件,若是正常文件應該生成,而且裏面應該有「get_post」,不然就是出錯了,那要檢查公衆平臺是否已經和SAE應用正常通信了。
斷點通常是檢查變量的賦值是否正確,或者是否從接口獲取到了值,或者代碼邏輯是否正確。好比能夠移到圖中這個邏輯判斷後面,文件寫入內容直接用字符串好比"subscribe",而後取消關注再訂閱公衆號,監測是否收到了訂閱事件,若是文件裏有subscribe字樣就表示運行正常,不然就是出錯了:
今天的課就先到這裏,明天講關鍵字回覆以及……N多人關心的如何播放音樂!!!!