# 接收事件推送
[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}");
}
```