微信公众平台开发(97) 图文消息
在這篇微信公眾平臺開發(fā)教程中,我們將介紹如何靈活的使用圖文消息功能。我們將只介紹被動回復(fù)消息中的圖文消息,發(fā)送客服消息及高級群發(fā)消息接口的發(fā)送的圖文消息與本文介紹的圖文消息的各情況基本一致。
本文分為以下四個部分:
?
一、圖文消息的定義
在微信公眾平臺消息中,發(fā)送被動響應(yīng)消息中的圖文消息的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>其參數(shù)說明如下.
| ToUserName | 是 | 接收方帳號(收到的OpenID) |
| FromUserName | 是 | 開發(fā)者微信號 |
| CreateTime | 是 | 消息創(chuàng)建時間 (整型) |
| MsgType | 是 | news |
| ArticleCount | 是 | 圖文消息個數(shù),限制為10條以內(nèi) |
| Articles | 是 | 多條圖文消息信息,默認(rèn)第一個item為大圖,注意,如果圖文數(shù)超過10,則將會無響應(yīng) |
| Title | 否 | 圖文消息標(biāo)題 |
| Description | 否 | 圖文消息描述 |
| PicUrl | 否 | 圖片鏈接,支持JPG、PNG格式,較好的效果為大圖360*200,小圖200*200 |
| Url | 否 | 點擊圖文消息跳轉(zhuǎn)鏈接 |
從中可以知道,圖文消息的類型為news,圖文消息個數(shù)最大為10(注意在編輯模式中,可以設(shè)置最大條數(shù)為8)。超過10條,微信將不再響應(yīng)。
?多圖文消息中會有大圖和小圖的區(qū)別,第一個item中的圖片為大圖,其他item中的圖片為小圖。
?
二、圖文消息的實現(xiàn)
根據(jù)上述定義,我們定義圖文消息的回復(fù)代碼實現(xiàn)如下:
//回復(fù)圖文消息private function transmitNews($object, $newsArray){if(!is_array($newsArray)){return;}$itemTpl = " <item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item> ";$item_str = "";foreach ($newsArray as $item){$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);}$xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> $item_str</Articles> </xml>";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));return $result;}上述代碼中,先將各item連接形成item_str,再將item_str賦值到xml模板中,組裝一個圖文消息。組裝時,將object中的發(fā)送、接收方互換位置,計算出圖文項的個數(shù)。
而在構(gòu)造圖文消息并使用圖文回復(fù)的代碼如下所示
if (strstr($keyword, "單圖文")){$content = array();$content[] = array("Title"=>"單圖文標(biāo)題", "Description"=>"單圖文內(nèi)容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); }else if (strstr($keyword, "圖文") || strstr($keyword, "多圖文")){$content = array();$content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文2標(biāo)題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文3標(biāo)題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); }if(is_array($content)){if (isset($content[0]['PicUrl'])){$result = $this->transmitNews($object, $content);}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);} }else{$result = $this->transmitText($object, $content); }一個完整的體驗代碼可參考?微信公眾平臺開發(fā)接口PHP SDK完整版
?
三、圖文消息的類型
圖文消息從item的個數(shù)上來分,可以分為單圖文消息和多圖文消息,其中單圖文消息中item數(shù)為1,多圖文消息中item數(shù)從2~10都包括。
雖然圖文消息只有兩種類型,但其實可以通過設(shè)置不同的參數(shù)構(gòu)造出更多的展示效果。
單圖文消息
單圖文消息就是一個圖文消息。
下面代碼定義一個基本的圖文消息
$content = array(); $content[] = array("Title" =>"大學(xué)英語四六級成績查詢", "Description" =>"點擊圖片進(jìn)入", "PicUrl" =>"http://365jia.cn/uploads/13/0301/5130c2ff93618.jpg", "Url" =>"http://israel.sinaapp.com/cet/index.php?openid=".$object->FromUserName);它的回復(fù)效果如圖所示。其特點是標(biāo)題粗體顯示,內(nèi)容字體則為灰色顯示,如果有圖片,則同時顯示日期。
再看一下不定義圖片和鏈接時的情況,代碼如下
$aqiArray = array(); $aqiArray[] = array("Title" =>$cityAir[0]['area']."空氣質(zhì)量", "Description" =>"空氣質(zhì)量指數(shù)(AQI):".$cityAir[0]['aqi']."\n"."空氣質(zhì)量等級:".$cityAir[0]['quality']."\n"."細(xì)顆粒物(PM2.5):".$cityAir[0]['pm2_5']."\n"."可吸入顆粒物(PM10):".$cityAir[0]['pm10']."\n"."一氧化碳(CO):".$cityAir[0]['co']."\n"."二氧化氮(NO2):".$cityAir[0]['no2']."\n"."二氧化硫(SO2):".$cityAir[0]['so2']."\n"."臭氧(O3):".$cityAir[0]['o3']."\n"."更新時間:".preg_replace("/([a-zA-Z])/i", " ", $cityAir[0]['time_point']); "PicUrl" =>"", "Url" =>"");其效果如下所示。
可以看到,這時,由于沒有圖片,所以也不顯示日期了,另外沒有帶鏈接,所以“查看全文”也不顯示了。
?
多圖文
多圖文消息一個最大的特點就是:描述內(nèi)容不會在返回中顯示,所以沒有必要定義描述了。
下面是一個基本的多圖文消息的定義
$content = array(); $content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多圖文2標(biāo)題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"); $content[] = array("Title"=>"多圖文3標(biāo)題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");其實現(xiàn)效果如下
如果覺得首圖太大,占地方,也可以不填寫。
比如這樣的代碼
$content = array(); $content[] = array("Title" =>"微信公眾平臺開發(fā)教程", "Description" =>"", "PicUrl" =>"", "Url" =>""); $content[] = array("Title" =>"【基礎(chǔ)入門】免費\n1. 申請服務(wù)器資源\n2. 啟用開發(fā)模式\n3. 消息類型詳解\n4. 獲取接收消息\n5. 回復(fù)不同消息", "Description" =>"", "PicUrl" =>"http://e.hiphotos.bdimg.com/wisegame/pic/item/9e1f4134970a304e1e398c62d1c8a786c9175c0a.jpg", "Url" =>"http://m.cnblogs.com/99079/3153567.html?full=1"); $content[] = array("Title" =>"【初級教程】雙11六折促銷\n1.小黃雞機器人\n2.英語類公眾賬號開發(fā)", "Description" =>"", "PicUrl" =>"http://g.hiphotos.bdimg.com/wisegame/pic/item/3166d0160924ab186196512537fae6cd7b890b24.jpg", "Url" =>"http://israel.duapp.com/taobao/index.php?id=1");其效果如下所示
還可以所有的圖片都不填,都用于來顯示文字。
比如如下代碼
$content = array(); $content[] = array("Title" =>"歡迎關(guān)注方倍工作室","Description" =>"", "PicUrl" =>"", "Url" =>""); $content[] = array("Title" =>"【1】新聞 天氣 空氣 股票 彩票 星座\n"."【2】快遞 人品 算命 解夢 附近 蘋果\n"."【3】公交 火車 汽車 航班 路況 違章\n"."【4】翻譯 百科 雙語 聽力 成語 歷史\n"."【5】團(tuán)購 充值 菜譜 賀卡 景點 冬吳\n"."【6】情侶相 夫妻相 親子相 女人味\n"."【7】相冊 游戲 笑話 答題 點歌 樹洞\n"."【8】微社區(qū) 四六級 華強北 世界杯\n\n"."更多精彩,即將亮相,敬請期待!";, "Description" =>"", "PicUrl" =>"", "Url" =>""); $content[] = array("Title" =>"回復(fù)對應(yīng)數(shù)字查看使用方法\n發(fā)送 0 返回本菜單", "Description" =>"", "PicUrl" =>"", "Url" =>"");其效果如下所示
?
四、圖文消息的回復(fù)
因為圖文消息有更好的視覺效果,很多朋友都想要實現(xiàn)圖文消息的回復(fù)。主要有以下幾種情況
1. 關(guān)注時回復(fù)圖文消息
放到訂閱事件下就行了,代碼如下
//接收事件消息private function receiveEvent($object){$content = "";switch ($object->Event){case "subscribe":$content = array();$content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文2標(biāo)題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文3標(biāo)題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");break;case "unsubscribe":$content = "取消關(guān)注";break;}if(is_array($content)){if (isset($content[0])){$result = $this->transmitNews($object, $content);}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);}return $result;}2. 發(fā)送關(guān)鍵字回復(fù)圖文消息
通過判斷關(guān)鍵字既可實現(xiàn),
//接收文本消息 private function receiveText($object) {$keyword = trim($object->Content);if (strstr($keyword, "單圖文")){$content = array();$content[] = array("Title"=>"單圖文標(biāo)題", "Description"=>"單圖文內(nèi)容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");}else if (strstr($keyword, "圖文") || strstr($keyword, "多圖文")){$content = array();$content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文2標(biāo)題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");$content[] = array("Title"=>"多圖文3標(biāo)題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");}else{$content = date("Y-m-d H:i:s",time())."\n技術(shù)支持 方倍工作室";}if(is_array($content)){if (isset($content[0]['PicUrl'])){$result = $this->transmitNews($object, $content);}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);} }3. 點擊菜單時回復(fù)圖文消息
在菜單點擊事件中響應(yīng)即可
//接收事件消息 private function receiveEvent($object) {$content = "";switch ($object->Event){case "subscribe":$content = "歡迎關(guān)注方倍工作室 ";break;case "CLICK":switch ($object->EventKey){case "COMPANY":$content = array();$content[] = array("Title"=>"多圖文1標(biāo)題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");break;default:$content = "點擊菜單:".$object->EventKey;break;}break;}if(is_array($content)){if (isset($content[0])){$result = $this->transmitNews($object, $content);}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);}return $result; }4. 回復(fù)多個圖文消息
由于回復(fù)消息一次只能回復(fù)一條,因此要回復(fù)多個圖文消息,就需要使用其他接口。這需要已經(jīng)認(rèn)證的服務(wù)號才能擁有權(quán)限。
可以回復(fù)圖文消息的接口有客服接口及高級群發(fā)接口,如果被動回復(fù)不夠,就可使用客服接口來發(fā)送。
轉(zhuǎn)載于:https://www.cnblogs.com/yzycoder/p/5277870.html
總結(jié)
以上是生活随笔為你收集整理的微信公众平台开发(97) 图文消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wchar_t * 与 char * 互
- 下一篇: 如何应对云爆发架构?四种方法替你解忧