首頁 微信小程式 微信開發 微信公眾平台開發訊息回覆摘要介紹

微信公眾平台開發訊息回覆摘要介紹

Mar 06, 2017 am 09:38 AM
微信開發

一、簡介

微信公眾平台提供了三種訊息回覆的格式,即文字回覆、音樂回覆和圖文回复,在這篇文章中,我們將對這三種訊息回复的格式做簡單講解,然後封裝成函數,以供讀者使用。

二、思路分析

#對於每一個POST請求,開發者在回應包中傳回特定xml結構,對此訊息進行回應(現支援回覆文字、圖文、語音、視訊、音樂)。

三、文字回覆

#3.1 文字回覆xml 結構

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>12345678</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[content]]></Content>
 </xml>
登入後複製

3.2 結構說明

微信公眾平台開發訊息回覆摘要介紹

3.3 具體實作

針對上面給出的xml 結構,我們只需要在對應的位置填入內容,然後格式化輸出就可以了。

微信公眾平台開發訊息回覆摘要介紹

說明:

ToUserName 位置上填入的是$fromUsername = $postObj->FromUserName,就是把訊息回傳給發送訊息過來的用戶,即接收方帳號。

FromUserName 位置上填入的是$toUsername = $postObj->ToUserName,既是開發者微訊號。

這是官方的文本回复,只需實例化它的responseMsg() 方法就可以回复 “Welcome to wechat world!” 訊息了。

這裡我們稍做修改,回傳fromUsername 和toUsername 訊息,方便讀者理解以上的說明。

微信公眾平台開發訊息回覆摘要介紹

3.4 測試結果

微信公眾平台開發訊息回覆摘要介紹

#3.5 封裝成可呼叫的函數

我們可以將上面的內容封裝成函數,在需要回覆文字的地方直接調用,方便簡潔,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,然後在需要回覆文字的文件中引入該文件,然後呼叫 _response_text() 方法,就可以直接回覆文字了。

3.6 測試程式碼

3.6.1 在主檔案中引入回覆文字的函數檔案

require_once &#39;responseText.func.inc.php&#39;;
登入後複製

3.6.2 普通訊息回覆

public function handleText($postObj)
    {
        $keyword = trim($postObj->Content);

        if(!empty( $keyword ))
        {
            $contentStr = "微信公众平台-文本回复功能源代码";
            //$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            $resultStr = _response_text($postObj,$contentStr);
            echo $resultStr;
        }else{
            echo "Input something...";
        }
}
登入後複製

3.6.3 關注時回覆

public function handleEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                break;
        }
        $resultStr = _response_text($object, $contentStr);
        return $resultStr;
}
登入後複製

3.7 測試結果

微信公眾平台開發訊息回覆摘要介紹

回覆文字成功。

四、圖文回覆

4.1 圖文回覆xml 結構

 <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 結構說明

微信公眾平台開發訊息回覆摘要介紹

#類似文字回覆的格式,只需要在對應的位置填上對應的內容就可以回覆圖文資訊了。

4.3 具體實施

圖文回覆可以是單圖文,也可以是多圖文,這裡我們先以單圖文的案例來引導讀者,然後再引出多圖文。

我們將回覆圖文的xml 結構分解成為以下三個結構,圖文頭,圖文體,圖文尾,圖文體就是圖文回覆時看到的標題,描述,圖片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>";
登入後複製

接下來,我們將三段結構分別插入對應內容:

A. $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());
登入後複製

B. $newsTplBody

#
$title = $newsContent[&#39;title&#39;];
$desc = $newsContent[&#39;description&#39;];
$picUrl = $newsContent[&#39;picUrl&#39;];
$url = $newsContent[&#39;url&#39;];
$body = sprintf($newsTplBody, $title, $desc, $picUrl, $url);
登入後複製

說明:$newsContent 是從主檔案傳入函數的圖文陣列。

C. $newsTplFoot

$FuncFlag = 0;
$footer = sprintf($newsTplFoot, $FuncFlag);
登入後複製

然後三段進行拼接回傳就可以回覆單一圖文了。

return $header.$body.$footer;
登入後複製

將上述內容寫到一個函數裡,命名為 _response_news() 函數,以便下面呼叫測試。

4.4 測試程式碼

4.4.1 在主檔案中引入回覆圖文的函數檔案

require_once &#39;responseNews.func.inc.php&#39;;
登入後複製

4.4.2 建立陣列並傳入

在主檔案中,只需要向_response_news() 函式中傳入一個陣列和$postObj 即可。

$record=array(
&#39;title&#39; =>&#39;山塘街&#39;,
&#39;description&#39; =>&#39;山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说“七里山塘到虎丘”...&#39;,
&#39;picUrl&#39; => &#39;http://thinkshare.duapp.com/images/suzhou.jpg&#39;,
&#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect&#39;
);

$resultStr = _response_news($postObj,$record);
echo $resultStr;
登入後複製
4.5 测试结果
登入後複製

微信公眾平台開發訊息回覆摘要介紹

点击进入查看

微信公眾平台開發訊息回覆摘要介紹

单图文回复测试成功。

4.6 多图文回复

有了上面的引导,读者应该能够想到回复多图文的思路了,就是将多维数组中的值循环放到相应的位置,然后拼接起来就可以了,下面进行讲解。

4.6.1 获取图文条数


$bodyCount = count($newsContent);
登入後複製


4.6.2 判断图文条数

因为微信限制了回复的图文消息数为10条以内,所以需要判断图文条数,如果小于10条,则图文数等于原来的图文数,如果大于等于10条,则强制限制为10条。


$bodyCount = $bodyCount < 10 ? $bodyCount : 10;
登入後複製


4.6.3 组织图文体

图文头和图文尾和上面单图文一样,不再赘述,主要是图文体的组织。

用foreach 循环出数组的内容并赋予图文体,并进行拼接:


foreach($newsContent as $key => $value){
    $body .= sprintf($newsTplBody, $value[&#39;title&#39;], $value[&#39;description&#39;], $value[&#39;picUrl&#39;], $value[&#39;url&#39;]);
}
登入後複製


说明:$newsContent 是从主文件传入函数的图文数组。

4.6.4 拼接并返回


return $header.$body.$footer;
登入後複製


将以上内容写到一个函数里,命名为 _response_multiNews() 函数,以供下面调用测试。

4.7 测试多图文

4.7.1 在主文件中引入回复多图文的函数文件


require_once &#39;responseMultiNews.func.inc.php&#39;;
登入後複製


4.7.2 创建多维数组并传入

$record[0]=array(
    &#39;title&#39; =>&#39;观前街&#39;,
    &#39;description&#39; =>&#39;观前街位于江苏苏州市区,是成街于清朝时期的百年商业老街,街上老店名店云集,名声远播海内外...&#39;,
    &#39;picUrl&#39; => &#39;http://joythink.duapp.com/images/suzhou.jpg&#39;,
    &#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect&#39;
);
......
$record[11]=array(
    &#39;title&#39; =>&#39;平江路&#39;,
    &#39;description&#39; =>&#39;平江路位于苏州古城东北,是一条傍河的小路,北接拙政园,南眺双塔,全长1606米,是苏州一条历史攸久的经典水巷。宋元时候苏州又名平江,以此名路...&#39;,
    &#39;picUrl&#39; => &#39;http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg&#39;,
    &#39;url&#39; =>&#39;http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect&#39;
);
$resultStr = _response_multiNews($postObj,$record);
echo $resultStr;
登入後複製

4.8 测试多图文结果

微信公眾平台開發訊息回覆摘要介紹

点击进入查看

微信公眾平台開發訊息回覆摘要介紹

测试多图文成功。

五、音乐回复

微信还提供了一种消息回复的格式,即音乐回复,下面我们编写程序测试一下。

注意:由于音乐版权的问题,现在很少有回复音乐的API,开放的API 查询出来的音乐信息也有很多是不正确的。所以在这里,我们上传几首音乐到自己的服务器空间测试。

本地文件:

微信公眾平台開發訊息回覆摘要介紹

测试是否能够正常播放:

微信公眾平台開發訊息回覆摘要介紹

5.1 音乐回复xml 结构


 <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 结构说明

微信公眾平台開發訊息回覆摘要介紹

5.3 具体实施

我们先做一个固定的歌曲回复来引导读者,然后再引出更高级别的歌曲查询回复。

5.3.1 在xml 结构的相应位置插入相应数据


<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 测试代码


$resultStr = _response_music($postObj,$keyword);echo $resultStr;
登入後複製


5.3.3 测试结果

微信公眾平台開發訊息回覆摘要介紹

5.4 模拟点歌

有了上面的简单案例引导,读者应该可以想到模拟点歌的具体实现了吧,下面就来简单介绍一下。

思路:将歌曲代码和对应的歌曲名存入数据库,用户输入歌曲名,在数据库中找到歌曲名对应的歌曲编号,然后就可以生成MusicUrl 回复用户了。

5.4.1 创建数据库

微信公眾平台開發訊息回覆摘要介紹

建表语句及数据文件:


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, &#39;Far Away From Home&#39;, &#39;Groove Coverage&#39;, &#39;far away from home&#39;),
(10002, &#39;The Dawn&#39;, &#39;Dreamtale&#39;, &#39;the dawn&#39;),
(20002, &#39;董小姐&#39;, &#39;宋冬野&#39;, &#39;董小姐&#39;),
(20001, &#39;左边&#39;, &#39;杨丞琳&#39;, &#39;左边&#39;);
登入後複製


5.4.2 _response_music() 函数编写

A. 引入数据库操作文件


require_once(&#39;mysql_bae.func.php&#39;);
登入後複製


B. 数据库操作及数据处理

$query = "SELECT * FROM tbl_music WHERE music_name LIKE &#39;%$musicKeyword%&#39;";
$result = _select_data($query);
$rows = mysql_fetch_array($result, MYSQL_ASSOC);
$music_id = $rows[music_id];
登入後複製

注: $musicKeyword 为从主文件传入的歌曲名关键字,这里使用模糊查询,只取第一条数据。

C. 判断是否查询到


if($music_id <> &#39;&#39;)
{
    $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 结构返回数据;如果未查询到,则返回空,用于主文件判断。

将以上代码封装成 _response_music() 函数并保存为responseMusic.func.inc.php 文件供主文件调用。

5.4.3 测试代码

A. 引入回复音乐和回复文本的函数文件


//引入回复音乐的函数文件require_once 'responseMusic.func.inc.php';//引入回复文本的函数文件require_once &#39;responseText.func.inc.php&#39;;
登入後複製


B. 调用


if(!empty( $keyword ))
{
    $resultStr = _response_music($postObj,$keyword);
    if($resultStr <> &#39;&#39;)
    {
        echo $resultStr;
    }else
    {
        echo _response_text($postObj,"未查询到【".$keyword."】的歌曲信息!");    
    }
    
}
登入後複製


说明:如果查询到歌曲信息,则返回所得信息,如果未查询到,则调用 _response_text() 函数返回文本信息。

5.5 模拟点歌测试

微信公眾平台開發訊息回覆摘要介紹

回复音乐测试成功。 

更多微信公眾平台開發訊息回覆摘要介紹相关文章请关注PHP中文网!

 



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP微信開發:如何實作訊息加密解密 PHP微信開發:如何實作訊息加密解密 May 13, 2023 am 11:40 AM

PHP微信開發:如何實作訊息加密解密

PHP微信開發:如何實現客服聊天視窗管理 PHP微信開發:如何實現客服聊天視窗管理 May 13, 2023 pm 05:51 PM

PHP微信開發:如何實現客服聊天視窗管理

PHP微信開發:如何實現使用者標籤管理 PHP微信開發:如何實現使用者標籤管理 May 13, 2023 pm 04:31 PM

PHP微信開發:如何實現使用者標籤管理

用PHP開發微信群發工具 用PHP開發微信群發工具 May 13, 2023 pm 05:00 PM

用PHP開發微信群發工具

如何使用PHP進行微信開發? 如何使用PHP進行微信開發? May 21, 2023 am 08:37 AM

如何使用PHP進行微信開發?

ThinkPHP6微信開髮指南:快速建構微信公眾號應用 ThinkPHP6微信開髮指南:快速建構微信公眾號應用 Aug 26, 2023 pm 11:55 PM

ThinkPHP6微信開髮指南:快速建構微信公眾號應用

PHP微信開發:如何實作群發訊息傳送記錄 PHP微信開發:如何實作群發訊息傳送記錄 May 13, 2023 pm 04:31 PM

PHP微信開發:如何實作群發訊息傳送記錄

PHP微信開發:如何實現語音識別 PHP微信開發:如何實現語音識別 May 13, 2023 pm 09:31 PM

PHP微信開發:如何實現語音識別

See all articles