码迷,mamicode.com
首页 > 微信 > 详细

详解微信开发者文档——3接收用户文本消息并自动回复文本消息

时间:2015-04-06 15:34:33      阅读:847      评论:0      收藏:0      [点我收藏+]

标签:

写在前面的话:上一篇介绍了如何将自己的服务器与微信公众平台进行连接,连接成功之后就可以与微信进行交互了,这一篇介绍最简单的情形,接收用户文本消息,并自动回复文本消息,如果能够实现这个功能,那么我们就能够轻松的实现接收不同的用户消息,并根据业务需要回复用户不同类型的消息,更复杂的在下一篇中讲解。

=====正文开始=====

  当微信用户向公众号发送消息时,微信服务器会将该消息发送至我们填写的URL中,我们在后台就能够写代码实现接收消息---处理消息----回复消息的操作。

  这里有几点需要注意:

1、微信服务器是通过POST方式给我们填写的URL发送消息。

2、发送消息的格式是XML格式。(以后会注意到,其他的一些功能,有时发送的消息的格式并不是XML格式,有可能是json格式,大概是微信团队中不同人各有偏好吧,你喜欢XML,我却喜欢json),文本消息的XML格式如下:

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

各个参数的含义如下:

参数描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType text
Content 文本消息内容
MsgId 消息id,64位整型

 可见,当用户给公众号发送消息时,微信将该消息以XML格式推送至我们填写的URL之中,我们可以从接受的消息中得到:

(1)开发者微信号:即我们自己的微信公共号,这里是toUserName,是站在用户的角度,当我们回复用户消息的时候,我们的自己微信公众号就应该是FromUserName了。

(2)发送方账号:这里获取的是一个OpenID,对于每一个用户来说,他相对于一个特定的公众号,都有一个唯一识别码,这个就是OpenID,有了这个OpenID,我们的公众号就能够识别不同的用户了。对于以后的用户授权、微商城用户信息的记录等等,都是通过OpenID来唯一标示一个用户的。需要注意的是,同一个用户对于不同的微信公众号,OpenID是不同的。

(3)消息创建时间:没啥需要解释的。

(4)消息类型MsgType:我们获取的是文本消息,所以这里是text,在下一篇文章中,我们会看到不同的消息类型,通过这个参数我们就能区分用户发送的不同的消息了,进行做出相应的处理。

(5)消息内容:这里接收的就是用户发送的具体信息的内容了。

(6)消息id:这个是用来标识这个条消息的,可以用来排重用。因为微信服务器向我们的服务器URL推送消息后,如果没有在5秒之内收到回应,会重新发起请求,我们就可以通过这个消息id对重试的消息进行排重了。

3、回复用户消息:当我们服务器URL接收到用户消息,处理完成后,需要给微信服务器进行回复,即发送被动响应消息,同样是回复XML格式的数据,数据的基本组成与前面接收到的XML格式类似,其中FromUserName和ToUserName内容需要进行交换,毕竟所站的角度不同,另外没有了Msgid项。

  好了,前面把需要理解的东西给讲完了,下面看看代码怎么写,与前一篇一样,我们把代码写在wechat.php文件之中。

 

1、接收用户发送的消息。

$postData = $GLOBALS["HTTP_RAW_POST_DATA"];

2、将接收的xml格式消息转化为对象格式,方便操作。

$postObj=json_decode(json_encode(simplexml_load_string($postData, ‘SimpleXMLElement‘, LIBXML_NOCDATA)));

这里需要注意:对接收到的消息需要先json_encode,再json_decode,如果直接json_decode的话,获取的对象会有些小问题的。  

3、获取XML消息具体内容。

    $fromUserName = $postObj->FromUserName;
    $toUserName = $postObj->ToUserName;
    $createTime=$postObj->CreateTime;
    $msgType=$postObj->MsgType;
    $content=$postObj->Content;
    $msgID=$postObj->MsgId;

4、回复用户消息。

    $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                </xml>"; 
    $time = time();
    $content="$fromUserName 发给 $toUserName 的消息类型为: $msgType ,消息id为: $msgID ,消息具体内容为: $content ,发送时间为: $createTime ";          
    $resultStr = sprintf($textTpl, $fromUserName, $toUserName, $time, $msgType, $content);
    echo $resultStr;

这里需要注意:通过直接echo $resultStr即可对微信服务器的POST请求进行响应,并且在$resultStr中,注意fromusername和tousername的对应关系。

  大家可以自己试着在自己的公众号里面尝试一下,当然也可以关注一下我的个人公众号:guangleiwu,进行体验,二维码如下:

技术分享

  在下一篇,我将写一写如何接收其他类型消息,这篇如果理解的话,后面就更容易了。

  最后,将接收文本消息并回复文本消息的全部源码粘贴如下:wechat.php

<?php

    $postData = $GLOBALS["HTTP_RAW_POST_DATA"];
    $postObj=json_decode(json_encode(simplexml_load_string($postData, ‘SimpleXMLElement‘, LIBXML_NOCDATA)));
    $fromUserName = $postObj->FromUserName;
    $toUserName = $postObj->ToUserName;
    $createTime=$postObj->CreateTime;
    $msgType=$postObj->MsgType;
    $content=$postObj->Content;
    $msgID=$postObj->MsgId;
    $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                </xml>"; 
    $time = time();
    $content="$fromUserName 发给 $toUserName 的消息类型为: $msgType ,消息id为: $msgID ,消息具体内容为: $content ,发送时间为: $createTime ";          
    $resultStr = sprintf($textTpl, $fromUserName, $toUserName, $time, $msgType, $content);
    echo $resultStr;

?>

  (完)

详解微信开发者文档——3接收用户文本消息并自动回复文本消息

标签:

原文地址:http://www.cnblogs.com/wuguanglei/p/4395822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!