内容简介:微信服务器将用户消息转发到开发服务器之后,我们首先要做的时读取消息,然后根据消息类型和内容做出回复首先获取消息下面代码能够获取以post方式提交过来的xml数据
1. 将消息转换为对象
微信服务器将用户消息转发到开发服务器之后,我们首先要做的时读取消息,然后根据消息类型和内容做出回复
首先获取消息
下面代码能够获取以post方式提交过来的xml数据
$xml = file_get_contents('php://input');
但是获取的数据是字符串类型,处理起来非常不方便,使用下面的方法将其转换为对象
$request = simplexml_load_string($xml);
转换之后,就可以使用对象->属性 的方式从对象中获取数据类
举例说明:
如用户向订阅号发送的是一个文本消息,消息内容为“你好”,按照上一章所讲的文本消息结构,微信服务器会将消息封装成如下的xml格式,然后才发送给开发服务器,也就是我们上面的index方法
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> <MsgId>1234567890123456</MsgId> </xml>
我们使用simplexml_load_string 将其转换成对象后,就可以使用下面的方式获取 content 中的内容了
$requesst->Content
其他内容的获取也是这种方式,但又两点需要注意
- 区分大小写
- MsgType 用来区分消息类型,如文本消息=text,图片消息=image,事件推送消息=event
2. 处理消息
获取到消息后,可以将消息保存到数据库,或者直接予以回复
我们这里说一下回复消息
具体的可以回复消息的类型,参见如下地址
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
我们这里以回复文本消息为例,比如想要回复“hello”,则需要拼接成如下的xml结构,才可以回复
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[hello]]></Content> </xml>
完整代码如下所示
public function index()
{
if (isset($_GET['echostr'])) {
//接收微信服务器发送过来的数据
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
//这里token的值应该与配置中的token值一致
$token = "weixin";
//1)将token、timestamp、nonce三个参数进行字典序排序
$arr = array($token, $timestamp, $nonce);
sort($arr);
//2)将三个参数字符串拼接成一个字符串进行sha1加密
$tempstr = implode('', $arr);
$tempstr = sha1($tempstr);
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if ($tempstr == $signature) {
//一定要加上这行代码,否则可能导致token总是验证失败
ob_clean();
//4) 返回微信服务器发送过来的 echostr 的值
echo $_GET['echostr'];
}
exit();
} else {
$xml = file_get_contents('php://input');
//file_put_contents(ROOT_PATH.'public/aa.txt',$xml);
//将xml文本转换为对象
$request = simplexml_load_string($xml);
$text = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info = sprintf($text, $request->FromUserName, $request->ToUserName, time(), 'hello');
echo $info;
}
}
上面的代码很混乱,我们将其拆分成几个方法,就会精简很多
第一步,定义方法,用来回复消息。
//处理用户的请求
public function responseMsg()
{
//获取用户提交的数据(数据是以post方式提交的)
$xml = file_get_contents('php://input');
//file_put_contents(ROOT_PATH.'public/aa.txt',$xml);
//将xml文本转换为对象
$request = simplexml_load_string($xml);
switch ($request->MsgType) {
case "event":
//处理事件消息
break;
case "text":
//处理文本消息
$this->doText($request,'hello');
break;
}
}
方法解释:
- 根据MsgType判断消息类型
- 如果消息类型为text,也就是说用户发送的是文本消息,就回复一条文本消息
第二步:编写 doText 方法,专门用来回复文本消息
public function doText($request, $content)
{
$text = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info = sprintf($text, $request->FromUserName, $request->ToUserName, time(), $content);
file_put_contents(ROOT_PATH . 'public/aa.txt', $info);
echo $info;
}
第三步:修改 index 方法代码,再 else 中调用 responseMsg 方法
public function index()
{
if (isset($_GET['echostr'])) {
//接收微信服务器发送过来的数据
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
//这里token的值应该与配置中的token值一致
$token = "weixin";
//1)将token、timestamp、nonce三个参数进行字典序排序
$arr = array($token, $timestamp, $nonce);
sort($arr);
//2)将三个参数字符串拼接成一个字符串进行sha1加密
$tempstr = implode('', $arr);
$tempstr = sha1($tempstr);
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if ($tempstr == $signature) {
//一定要加上这行代码,否则可能导致token总是验证失败
ob_clean();
//4) 返回微信服务器发送过来的 echostr 的值
echo $_GET['echostr'];
}
exit();
} else {
$this->responseMsg();
}
}
好了,下面可以使用自己的微信关注自己的订阅号,然后发送一个文本消息,看看能不能得到回复
以上所述就是小编给大家介绍的《公众号开发第三篇--处理消息》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 微信公众号开发C#系列-6、消息管理-普通消息接受处理
- 公众号开发第三篇--接收用户消息
- Go 实战丨微信公众号接入及用户消息处理
- 微信公众号开发C#系列-7、消息管理-接收事件推送
- 微信公众号消息处理 DEMO 在 PHP7.0 环境下的代码升级处理
- 微信公众号开发C#系列-9、多公众号集中管理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度学习
[美] 伊恩·古德费洛、[加] 约书亚·本吉奥、[加] 亚伦·库维尔 / 赵申剑、黎彧君、符天凡、李凯 / 人民邮电出版社 / 2017-7-1 / 168
《深度学习》由全球知名的三位专家Ian Goodfellow、Yoshua Bengio 和Aaron Courville撰写,是深度学习领域奠基性的经典教材。全书的内容包括3个部分:第1部分介绍基本的数学工具和机器学习的概念,它们是深度学习的预备知识;第2部分系统深入地讲解现今已成熟的深度学习方法和技术;第3部分讨论某些具有前瞻性的方向和想法,它们被公认为是深度学习未来的研究重点。 《深度......一起来看看 《深度学习》 这本书的介绍吧!