迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 网络 >

微信公众号接收消息 普通消息处理

作者:迹忆 最近更新:2022/12/11 浏览次数:

在微信用户和公众号产生交互的过程中会分为两种情况:一种是微信用户向公众号发送普通消息;另一种是微信用户的某些操作使得微信服务器通过事件推送的形式通知到开发者填写的URL。本篇我们来介绍公众号接收普通消息的处理。

下面这段话是摘自微信官方开发文档:

1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”

普通消息又分为文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息和链接消息等七种。

当微信用户向公众号发送消息的时候,微信服务器将会识别消息的类型,将相应消息的xml数据发送给开发者。以文本消息为例,其格式如下:

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

各个字段的含义如下

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

我们看,微信服务器将xml数据发送给开发者之后,开发者是根据MsgType字段来判断该消息是属于什么类型的。不同消息的MsgType的值如下:

文本消息         text
图片消息         image
语音消息         voice
视频消息         video
小视频消息     shortvideo
地理位置消息 location
链接消息         link

对于每个消息的xml数据格式,下面五个字段是每种消息都有的,其中MsgType的值是根据不同的消息类型而不同。

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text/image/voice/video/shortvideo/location/link]]></MsgType>
<MsgId>1234567890123456</MsgId>

下面我们看不同的字段

文本消息

<Content><![CDATA[Content]]></Content>   //文本消息内容

图片消息

<PicUrl><![CDATA[this is a url]]></PicUrl>    //图片链接
<MediaId><![CDATA[media_id]]></MediaId>  //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

语音消息

<MediaId><![CDATA[media_id]]></MediaId>  //语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
<Format><![CDATA[Format]]></Format>  //语音格式 如amr、speex等

语音消息除了上面两个字段以外,还有一个字段——语音识别——需要我们在公众号进行开启才能使用

<Recognition><![CDATA[]]></Recognition>   //关闭语音识别 内容为空
// 开启
<Recognition><![CDATA[腾讯微信团队]]></Recognition>  //开启语音识别,内容为识别的语音的内容

视频消息

<MediaId><![CDATA[media_id]]></MediaId>  //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

小视频消息

<MediaId><![CDATA[media_id]]></MediaId>  //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId> //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

地理位置消息

<Location_X>23.134521</Location_X>    //地理位置维度
<Location_Y>113.358803</Location_Y>  //地理位置经度
<Scale>20</Scale>     //地图缩放大小
<Label><![CDATA[位置信息]]></Label>   //地理位置信息

链接消息

<Title><![CDATA[迹忆博客]]></Title>   //消息标题
<Description><![CDATA[迹忆博客——一个专业的技术博客]]></Description> //消息内容
<Url><![CDATA[http://www.onmpw.com]]></Url>     //消息链接

各种消息的格式就是我们上面所展示的那些。

下面我们来看一下开发者如何接收这些消息

function responseMsg()
{
         //get post data, May be due to the different environments
         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
         file_put_contents("/tmp/wx.txt", $postStr);  //将消息内容写入文件,便于我们自己观察
    //extract post data
         if (!empty($postStr)){
        //这里写消息处理代码
                   libxml_disable_entity_loader(true);
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
                  $msgType = $postObj->MsgType;
                   //根据不同的消息类型写不同的处理
                     
    }else {
       echo "";
       exit;
    }  
}
responseMsg()  //调用该函数,相当于开启这个接口供微信服务器调用从而推送消息

微信公众号的接收消息的处理其实很简单,我们这里说的是明文的信息的处理,同时还有安全模式和兼容模式。在以后我们会说到,这里我们先介绍这么多。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

微信公众号接收消息 事件消息处理

发布时间:2016/10/18 浏览次数:4505 分类:网络

事件消息分为关注/取消关注、扫描带参数的二维码、上报地理位置、自定义菜单、点击菜单拉取消息、点击菜单跳转链接共六种事件。

微信公众号开发教程获取access_token

发布时间:2016/10/12 浏览次数:4394 分类:网络

在微信公众号开发过程中,如果我们想要主动向微信服务器推送消息那么我们必须要有access_token。access_token 是公众号的唯一票据。这里我们介绍获取access_token的方法及使用案例。

微信公众号开发教程 接口配置与身份验证

发布时间:2016/10/11 浏览次数:2537 分类:网络

要想成为微信公众号的开发者,首先必须有可以对外访问的服务器。微信公众号的开发不限制使用什么语言,这里我们使用PHP作为开发语言。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便