這篇文章主要介紹微信公眾平臺(tái)開發(fā)消息回復(fù)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門戶設(shè)計(jì)推廣、行業(yè)門戶平臺(tái)運(yùn)營、重慶App定制開發(fā)、移動(dòng)網(wǎng)站建設(shè)、微信網(wǎng)站制作、軟件開發(fā)、服務(wù)器托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)可以獲得的服務(wù)效果。
一、簡(jiǎn)介
微信公眾平臺(tái)提供了三種消息回復(fù)的格式,即文本回復(fù)、音樂回復(fù)和圖文回復(fù),在這一篇文章中,我們將對(duì)這三種消息回復(fù)的格式做一下簡(jiǎn)單講解,然后封裝成函數(shù),以供讀者使用。
二、思路分析
對(duì)于每一個(gè)POST請(qǐng)求,開發(fā)者在響應(yīng)包中返回特定xml結(jié)構(gòu),對(duì)該消息進(jìn)行響應(yīng)(現(xiàn)支持回復(fù)文本、圖文、語音、視頻、音樂)。
三、文本回復(fù)
3.1 文本回復(fù)xml 結(jié)構(gòu)
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[content]]></Content> </xml>
3.2 結(jié)構(gòu)說明
3.3 具體實(shí)施
針對(duì)上面給出的xml 結(jié)構(gòu),我們只需要在對(duì)應(yīng)的位置填上內(nèi)容,然后格式化輸出就可以了。
說明:
ToUserName 位置上填寫的是$fromUsername = $postObj->FromUserName,就是把消息返回給發(fā)送信息過來的用戶,即接收方賬號(hào)。
FromUserName 位置上填寫的是$toUsername = $postObj->ToUserName,既是開發(fā)者微信號(hào)。
這是官方的文本回復(fù),只需實(shí)例化它的responseMsg() 方法就可以回復(fù) “Welcome to wechat world!” 消息了。
這里我們稍做修改,返回fromUsername 和toUsername 消息,便于讀者理解以上的說明。
3.4 測(cè)試結(jié)果
3.5 封裝成可調(diào)用的函數(shù)
我們可以將上面的內(nèi)容封裝成函數(shù),在需要回復(fù)文本的地方直接調(diào)用,方便簡(jiǎn)潔,responseText.func.inc.php 代碼如下。
function _response_text($object,$content){ $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr; }
這樣,只要傳入$object 和$content,然后在需要回復(fù)文本的文件中引入該文件,然后調(diào)用 _response_text() 方法,就可以直接回復(fù)文本了。
3.6 測(cè)試代碼
3.6.1 在主文件中引入回復(fù)文本的函數(shù)文件
require_once 'responseText.func.inc.php';
3.6.2 普通消息回復(fù)
public function handleText($postObj) { $keyword = trim($postObj->Content); if(!empty( $keyword )) { $contentStr = "微信公眾平臺(tái)-文本回復(fù)功能源代碼"; //$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); $resultStr = _response_text($postObj,$contentStr); echo $resultStr; }else{ echo "Input something..."; } }
3.6.3 關(guān)注時(shí)回復(fù)
public function handleEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "感謝您關(guān)注【卓錦蘇州】"."\n"."微信號(hào):zhuojinsz"; break; default : $contentStr = "Unknow Event: ".$object->Event; break; } $resultStr = _response_text($object, $contentStr); return $resultStr; }
3.7 測(cè)試結(jié)果
回復(fù)文本成功。
四、圖文回復(fù)
4.1 圖文回復(fù)xml 結(jié)構(gòu)
<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>
4.2 結(jié)構(gòu)說明
類似文本回復(fù)的格式,只需要在相應(yīng)的位置填上對(duì)應(yīng)的內(nèi)容就可以回復(fù)圖文信息了。
4.3 具體實(shí)施
圖文回復(fù)可以是單圖文,也可以是多圖文,這里我們先以單圖文的案例來引導(dǎo)讀者,然后再引出多圖文。
我們將回復(fù)圖文的xml 結(jié)構(gòu)分解成為以下三個(gè)結(jié)構(gòu),圖文頭,圖文體,圖文尾,圖文體就是圖文回復(fù)時(shí)看到的標(biāo)題,描述,圖片URL和原文URL。
$newsTplHead = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles>"; $newsTplBody = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item>"; $newsTplFoot = "</Articles> <FuncFlag>0</FuncFlag> </xml>";
接下來,我們對(duì)三段結(jié)構(gòu)分別插入對(duì)應(yīng)內(nèi)容:
A. $newsTplHead
$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());
B. $newsTplBody
$title = $newsContent['title']; $desc = $newsContent['description']; $picUrl = $newsContent['picUrl']; $url = $newsContent['url']; $body = sprintf($newsTplBody, $title, $desc, $picUrl, $url);
說明:$newsContent 是從主文件傳入函數(shù)的圖文數(shù)組。
C. $newsTplFoot
$FuncFlag = 0; $footer = sprintf($newsTplFoot, $FuncFlag);
然后將三段進(jìn)行拼接返回就可以回復(fù)單條圖文了。
return $header.$body.$footer;
將以上內(nèi)容寫到一個(gè)函數(shù)里,命名為 _response_news() 函數(shù),以供下面調(diào)用測(cè)試。
4.4 測(cè)試代碼
4.4.1 在主文件中引入回復(fù)圖文的函數(shù)文件
require_once 'responseNews.func.inc.php';
4.4.2 創(chuàng)建數(shù)組并傳入
在主文件中,只需要向 _response_news() 函數(shù)中傳入一個(gè)數(shù)組和$postObj 即可。
$record=array( 'title' =>'山塘街', 'description' =>'山塘街東起閶門渡僧橋,西至蘇州名勝虎丘山的望山橋,長約七里,所以蘇州俗語說“七里山塘到虎丘”...', 'picUrl' => 'http://thinkshare.duapp.com/images/suzhou.jpg', 'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect' ); $resultStr = _response_news($postObj,$record); echo $resultStr;
4.5 測(cè)試結(jié)果
點(diǎn)擊進(jìn)入查看
單圖文回復(fù)測(cè)試成功。
4.6 多圖文回復(fù)
有了上面的引導(dǎo),讀者應(yīng)該能夠想到回復(fù)多圖文的思路了,就是將多維數(shù)組中的值循環(huán)放到相應(yīng)的位置,然后拼接起來就可以了,下面進(jìn)行講解。
4.6.1 獲取圖文條數(shù)
$bodyCount = count($newsContent);
4.6.2 判斷圖文條數(shù)
因?yàn)槲⑿畔拗屏嘶貜?fù)的圖文消息數(shù)為10條以內(nèi),所以需要判斷圖文條數(shù),如果小于10條,則圖文數(shù)等于原來的圖文數(shù),如果大于等于10條,則強(qiáng)制限制為10條。
$bodyCount = $bodyCount < 10 ? $bodyCount : 10;
4.6.3 組織圖文體
圖文頭和圖文尾和上面單圖文一樣,不再贅述,主要是圖文體的組織。
用foreach 循環(huán)出數(shù)組的內(nèi)容并賦予圖文體,并進(jìn)行拼接:
foreach($newsContent as $key => $value){ $body .= sprintf($newsTplBody, $value['title'], $value['description'], $value['picUrl'], $value['url']); }
說明:$newsContent 是從主文件傳入函數(shù)的圖文數(shù)組。
4.6.4 拼接并返回
return $header.$body.$footer;
將以上內(nèi)容寫到一個(gè)函數(shù)里,命名為 _response_multiNews() 函數(shù),以供下面調(diào)用測(cè)試。
4.7 測(cè)試多圖文
4.7.1 在主文件中引入回復(fù)多圖文的函數(shù)文件
require_once 'responseMultiNews.func.inc.php';
4.7.2 創(chuàng)建多維數(shù)組并傳入
$record[0]=array( 'title' =>'觀前街', 'description' =>'觀前街位于江蘇蘇州市區(qū),是成街于清朝時(shí)期的百年商業(yè)老街,街上老店名店云集,名聲遠(yuǎn)播海內(nèi)外...', 'picUrl' => 'http://joythink.duapp.com/images/suzhou.jpg', 'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect' ); ...... $record[11]=array( 'title' =>'平江路', 'description' =>'平江路位于蘇州古城東北,是一條傍河的小路,北接拙政園,南眺雙塔,全長1606米,是蘇州一條歷史攸久的經(jīng)典水巷。宋元時(shí)候蘇州又名平江,以此名路...', 'picUrl' => 'http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg', 'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect' ); $resultStr = _response_multiNews($postObj,$record); echo $resultStr;
4.8 測(cè)試多圖文結(jié)果
點(diǎn)擊進(jìn)入查看
測(cè)試多圖文成功。
五、音樂回復(fù)
微信還提供了一種消息回復(fù)的格式,即音樂回復(fù),下面我們編寫程序測(cè)試一下。
注意:由于音樂版權(quán)的問題,現(xiàn)在很少有回復(fù)音樂的API,開放的API 查詢出來的音樂信息也有很多是不正確的。所以在這里,我們上傳幾首音樂到自己的服務(wù)器空間測(cè)試。
本地文件:
測(cè)試是否能夠正常播放:
5.1 音樂回復(fù)xml 結(jié)構(gòu)
<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>
5.2 結(jié)構(gòu)說明
5.3 具體實(shí)施
我們先做一個(gè)固定的歌曲回復(fù)來引導(dǎo)讀者,然后再引出更高級(jí)別的歌曲查詢回復(fù)。
5.3.1 在xml 結(jié)構(gòu)的相應(yīng)位置插入相應(yīng)數(shù)據(jù)
<Music> <Title><![CDATA[Far Away From Home]]></Title> <Description><![CDATA[Groove Coverage]]></Description> <MusicUrl><![CDATA[http://thinkshare.duapp.com/music/10001.mp3]]></MusicUrl> <HQMusicUrl><![CDATA[http://thinkshare.duapp.com/music/10001.mp3]]></HQMusicUrl> </Music>
5.3.2 測(cè)試代碼
$resultStr = _response_music($postObj,$keyword);echo $resultStr;
5.3.3 測(cè)試結(jié)果
5.4 模擬點(diǎn)歌
有了上面的簡(jiǎn)單案例引導(dǎo),讀者應(yīng)該可以想到模擬點(diǎn)歌的具體實(shí)現(xiàn)了吧,下面就來簡(jiǎn)單介紹一下。
思路:將歌曲代碼和對(duì)應(yīng)的歌曲名存入數(shù)據(jù)庫,用戶輸入歌曲名,在數(shù)據(jù)庫中找到歌曲名對(duì)應(yīng)的歌曲編號(hào),然后就可以生成MusicUrl 回復(fù)用戶了。
5.4.1 創(chuàng)建數(shù)據(jù)庫
建表語句及數(shù)據(jù)文件:
CREATE TABLE IF NOT EXISTS `tbl_music` ( `music_id` int(11) NOT NULL, `music_name` varchar(40) NOT NULL, `music_singer` varchar(40) NOT NULL, `music_lrc` text NOT NULL, PRIMARY KEY (`music_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;INSERT INTO `tbl_music` (`music_id`, `music_name`, `music_singer`, `music_lrc`) VALUES(10001, 'Far Away From Home', 'Groove Coverage', 'far away from home'), (10002, 'The Dawn', 'Dreamtale', 'the dawn'), (20002, '董小姐', '宋冬野', '董小姐'), (20001, '左邊', '楊丞琳', '左邊');
5.4.2 _response_music() 函數(shù)編寫
A. 引入數(shù)據(jù)庫操作文件
require_once('MySQL_bae.func.php');
B. 數(shù)據(jù)庫操作及數(shù)據(jù)處理
$query = "SELECT * FROM tbl_music WHERE music_name LIKE '%$musicKeyword%'"; $result = _select_data($query); $rows = mysql_fetch_array($result, MYSQL_ASSOC); $music_id = $rows[music_id];
注:$musicKeyword 為從主文件傳入的歌曲名關(guān)鍵字,這里使用模糊查詢,只取第一條數(shù)據(jù)。
C. 判斷是否查詢到
if($music_id <> '') { $music_name = $rows[music_name]; $music_singer = $rows[music_singer]; $musicUrl = "http://thinkshare.duapp.com/music/".$music_id.".mp3"; $HQmusicUrl = "http://thinkshare.duapp.com/music/".$music_id.".mp3"; $resultStr = sprintf($musicTpl, $object->FromUserName, $object->ToUserName, time(), $music_name, $music_singer, $musicUrl, $HQmusicUrl); return $resultStr; }else{ return ""; }
說明:如果查詢到歌曲信息,按照xml 結(jié)構(gòu)返回?cái)?shù)據(jù);如果未查詢到,則返回空,用于主文件判斷。
將以上代碼封裝成 _response_music() 函數(shù)并保存為responseMusic.func.inc.php 文件供主文件調(diào)用。
5.4.3 測(cè)試代碼
A. 引入回復(fù)音樂和回復(fù)文本的函數(shù)文件
//引入回復(fù)音樂的函數(shù)文件require_once 'responseMusic.func.inc.php';//引入回復(fù)文本的函數(shù)文件require_once 'responseText.func.inc.php';
B. 調(diào)用
if(!empty( $keyword )) { $resultStr = _response_music($postObj,$keyword); if($resultStr <> '') { echo $resultStr; }else { echo _response_text($postObj,"未查詢到【".$keyword."】的歌曲信息!"); } }
說明:如果查詢到歌曲信息,則返回所得信息,如果未查詢到,則調(diào)用 _response_text() 函數(shù)返回文本信息。
5.5 模擬點(diǎn)歌測(cè)試
回復(fù)音樂測(cè)試成功。
以上是“微信公眾平臺(tái)開發(fā)消息回復(fù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:微信公眾平臺(tái)開發(fā)消息回復(fù)的示例分析
轉(zhuǎn)載來于:http://www.rwnh.cn/article2/ghdgic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、服務(wù)器托管、App設(shè)計(jì)、網(wǎng)站建設(shè)、微信小程序、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)