# 接收事件推送
[toc]
在微信用戶和公眾號產生交互的過程中,用戶的某些操作會使得微信服務器通過事件推送的形式通知到開發者在開發者中心處設置的服務器地址,從而開發者可以獲取到該信息。其中,某些事件推送在發生后,是允許開發者回復用戶的,某些則不允許。
## 關注
用戶在關注與取消關注公眾號時,微信會把這個事件推送到開發者填寫的URL。方便開發者給用戶下發歡迎消息或者做帳號的解綁。
微信服務器在五秒內收不到響應會斷掉連接,并且重新發起請求,總共重試三次。
假如服務器無法保證在五秒內處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發起重試。
```php
//消息管理模塊
$instance = WeChat::instance('message');
//判斷是否是關注事件
if ($instance->isSubscribeEvent())
{
//向用戶回復消息
$instance->text("感謝你關注xxxxx");
}
```
## 取消關注
網站捕獲取消關注事件后可以對粉絲等數據進行后續處理。
```php
//消息管理模塊
$instance = WeChat::instance('message');
//判斷是否是取消關注事件
if ($instance->isUnSubscribeEvent())
{
//網站做后續處理...
}
```
## 掃描二維碼事件
####用戶未關注時,進行關注后的事件推送
未關注時掃描二維碼并點擊了關注時觸發此事件。如果在些事件處理之前設置了關注事件,那么這個事件不會被執行。如果關注事件與掃碼關注事件都有情況下,將掃碼關注事件放在關注事件前面處理。
```php
//消息管理模塊
$instance = WeChat::instance('message');
//未關注用戶掃描二維碼事件
if ($instance->isSubscribeScanEvent())
{
//獲取消息內容
$message = $instance->getMessage();
//向用戶回復消息
$instance->text("未關注用戶掃描二維碼關注了xxxxx,EventKey: {$message->EventKey} ,二維碼的Ticket: {$message->Ticket}");
}
```
## 用戶已關注時的事件推送
已經關注的用戶掃描了創建的微信二維碼時觸發這個事件。
```php
//消息管理模塊
$instance = WeChat::instance('message');
//關注用戶掃描二維碼事件
if ($instance->isScanEvent())
{
//獲取消息內容
$message = $instance->getMessage();
//向用戶回復消息
$instance->text("已關注用戶掃描二維碼,EventKey: {$message->EventKey} ,二維碼的Ticket: {$message->Ticket}");
}
```
## 上報地理位置消息
用戶同意上報地理位置后,每次進入公眾號會話時,都會在進入時上報地理位置,或在進入會話后每5秒上報一次地理位置,公眾號可以在公眾平臺網站中修改以上設置。上報地理位置時,微信會將上報地理位置事件推送到開發者填寫的URL。
```php
//消息管理模塊
$instance = WeChat::instance('message');
//關注用戶掃描二維碼事件
if ($instance->isLocationEvent())
{
//獲取消息內容
$message = $instance->getMessage();
//向用戶回復消息
$instance->text("上報地理位置事件,緯度: {$message->Latitude} ,經度: {$message->Longitude}");
}
```