公衆帳號自定義回覆功能php
原文:http://www.cnblogs.com/imaker/p/6249980.htmlhtml
微信官方其實並不推薦常常羣發消息,更多的是但願用戶經過對話來本身獲取服務或者進行搜索。今天咱們就講下如何使用開發模式作自定義回覆。數據庫
目前公衆帳號能夠接收的用戶提交消息請求有四種類型,分別是文字、圖片、地理位置和連接,而公衆帳號回覆只有三種格式,文字、圖文和音樂,也就是說用戶互動的模式最多也就是12種,咱們今天先講三種即文字回覆文字、文字回覆圖文、文字回覆音樂。數組
這強調一下,微信的消息接口通信有效時間是5秒,也就是說網絡不穩定等緣由很容易形成用戶在5秒內接收不到回覆消息,而後就通信中斷了,這幾天有人反映關注ZTalk後沒有消息提示就是這個問題。微信
1、文字回覆文字之鸚鵡學舌網絡
鸚鵡學舌你們都知道,就是你說什麼它跟着你說什麼,我們也能夠在微信公衆平臺裏玩一下,首先進入SAE平臺,打開代碼編輯,在以前的接口文件上進行修改。代碼如圖:數據結構
代碼添加位置是在「事件消息」的註釋前面,用戶消息賦值以後,實際添加的代碼是從圖上20行開始到41行。微信公衆平臺
第21行是判斷用戶發送的消息類型是否文字消息,能夠參考事件消息的判斷,變更的只是消息類型標示。函數
第24行是判斷若是用戶發送了文字消息,那麼獲取用戶發送的文字消息內容賦值給變量$form_Content 。學習
PS:這裏有個函數「trim」,你們能夠查下php的函數手冊,這個函數做用是去除字符串首尾的空格,有時候用戶誤在頭尾多敲了空格,若是不去除的話就會出現關鍵字沒法匹配,好比「你好 」若是不去掉尾部空格就沒法匹配關鍵字「你好」。
第26行是判斷用戶發送的消息內容是否爲空,能夠參照第9行的邏輯,empty($form_Content)在$form_Content不爲空的時候返回0,爲空的時候返回1,非(!)0即1表示條件成立,用戶發送的消息是有內容的。
第28行到第31行就是完成回覆文字消息的功能,其中回覆的內容直接用了$form_Content,也就是把用戶發送的內容又給回覆回去。
第34行是若是用戶發送的內容爲空白,則返回輸入提示。所以第37行的回覆消息就是"請輸入些什麼吧……"。
好了如今去測試下,當你向公衆帳號輸入文字時,公衆帳號就會回覆一樣的內容給你,固然你也能夠把$form_Content改爲直接的字符串,這樣就是自動回覆了。
2、文字回覆圖文之餐館菜單
有多少人能立刻說出編輯模式裏最多能設多少個關鍵字?估計很少,固然用心看我教程的應該知道,是200個,到了開發模式這個關鍵字實際上是無限的,前面舉了文字回覆文字的簡單例子,如今加點難度,能夠識別關鍵字而且回覆的是圖文消息,我們就拿菜單來作例子吧,先作菜譜的類別,這個咱們用文字回覆,代碼如圖下:
添加的代碼位置在判斷用戶發送消息不爲空的條件判斷以後,默認回覆以前,這裏你們注意下默認回覆其實就是將前面文字回覆文字的變量用字符串代替了。增長的代碼從第29行開始到41行。
第30行判斷用戶發送過來的消息是否爲「菜譜」,這裏注意判斷是否等因而用兩個「=」號。若是是則運行該判斷條件下的代碼。
第33行先賦值給$return_str一個初始字符串點菜提示「請輸入字母編碼瀏覽相應菜品:」,我這裏加了兩個\n表示空兩行。
第34行是一個數組,數組的元素爲菜譜的類別。
數組在程序中使用很是廣泛,它是一種把具備相同類型的若干變量、數字或者字符串,有序組織起來的一種形式,有點像我們之前數學課教的集合概念。
數組的每一個元素都是由鍵和值關聯組成,我在例子裏的定義方式鍵值會默認生成,第一個元素的鍵值爲0,元素值是「lc.冷菜\n」,數組的每一個元素值可使用「數組名[鍵值]」的方式獲取或者輸出,好比$return_arr[0]的值就是「lc.冷菜\n」。
數組能夠用來作數據的存儲、排序、檢索等,它的概念比較複雜可是很重要,但願你們可以去看些資料認真學習下。
第35行是用implode函數將$return_arr轉化成字符串,而後加到以前賦值過的$return_str後面,其運行結果爲:
"請輸入字母編碼瀏覽相應菜品:\n\nlc.冷菜\nhb.杭幫菜\nsk.燒烤\nwp.外婆燒\nml.麻辣\nrc.熱菜\ntp.甜品"。
implode函數的使用方法爲implode(分隔符,數組),將數組內元素轉化成字符串,並將分隔符插入元素之間,我在例子裏分隔符爲空值,因此最後轉化的字符串是首尾相連中間沒有分隔符的。
後面的就不解釋了,輸出文字消息同時退出運行。
接着咱們來示例某個類別的詳細菜單,我們用多圖文消息來作,靈光的朋友已經想到了,呵呵,先寫一個判斷,而後把那段用戶關注回覆多圖文消息的代碼拷貝過來修改下就行了。固然我今天加了點料,示例以下:
添加的代碼位置在菜譜的大括號後面。第42行到51行和以前的是同樣的,惟一不一樣的是ArticleCount我設置成了10,也就是圖文消息條數爲10條(編輯模式裏多圖文消息最多隻有8條,開發模式裏是10條),不清楚的能夠看第十期教程,我直接講下改進的部分。
第53行到105行我定義了一個數組$return_arr,這個數組裏共有10個元素,每一個元素又是一個結構相同的數組,這些數組都有三個元素分別對應標題、圖片和連接,爲了偷懶,我9個列表消息只是換了標題,沒有圖片和鏈接,不知道你們看明白沒有。
這個數組其實就至關於我把菜單的10道菜裏不一樣的數據按照相同的結構作了集合,而後使用一個循環讀取語句將這些數據拼接成將要輸出的圖文消息。
第107行的foreach是一個將數組中每一個元素按照鍵值順序遍歷一遍的函數,通俗的說就是將$return_arr這個數組裏的元素按照前後順序讀取出來,每次讀取一個元素,讀取出來的元素賦值給$value,因此這個$value的值會隨着每次循環改變。即第一次循環時$value=$return_arr[0],第二次循環時$value=$return_arr[1]……
每次讀取的$value其實就是$return_arr一個元素,根據上面的數據結構這個元素又是一個數組,裏面有三個元素,分別對應了標題、圖片和連接,值是$value[0]、$value[1]、$value[2],將這三個數據拼接到圖文消息模板,同時與前一次的$resultStr拼接。這樣作的好處在於減小了代碼的長度,把圖文消息模板複用了,另外這個數組的結構其實跟數據庫裏讀取出來的結構是同樣的,因此也是想讓你們一點點熟悉起來。
等循環結束就執行第116行,完成最後的閉合拼接,而後輸出結果。公衆帳號就將這個包含10條菜品的圖文消息發送給了用戶。
3、文字回覆音樂之表情傳意
不少人,真的不少人,幾乎天天都有人在公衆平臺上問我同一個問題,就是你怎麼能夠放超過60秒的歌曲,個人答案只有一個,就是用開發模式的音樂消息回覆接口實現的。今天就給你們介紹下如何使用音樂接口來回複用戶消息,讓用戶有好的欣賞體驗。
回覆音樂消息裏的音樂是以連接形式加載到回覆數據模板裏的,相似我們回覆圖文消息裏的圖片連接,SO,咱們音樂文件的連接獲取也參照圖片鏈接方式,一種呢是找網上在線收聽的連接,不過真不是很保險,不少是防盜鏈的,比圖片還嚴格,另一種呢就是放到雲存儲平臺上,這裏建議你們若是要把音樂作成常態功能,必須選擇專業的雲存儲平臺,好比又拍雲、七牛。
今天我圖個方便就仍是上傳到了SAE的Storage裏了,以下圖,我選了個人大愛曲婉婷成名曲《個人歌聲裏》(偷偷顯擺下,曲婉婷跟我在微博上但是互相關注的噢,我是她第3729個粉絲!!)。
這個消息回覆裏支持的音樂格式目前我只測試過MP三、AAC兩個,確定是沒有問題的,這裏須要注意的是上傳的文件名必須用英文或數字,文件名裏不要有中文、空格、單雙引號等,大小寫無所謂。若是資源容許能夠上傳一個低碼率的音樂文件,再上傳一個高碼率的音樂文件,由於微信裏聽音樂會自動識別網絡環境選擇不一樣音質的版本。
音樂文件準備好後我們就上代碼了吧!我這裏給的例子是用戶發送表情,公衆帳號回覆歌曲,如圖所示:
增長的代碼加到前面菜單的代碼後面就好了,只要在那個默認回覆以前均可以。
第124行代碼是判斷用戶發送的表情是否是微笑。就是微信表情第一排第一個,這裏你們確定會很奇怪微笑表情符號不是「[微笑]」嗎,老賊我最先也犯過這個錯,折騰半天才發現其實微信接口發送過來的表情代碼是這樣的。
第127行這裏是消息類型,音樂消息的類型是music。
第128行到137行就是調用wx_tpl.php裏的音樂消息模板,用sprintf將格式化的數據寫入到變量中去。其中「個人歌聲裏是」是title,「曲婉婷」是DESCRIPTION,第一首歌的連接是低碼率的,第二首是高碼率的,微信會根據環境自動選擇。
後面就是輸出到用戶手機上,用戶接收到的就是音樂播放器,點擊播放鍵就能夠欣賞音樂了,是否是很簡單?
ZTalk祕籍
如何收集全部表情的代碼呢?在第10期教程裏有個祕籍是讓你們調試接口時能夠把輸出結果文件保存到Storage上,而後查看文件檢查程序是否正常。我們就用這個法子抓取全部表情的代碼。
把抓取表情的代碼放到這個位置:
而後到手機上往公衆平臺上發表情,按照順序從第一個一直輸入到最後一個,而後一塊兒發送,而後你到Storage就會看到有bq.txt,打開後就能看到以下圖:
這些就是真正的表情符號,我這裏就發了第一屏幕的,你們抓取完就把代碼都刪除了吧,不然這裏有個結束語句在那裏,不去掉就不會執行後面的程序。