迹忆客 专注技术分享

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

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

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

我们知道,微信用户和公众号交互产生的消息分为两种:一种是普通消息,在《微信公众号接收消息 普通消息处理》这篇文章中做了详细的介绍;另一种是事件消息。本篇我们就来看一下事件消息。

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

同普通消息一样,虽然事件消息也有六种情况,但是这几种事件消息的xml数据格式也都有几个相同的字段:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
</xml>

ToUserName 开发者微信号
FromUserName 发送方微信号
CreateTime 消息创建的时间
MsgType 消息类型 因为上面的六种情况都属于事件消息,所以这个字段的值是相同的都为event
Event 事件类型 这个字段是上面六种情况都有的,但是值是不同的。

对于上面六种情况,我们分别来看

关注/取消关注事件

用户在关注或者取消关注的时候,微信会把这个事件推送到开发者填写的URL。关注或取消关注的xml数据格式如下

<Event><![CDATA[subscribe]]></Event>   //关注
//
<Event><![CDATA[unsubscribe]]></Event>  //取消关注

扫描带参数二维码事件

用户扫描带场景的二维码的时候,推送的事件分为两种情况

第一 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
第二 如果用户已经关注公众号,则微信会将带场景值的扫描事件推送给开发者。

以上两种情况都有相同的字段,只是字段的值是不同的。

1.用户未关注时,扫描关注的事件推送

<Event><![CDATA[subscribe]]></Event>  //事件类型 subscribe
<EventKey><![CDATA[qrscene_123123]]></EventKey>  //事件KEY值,qrscene_ 是前缀,后面为二维码的参数值
<Ticket><![CDATA[TICKET]]></Ticket>  //二维码的ticket,可用来换取二维码图片

2.用户已关注时的事件推送

<Event><![CDATA[SCAN]]></Event>  //事件类型 SCAN
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>  //事件KEY值 是一个32位无符号整数,即创建二维码时的二维码scene_id
<Ticket><![CDATA[TICKET]]></Ticket>  //二维码的ticket,可用来换取二维码图片

上报地理位置事件

用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的URL。

<Event><![CDATA[LOCATION]]></Event>  //事件类型 LOCATION
<Latitude>23.137466</Latitude>   //地理位置纬度
<Longitude>113.352425</Longitude>  //地理位置经度
<Precision>119.385040</Precision>   //地理位置精度

自定义菜单事件

用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。

点击菜单拉取消息时的事件推送

<Event><![CDATA[CLICK]]></Event>  //事件类型 CLICK
<EventKey><![CDATA[EVENTKEY]]></EventKey>  //事件KEY值,与自定义菜单接口中KEY值对应

点击菜单跳转链接时的事件推送

<Event><![CDATA[VIEW]]></Event>   //事件类型 VIEW
<EventKey><![CDATA[www.onmpw.com]]></EventKey>  //事件KEY值,要跳转的链接

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

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;
$event = $postObj->Event;
//根据不同的事件类型写不同的处理
                     
    }else {
       echo "";
       exit;
    }  
}
responseMsg()  //调用该函数,相当于开启这个接口供微信服务器调用从而推送消息

事件消息的接收处理其实和普通消息是没有什么区别的,主要还是看我们的业务逻辑对接收到的消息都要如何进行处理。

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

本文地址:

相关文章

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

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

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

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

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

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

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

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

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

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便