微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。
二、思路分析
对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本、图文、语音、视频、音乐)。
三、文本回复
3.1 文本回复xml 结构
12345678
3.2 结构说明
3.5 封装成可调用的函数
我们可以将上面的内容封装成函数,在需要回复文本的地方直接调用,方便简洁,responseText.func.inc.php 代码如下。
function _response_text($object,$content){ $textTpl = ""; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr;} %s %d
这样,只要传入$object 和$content,然后在需要回复文本的文件中引入该文件,然后调用 _response_text() 方法,就可以直接回复文本了。
3.6 测试代码
3.6.1 在主文件中引入回复文本的函数文件
require_once 'responseText.func.inc.php';
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 结构
12345678 ]]>
5.3.2 测试代码
$resultStr = _response_music($postObj,$keyword);echo $resultStr;
5.3.3 测试结果
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, 'Far Away From Home', 'Groove Coverage', 'far away from home'),(10002, 'The Dawn', 'Dreamtale', 'the dawn'),(20002, '董小姐', '宋冬野', '董小姐'),(20001, '左边', '杨丞琳', '左边');
5.4.2 _response_music() 函数编写
A. 引入数据库操作文件
require_once('mysql_bae.func.php');
B. 数据库操作及数据处理
$query = "SELECT * FROM tbl_music WHERE music_name LIKE '%$musicKeyword%'";$result = _select_data($query);$rows = mysql_fetch_array($result, MYSQL_ASSOC);$music_id = $rows[music_id];
注: $musicKeyword 为从主文件传入的歌曲名关键字,这里使用模糊查询,只取第一条数据。
C. 判断是否查询到
if($music_id <> ''){ $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 'responseText.func.inc.php';
B. 调用
if(!empty( $keyword )){ $resultStr = _response_music($postObj,$keyword); if($resultStr <> '') { echo $resultStr; }else { echo _response_text($postObj,"未查询到【".$keyword."】的歌曲信息!"); } }
说明:如果查询到歌曲信息,则返回所得信息,如果未查询到,则调用 _response_text() 函数返回文本信息。
5.5 模拟点歌测试
回复音乐测试成功。
更多微信公众平台开发消息回复总结介绍相关文章请关注PHP中文网!