《微信公众平台开发最佳实践》——3.3 接收事件推送消息

3.3 接收事件推送消息

在基础接口中,事件消息只有关注和取消关注事件。用户关注和取消关注公众账号的时候将分别触发这两个消息。

3.3.1 关注/取消关注

用户关注微信公众账号时的界面如图3-14所示,单击“关注”按钮,微信公众账号将收到关注事件。
用户关注微信公众账号时的XML数据格式如下所示:

<xml>
    <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
    <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
    <CreateTime>1372307736</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[]]></EventKey>
</xml>```
用户取消关注微信公众账号时的界面如图3-15所示,单击“取消关注”按钮,微信公众账号将收到取消关注事件。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/9a71735fa3b60d01d6f7736973559e094d9f4312.png" width="" height="">
</div>

用户取消关注微信公众账号时的XML数据格式如下所示:
<ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
<FromUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></FromUserName>
<CreateTime>1372309890</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[unsubscribe]]></Event>
<EventKey><![CDATA[]]></EventKey>

`
关注及取消关注事件消息的参数及描述如表3-13所示。

3.3.2 案例

本节将关注/取消关注事件消息通过代码实现,以便读者理解。代码如下所示:

<?php
//
// 关注/取消关注事件消息
// 微信公众账号关注与取消关注事件消息
//

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);
        if($tmpStr == $signature){
            return true;
        }else{
            return false;
        }
    }
    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
            }
            echo $result;
        }else {
            echo "";
            exit;
        }
    }

    private function receiveEvent($object)
    {
        $content = "";
        switch ($object->Event)
        {
            case "subscribe":   //关注事件
                $content = "欢迎关注方倍工作室";
                break;
            case "unsubscribe": //取消关注事件
                $content = "";
                break;
        }
        $result = $this->transmitText($object, $content);
        return $result;
    }
    private function transmitText($object, $content)
    {
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
        $result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time(), $content);
        return $result;
    }
}
?>```
时间: 2025-01-28 13:00:44

《微信公众平台开发最佳实践》——3.3 接收事件推送消息的相关文章

C#微信公众号开发系列教程五(接收事件推送与消息排重)

原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C#微信公众号开发系列教程四(接收普通消息) C#微信公众号开发系列教程五(接收事件推送与消息排重) 在上一篇的博文中讲到,微信的消息可以大体分为两种类型,一种是包括:文本,语音,图片等的普通消息,另一种就是本篇要将的事件类型.包括:关注/

微信公众平台开发最佳实践(第2版)

  <微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 方倍工作室已出版本书的第3版电子版,内容更多,价格更优惠,欢迎查看购买,地址:http://www.cnblogs.com/txw1958/p/buy-ebook.html       前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发

微信公众平台开发最佳实践

<微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口.自定义菜单.高级接口.微信支付.分享转发等所有相关技术,以生活类.娱乐类.企业类微信开发为切入点,讲解了30多个功能或应用案例. 前言 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相头文章的日访问量高达上万人次,而<微信公众平台开发入门教程>一门

《微信公众平台开发最佳实践》——导读

前 言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过50万,博客访问量总计超过500万,成为微信公众平台开发更新最快,传播最广.受众最多.资料最全的博客,很多博文被许多有影响力的网站转载,并被各大搜索引擎收录且排名靠前,这些是我们始料未及的. 然而更让人高兴的是,很多开发者通过学习我们的教程掌握了微信公众平台开发技术,并且通过微信开发赚到了钱.2013年10月1

《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息

第3章 基 础 接 口 基础接口是微信公众账号在申请后就默认拥有而不需要通过微信认证获得的接口.微信公众平台开发者中心启用之后,需要使用基础接口实现基本消息的接收与发送.基础接口包括三个主要的部分:接收用户消息,发送被动响应消息,接收事件推送消息.本章将介绍这三个部分是如何实现的. 3.1 接收用户消息 微信公众账号能够接收用户发送的六种格式的消息:文本(包括表情).图片.语音.视频.地理位置.链接.下面将分别介绍这六种消息. 3.1.1 文本消息 用户向微信公众账号发送文本消息的示例如图3-1

《微信公众平台开发最佳实践》——3.4 本章小结

3.4 本章小结 本章介绍了微信公众平台的基础接口,包含接收用户消息.发送被动响应消息.接收事件推送消息等三部分,这些接口是所有公众账号都具备的基础能力,熟练地应用这些接口可以实现很多有趣.有价值的功能.比如图片消息中的人脸识别.地理位置消息中的导航功能,这些都将在后面的章节有介绍.

《微信公众平台开发最佳实践》—— 第1章 微信公众平台介绍 1.1 微信及其三大平台

第1章 微信公众平台介绍 微信自推出后,便如星火燎原之势发展,截至2014年7月,微信用户数已近8亿,月活跃用户接近4亿,公众账号达580万个,每日新增数为1.5万,是亚洲地区用户群体最大的移动端即时通信软件,同时也被公认为目前唯一拿到移动互联网门票的应用. 本章主要介绍微信公众平台的注册及使用. 1.1 微信及其三大平台 微信(英文名:WeChat)是腾讯公司于2011年年初推出的一款可以发送文字.表情.图片.语音.视频.位置.链接,并支持语音实时对讲的手机聊天软件.用户可以通过"添加QQ好友

《微信公众平台开发最佳实践》——2.4 本章小结

2.4 本章小结 本章首先介绍了如何申请新浪云SAE应用作为微信公众平台程序托管的服务器,然后介绍了配置及启用微信开发者中心的接口程序,最后介绍了使用微信调试器进行开发调试的方法.

《微信公众平台开发最佳实践》——2.3 微信开发调试工具

2.3 微信开发调试工具 2.3.1 微信调试器 微信调试器是方倍工作室开发的用于微信公众平台接口开发在线调试的工具,具有Token校验.模拟关注及取消关注.发送文本/图片/语音/视频/位置/链接.模拟事件发送等功能. 微信调试器运行时推荐使用Chrome浏览器或Firefox浏览器,以得到更好的兼容. 微信调试器的地址是debug.fangbei.org/,其界面如图2-27所示. 下面介绍微信调试器的使用方法. 1.?Token校验 在URL输入框和Token输入框中分别填写微信公众账号的接