http://www.cnblogs.com/mchina/p/3364377.html   转载地址

微信公众平台开发(十) 消息回复总结

一、简介

微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。

二、思路分析

对于每一个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 'responseText.func.inc.php';

3.6.2 普通消息回复

publicfunction 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 关注时回复

publicfunction 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['title'];

$desc = $newsContent['description'];

$picUrl = $newsContent['picUrl'];

$url = $newsContent['url'];

$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 'responseNews.func.inc.php';

4.4.2 创建数组并传入

在主文件中,只需要向 _response_news() 函数中传入一个数组和$postObj 即可。

$record=array(

'title' =>'山塘街',

'description' =>'山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说“七里山塘到虎丘”...',

'picUrl' => 'http://thinkshare.duapp.com/images/suzhou.jpg',

'url'=>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect'

);

$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['title'], $value['description'], $value['picUrl'], $value['url']);

}

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

4.6.4 拼接并返回

return$header.$body.$footer;

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

4.7 测试多图文

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

require_once 'responseMultiNews.func.inc.php';

4.7.2 创建多维数组并传入

$record[0]=array(

'title' =>'观前街',

'description' =>'观前街位于江苏苏州市区,是成街于清朝时期的百年商业老街,街上老店名店云集,名声远播海内外...',

'picUrl' => 'http://joythink.duapp.com/images/suzhou.jpg',

'url'=>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect'

);

......

$record[11]=array(

'title' =>'平江路',

'description' =>'平江路位于苏州古城东北,是一条傍河的小路,北接拙政园,南眺双塔,全长1606米,是苏州一条历史攸久的经典水巷。宋元时候苏州又名平江,以此名路...',

'picUrl' =>'http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg',

'url'=>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect'

);

$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 创建数据库

建表语句及数据文件:

CREATETABLE 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` textNOT NULL,

PRIMARY KEY (`music_id`)

) ENGINE=MyISAM DEFAULTCHARSET=utf8;

INSERTINTO `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 模拟点歌测试

回复音乐测试成功。

六、完整代码获取

请访问乐思乐享 官方论坛

URL:http://pan.baidu.com/s/1c0s3Jby

七、关注

请关注 卓锦苏州 微信公众帐号,卓锦苏州 基于BAE 平台开发,针对于主流的微信功能进行开发测试。

您可以关注 卓锦苏州 公众帐号进行功能测试,以及获取新的应用开发。

1. 登录微信客户端,通讯录 -> 添加朋友 -> 查找公众号 -> zhuojinsz,查找并关注。

2. 扫描二维码:

卓锦苏州 功能列表:

微信公众平台开发消息回复总结相关推荐

  1. 微信公众 mysql回复图片_微信公众平台开发消息回复总结介绍

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  2. 微信公众平台回复多条消息php,PHP微信公众平台开发 - 消息回复的封装_PHP教程...

    [PHP微信公众平台开发系列] 01.配置微信接口 02.公众平台示例代码分析 03.订阅事件(subscribe)处理 04.简单回复功能开发 05.天气预报功能开发 06.翻译功能开发 07.聊天 ...

  3. 微信公众平台开发-消息管理-发送模板消息

    一.模板说明 模板消息是在特定服务场景中向粉丝发送的消息,例如:信用卡刷卡通知,商品购买成功通知.不同的模板有不同的风格,某些字段可以由你来填充自己的内容(同时设定颜色),从而形成自己的消息.微信公众 ...

  4. Java微信公众平台开发(四)--回复消息的分类及实体的创建

    转自:http://www.cuiyongzhi.com/post/42.html 前面有说道对接收到微信服务器消息后对消息的分类,当时主要分为普通消息和事件消息,这里我们要讲述的是我们在给用户回复的 ...

  5. 微信公众平台开发-消息管理-发送客服消息

    一.简介 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理

    前言 回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂 你也可以按自己所分析的情形结构来建表 必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较多 思维导 ...

  7. 天气预报文字版微信_微信公众平台开发(4)天气预报

    微信公众平台 微信公众平台开发 消息接口 微信天气预报 天气预报接口 中国天气网 一.数据接口 百度提供天气预报查询接口API,可以根据经纬度/城市名查询天气情况,我们可以在微信公众平台开发中调用这一 ...

  8. 微信公众平台开发【发送消息】被动回复消息

    当用户给公众号发送消息时,需要公众号自动智能的响应相应的消息,这就是被动回复消息.发送消息的XML数据格式我们需要明白该如何写,各个参数的意义是什么,本节主要讲解发送消息中的被动回复消息.下面的内容看 ...

  9. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能

    微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...

最新文章

  1. 用thttpd做Web Server
  2. linux做预警机制,预警通告:Linux内核中TCP SACK机制远程DoS
  3. 拜读及分析Element源码-alert组件篇
  4. 新建一个spyder窗口
  5. CSP认证201503-1 图像旋转[C++题解]:模拟
  6. windows批量添加用户
  7. 最短网络Agri-Net
  8. 论文浅尝 | CoRR - 面向复杂知识问答的框架语义解析方法
  9. 【Webpack5 配置分包加载 多文件js/css打包 】
  10. .net登录界面_JAVA实现简单的用户登录客户端
  11. linux iphone 存储空间,iOS 11 将会自动删除低使用率 App来释放 iPhone 存储空间
  12. 环境php5.2+mysql_php环境搭建问题(简单记录二------php5.2不加载mysql扩展)
  13. Jmeter安装教程
  14. python通过selenium模块模拟自动登录(以QQ空间为例)
  15. PDF转CAD图纸,该如何转换呢?
  16. 解决keil4与keil5不兼容问题
  17. matlab马赫带,学习实现马赫带效果
  18. vue 详情页标记 评论 详情 等注意事项
  19. CSS Reset(样式重置)
  20. python程序的循环结构_四、python程序结构之循环结构

热门文章

  1. Apace Doris基本操作测试
  2. 微信昵称乱码 mysql_微信网页开发获取用户昵称乱码 微信昵称包含emoji表情乱码的解决方案...
  3. 基于matlab轴的优化设计,基于MATLAB优化工具箱的机床主轴优化设计解析.ppt
  4. 微信/支付宝/网页--扫码进入H5页面,完成业务后关闭页面
  5. 职称计算机c哪3项最简单,职称计算机考试操作题举例(三)
  6. Servlet系列学习笔记1 --- Servlet工作原理和生命周期
  7. deMUX MUX概念
  8. K3后台修改销售模块(销售订单、发货通知单、销售出库单、销售发票)业务员名称语句
  9. 转载:淘宝网正式宣布向全球开放淘宝原始数据
  10. find命令及文件名后缀