1. 程式人生 > >微信公眾號最佳實踐 ( 3.2) 被動回覆使用者訊息

微信公眾號最佳實踐 ( 3.2) 被動回覆使用者訊息

<?php // // 響應使用者訊息 // 微信公眾賬號響應給使用者的不同訊息型別 // define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->responseMsg(); }else{ $wechatObj->valid(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET
["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr
= array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } } public function responseMsg() { $postStr
= $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); //使用者傳送的訊息型別判斷 switch ($RX_TYPE) { case "text": //回覆文字訊息 $result = $this->receiveText($postObj); break; case "image": //回覆單圖文、多圖文訊息 $result = $this->receiveImage($postObj); break; case "voice": //回覆音樂訊息 $result = $this->receiveVoice($postObj); break; case "video": $result = $this->receiveVideo($postObj); break; default: $result = "unknow msg type: ".$RX_TYPE; break; } echo $result; }else { echo ""; exit; } } private function receiveText($object) { $keyword = trim($object->Content); if($keyword == "文字"){ //回覆文字訊息 $content = "這是個文字訊息"; $result = $this->transmitText($object, $content); } else if($keyword == "圖文" || $keyword == "單圖文"){ //回覆單圖文訊息 $content = array(); $content[] = array("Title"=>"單圖文標題", "Description"=>"單圖文內容", "PicUrl"=>"http://dq095.applinzi.com/1.jpg", "Url" =>"http://dq095.applinzi.com/1.jpg"); $result = $this->transmitNews($object, $content); } else if($keyword == "多圖文"){ //回覆多圖文訊息 $content = array(); $content[] = array("Title"=>"多圖文1標題", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/3.png", "Url" =>"http://dq095.applinzi.com/3.png"); $content[] = array("Title"=>"多圖文2標題", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/4.png", "Url" =>"http://dq095.applinzi.com/4.png"); $content[] = array("Title"=>"多圖文3標題", "Description"=>"", "PicUrl"=>"http://dq095.applinzi.com/6.png", "Url" =>"http://dq095.applinzi.com/6.png"); $result = $this->transmitNews($object, $content); } else if($keyword == "音樂"){ //回覆音樂訊息 $content = array("Title"=>"歡樂頌", "Description"=>"貝多芬", "MusicUrl"=>"http://dq095.applinzi.com/歡樂頌.mp3", "HQMusicUrl"=>"http://dq095.applinzi.com/歡樂頌.mp3"); $result = $this->transmitMusic($object, $content); } return $result; } private function receiveImage($object) //回覆圖片訊息 { $content = array("MediaId"=>$object->MediaId); $result = $this->transmitImage($object, $content);; return $result; } private function receiveVoice($object) //回覆語音訊息 { $content = array("MediaId"=>$object->MediaId); $result = $this->transmitVoice($object, $content);; return $result; } private function receiveVideo($object) //回覆視訊訊息 { $content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>""); $result = $this->transmitVideo($object, $content);; return $result; } /* * 回覆文字訊息 */ private function transmitText($object, $content) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } /* * 回覆圖片訊息 */ private function transmitImage($object, $imageArray) { $itemTpl = "<Image> <MediaId><![CDATA[%s]]></MediaId> </Image>"; $item_str = sprintf($itemTpl, $imageArray['MediaId']); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[image]]></MsgType> $item_str </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回覆語音訊息 */ private function transmitVoice($object, $voiceArray) { $itemTpl = "<Voice> <MediaId><![CDATA[%s]]></MediaId> </Voice>"; $item_str = sprintf($itemTpl, $voiceArray['MediaId']); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[voice]]></MsgType> $item_str </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回覆視訊訊息 */ private function transmitVideo($object, $videoArray) { $itemTpl = "<Video> <MediaId><![CDATA[%s]]></MediaId> <ThumbMediaId><![CDATA[%s]]></ThumbMediaId> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> </Video>"; $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[video]]></MsgType> $item_str </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } /* * 回覆圖文訊息 */ private function transmitNews($object, $arr_item) { if(!is_array($arr_item)) return; $itemTpl = " <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> "; $item_str = ""; foreach ($arr_item as $item) $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); $newsTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[]]></Content> <ArticleCount>%s</ArticleCount> <Articles> $item_str</Articles> </xml>"; $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item)); return $result; } /* * 回覆音樂訊息 */ private function transmitMusic($object, $musicArray) { $itemTpl = "<Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> </Music>"; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[music]]></MsgType> $item_str </xml>"; $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time()); return $result; } } ?>