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

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

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

同普通消息一样,虽然事件消息也有六种情况,但是这几种事件消息的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()  //调用该函数,相当于开启这个接口供微信服务器调用从而推送消息

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

本文转载自:迹忆客(https://www.jiyik.com)

以上是 微信公众号接收消息 事件消息处理 的全部内容, 来源链接: utcz.com/z/290128.html

回到顶部