程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 微信開發-回復消息,微信回復消息

微信開發-回復消息,微信回復消息

編輯:關於PHP編程

微信開發-回復消息,微信回復消息


前面寫到我們怎樣獲取微信發送過來的xml數據包,獲得用戶發送的消息以及各種操作行為。那麼我們應該怎樣回復用戶呢?

回復主要分為六種

①回復文本消息

XML結構是這樣的,回復文字的時候如果保存的文本消息中有實體標簽記得要用htmlspecialchars_decode轉化一下。

public function makeText($text='') 
    { 
        $CreateTime = time(); 
        $textTpl = "<xml> 
        <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName> 
        <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName> 
        <CreateTime>{$CreateTime}</CreateTime> 
        <MsgType><![CDATA[text]]></MsgType> 
        <Content><![CDATA[%s]]></Content> 
        </xml>"; 
        return sprintf($textTpl,$text); 
    }

 

②回復圖片信息

這是回復圖片的XML結構,回復圖片的media_id需要通過接口上傳素材才能獲得。

public function makePic($MediaId='') 
    { 
        $CreateTime = time(); 
        $textTpl = "<xml> 
        <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName> 
        <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName> 
        <CreateTime>{$CreateTime}</CreateTime> 
        <MsgType><![CDATA[image]]></MsgType>
        <Image>
        <MediaId><![CDATA[%s]]></MediaId>
        </Image>
        </xml>"; 
        return sprintf($textTpl,$MediaId); 
    }

 

③回復語音

回復語音的XML結構基本與圖片類似,media_id也是通過接口上傳素材獲得的。

public function makeVoice($MediaId=""){
        $CreateTime= time();
        $textTpl = "
        <xml>
        <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
        <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
        <CreateTime>{$CreateTime}</CreateTime>
        <MsgType><![CDATA[voice]]></MsgType>
        <Voice>
        <MediaId><![CDATA[%s]]></MediaId>
        </Voice>
        </xml>
        ";
        return sprintf($textTpl,$MediaId);
    }

 

④回復視頻消息

回復視頻的XML結構,其中標題和描述並非是必須的,可以選擇不寫。

public function makeVideo($mediaId="",$title="",$desc=""){
        $createtime=time();
        $textTpl="
            <xml>
            <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
            <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
            <CreateTime>{$createtime}</CreateTime>
            <MsgType><![CDATA[video]]></MsgType>
            <Video>
            <MediaId><![CDATA[%s]]></MediaId>
            <Title><![CDATA[%s]]></Title>
            <Description><![CDATA[%s]]></Description>
            </Video> 
            </xml>
        ";
        return sprintf($textTpl,$mediaId,$title,$desc);
    }

如箭頭所示,如果加了標題和描述就會顯示在這裡。如果有實體標簽,也要轉義一下,否則就直接輸出實體標簽了。

⑤回復音樂消息

回復音樂的XML結構稍微有點多,但是很多不是必須的,如果填寫了帶實體標簽的字符串,一定要轉化一下。

public function makeMusic($mediaId="",$title="",$desc="",$url="",$hqurl=""){
        $createtime=time();
        $textTpl="
            <xml>
            <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
            <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
            <CreateTime>{$createtime}</CreateTime>
            <MsgType><![CDATA[music]]></MsgType>
            <Music>
            <Title><![CDATA[%s]]></Title>
            <Description><![CDATA[%s]]></Description>
            <MusicUrl><![CDATA[%s]]></MusicUrl>
            <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
            <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
            </Music>
            </xml>
        ";
        return sprintf($textTpl,$title,$desc,$url,$hqurl,$mediaId);
    }

回復音樂中其他的注釋都很清楚,但是這個縮略圖media_id描述的不是很清楚,作者使用了上傳縮略圖接口上傳了圖片,也寫在了裡面,但是貌似沒什麼用。如果有知道的童鞋們,還望告知下。

 

⑥回復圖文消息

回復圖文在回復中的XML是最復雜的,也最容易出錯。在Articles中的這段是最重要的,其中所有的字符串最好都轉化一下,以防萬一。

 

public function makeNews($newsData=array()) 
    { 
        $CreateTime = time(); 
        $newTplHeader = "<xml> 
        <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName> 
        <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName> 
        <CreateTime>{$CreateTime}</CreateTime> 
        <MsgType><![CDATA[news]]></MsgType> 
        <ArticleCount>%s</ArticleCount><Articles>"; 
        $newTplItem = "<item> 
        <Title><![CDATA[%s]]></Title> 
        <Description><![CDATA[%s]]></Description> 
        <PicUrl><![CDATA[%s]]></PicUrl> 
        <Url><![CDATA[%s]]></Url> 
        </item>"; 
        $newTplFoot = "</Articles>
        </xml>"; 
        $Content = ''; 
        $itemsCount = count($newsData['items']);
        $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公眾平台圖文回復的消息一次最多10條 
        if ($itemsCount) { 
            foreach ($newsData['items'] as $key => $item) { 
                if ($key<=9) { 
                    $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']); 
                } 
            } 
        } 
        $header = sprintf($newTplHeader,$itemsCount); 
        $footer = sprintf($newTplFoot); 

        return $header . $Content . $footer; 
    } 

這個方法適合於回復所有類型的圖文,只要傳入一個數組就會拼接成要回復的圖文模式,這個裡面的字符串也是需要對實體標簽解碼的

 

總之,無論微信返回什麼,代碼裡的一點點小錯誤就會導致“該公眾號暫時無法提供服務,請稍後再試”,而你根本不知道你做錯了什麼。所以寫這個的時候要嚴謹,盡量避免小錯誤,可以節省大量的時間。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved