如果想回復(fù)給用戶一個`圖片消息`,而不是圖文消息的話我們就需要使用`MediaId`字段了.
我們在上傳素材到服務(wù)器 - 傻瓜式微信開發(fā)教程14 - 耗子原創(chuàng)介紹了上傳自己的圖片到微信服務(wù)器獲取`MediaId`的方法. 這里我們就不重復(fù)介紹了.
我們這是只是實現(xiàn)當用戶發(fā)送給我們圖片消息的時候返回給用戶相同消息的功能.
當用戶發(fā)送給我我們`圖片消息`時,我們從SAE的日志中可以看到附帶的參數(shù)大概是以下的樣子:
- 101.226.62.77 [21-Aug-2015:09:07:30 +0800] [debug]tousername => gh_5d4275a0d53e, fromusername => okhDqsjop60PKFR86uzwY02AAHxA, createtime => 1440119249, msgtype => image, picurl => http://mmbiz./mmbiz/lV0d907m3OVHTzE6XK0TibCD8afzz5R7zYz45IvnM1gQ0Sr6xDy8tAWe6JicIUIaFKyknCtvwuApj7gWg8xEibHrQ/0, msgid => 6185265077004084317, mediaid => zCOwRBD2Lbf_Sj3SI1LxTY_VwV7_nXE275l43b8Wwf5bIfZ4eNjmhungGLLxu_mS, yq22
復(fù)制代碼
關(guān)于如何使用SAE打印接收到的信息內(nèi)容可以參見帖子查看SAE的DEBUG信息 - 傻瓜式微信開發(fā)教程16 - 耗子原創(chuàng).
我們可以看到,在收到的信息中實際上已經(jīng)存在一個用戶發(fā)送過來的圖片的`MediaId`參數(shù)了,這里我們直接使用就OK了.
然而不幸的是,現(xiàn)在的`Wechat-php`框架沒有為我們提供發(fā)送圖片消息的功能, 所以我們要自己實現(xiàn).
首先我們需要在`Wechat.php`中定義一個新的消息類型,參照`TextResponse`就可以了:
- /**
- * 用于回復(fù)的圖片消息類型
- */
- class ImageResponse extends WechatResponse {
- protected $mediaId;
- public function __construct($toUserName, $fromUserName, $mediaId, $funcFlag = 0) {
- parent::__construct($toUserName, $fromUserName, $funcFlag);
- $this->mediaId = $mediaId;
- $this->template = <<<XML
- <xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[image]]></MsgType>
- <Image>
- <MediaId><![CDATA[%s]]></MediaId>
- </Image>
- <FuncFlag>%s</FuncFlag>
- </xml>
- XML;
- }
復(fù)制代碼
然后我們參照`responseText`函數(shù)寫一個`responseImage`函數(shù)
- protected function responseImage($mediaId, $funcFlag = 0){
- $this->sendout(new ImageResponse($this->getRequest('fromusername'), $this->getRequest('tousername'), $mediaId, $funcFlag));
- }
復(fù)制代碼
現(xiàn)在我們就為`Wechat-php`框架提供了發(fā)送圖片的功能,接下來我們就可以直接調(diào)用responseImage來發(fā)送圖片了.
我們重寫`index.php`中接收到圖片的處理函數(shù)`onImage`
- protected function onImage() {
- // 只是簡單地創(chuàng)建了和接收到的圖片相同的回復(fù)信息
- $this->responseImage($this->getRequest('MediaId'));
- }
復(fù)制代碼
上傳代碼到我們的服務(wù)器后,向公眾號發(fā)送圖片消息, 我們就可以看到相同的圖片回復(fù)了.
整個工程代碼在附件中,因為用到的SAE的特殊函數(shù),所以在其他平臺運行是會報錯的. 另外記得修改token等參數(shù)為自己的參數(shù)哈.
|