官术网_书友最值得收藏!

4.4 接收事件消息

事件消息是訂閱用戶對公眾號執行某種操作觸發的消息。微信公眾平臺支持6種事件:關注/取消關注事件、掃描帶參數二維碼事件、上報地理位置事件、自定義菜單事件、點擊菜單拉取消息事件、點擊菜單跳轉鏈接事件。下面詳細介紹各個事件。

4.4.1 關注/取消關注事件

當用戶關注和取消關注公眾號時,微信會把這個事件推送到開發者填寫的URL,方便開發者給用戶發送歡迎消息或做賬號的解綁。消息格式如下:

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

參數說明如表4-10所示。

表4-10 參數說明

     const EVENT_TYPE_SUBSCRIBE='subscribe';
     const EVENT_TYPE_UNSUBSCRIBE='unsubscribe';
     /**
          *判斷是否是訂閱事件
          * @return boolean
          */
         public function isSubscribeEvent()
         {
             return $this->_postData->Event == self::EVENT_TYPE_SUBSCRIBE &&
                 $this->_postData->EventKey == "";
     }
     /**
          *判斷是否是退訂事件
          * @return boolean
          */
         public function isUnsubscribeEvent()
         {
             return $this->_postData->Event == self::EVENT_TYPE_UNSUBSCRIBE;
         }
     $this->text("訂閱事件,訂閱用戶是:".$data->FromUserName);

運行結果如圖4-12所示。

圖4-12

4.4.2 掃描二維碼事件

微信提供了生成二維碼的功能,賦予公眾號更多的含義和想象空間。當微信用戶掃描二維碼時,微信公眾平臺可能會推送以下兩種事件:

  • 如果用戶還未關注公眾號,那么可以先關注公眾號,關注后,微信會將帶場景值的關注事件推送給開發者。如果用戶不關注,自然就不會推送事件。
  • 如果用戶已經關注了公眾號,微信就會將帶場景值掃描事件推送給開發者。
1.用戶未關注時,進行關注后的事件推送
     <xml><ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[FromUser]]></FromUserName>
     <CreateTime>123456789</CreateTime>
     <MsgType><![CDATA[event]]></MsgType>
     <Event><![CDATA[subscribe]]></Event>
     <EventKey><![CDATA[qrscene_123123]]></EventKey>
     <Ticket><![CDATA[TICKET]]></Ticket>
     </xml>

參數說明如表4-11所示。

表4-11 參數說明

     /**
          *判斷是否是未關注用戶掃描二維碼事件
          * @return boolean
          */
         public function isSubscribeScanEvent()
         {
              return $this->_postData->Event == self::EVENT_TYPE_SUBSCRIBE &&
                     $this->_postData->EventKey != "";
         }
     $this->text("未訂閱用戶掃描二維碼事件,Key值是:".$data->EventKey."\nTicket值是:".$data->Ticket);

運行結果如圖4-13所示。

圖4-13

2.用戶已關注時的事件推送

推送XML數據包示例:

     <xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[FromUser]]></FromUserName>
     <CreateTime>123456789</CreateTime>
     <MsgType><![CDATA[event]]></MsgType>
     <Event><![CDATA[SCAN]]></Event>
     <EventKey><![CDATA[SCENE_VALUE]]></EventKey>
     <Ticket><![CDATA[TICKET]]></Ticket>
     </xml>

參數說明如表4-12所示。

表4-12 參數說明

    const EVENT_TYPE_SCAN='SCAN';
    /**
         *判斷是否是掃描二維碼事件
         * @return boolean
         */
        public function isScanEvent()
        {
            return $this->_postData->Event == self::EVENT_TYPE_SCAN;
    }
    $this->text("已訂閱用戶掃描二維碼事件,Key值是:".$data->EventKey."\nTicket值
是:".$data->Ticket."\nCreateTime是:".$data->CreateTime);

運行結果如圖4-14所示。

4.4.3 上報地理位置事件

用戶同意上報地理位置后,每次進入公眾號會話時都會上報地理位置,或者在進入會話后每5秒上報一次地理位置,公眾號可以在公眾平臺網站上修改這些設置。上報地理位置時,微信將上報地理位置事件推送到開發者填寫的URL,如圖4-15所示。

圖4-14

圖4-15

     xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName>
     <CreateTime>123456789</CreateTime>
     <MsgType><![CDATA[event]]></MsgType>
     <Event><![CDATA[LOCATION]]></Event>
     <Latitude>23.137466</Latitude>
     <Longitude>113.352425</Longitude>
     <Precision>119.385040</Precision>
     </xml>

參數說明如表4-13所示。

表4-13 參數說明

    const EVENT_TYPE_LOCATION='LOCATION';
    /**
         *判斷是否是上傳地理位置事件
         * @return boolean
         */
        public function isLocaitonEvent()
        {
            return $this->_postData->Event == self::EVENT_TYPE_LOCATION;
    }
    $this->text("上傳地理位置事件,緯度是:".$data->Latitude."\n經度是:".$data->Longitude."\n精度
是:".$data->Precision);

運行結果如圖4-16所示。

圖4-16

4.4.4 自定義菜單事件

用戶點擊自定義菜單后,如果菜單按鈕是Click類型,微信就會把點擊事件推送給開發者,如果菜單按鈕是View類型(跳轉到URL)或點擊菜單彈出子菜單,就不會產生上報。

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

參數說明如表4-14所示。

表4-14 參數說明

     const EVENT_TYPE_CLICK='CLICK';
     /**
          *判斷是否是點擊菜單拉取消息事件
          * @return boolean
          */
         public function isClickEvent()
         {
             return $this->_postData->Event == self::EVENT_TYPE_CLICK;
     }
     $this->text("點擊菜單拉取消息事件,Key值是:".$data->EventKey);

運行結果如圖4-17所示。

圖4-17

主站蜘蛛池模板: 灌南县| 湖州市| 乌拉特前旗| 岳阳县| 万州区| 永平县| 绥滨县| 迁西县| 忻城县| 慈利县| 苍山县| 铜陵市| 琼海市| 万全县| 永德县| 田林县| 东丰县| 塔城市| 东丰县| 沈丘县| 原平市| 浮梁县| 凭祥市| 沾益县| 遵化市| 新源县| 阜阳市| 和田市| 新河县| 北流市| 关岭| 新干县| 江津市| 九龙坡区| 河间市| 鸡东县| 北宁市| 莱阳市| 赤城县| 土默特左旗| 金乡县|