# 消息事件管理
消息事件分為 ``普通消息`` 和 ``事件消息``,用于用戶事件處理,消息事件共包含以下 15 種類型:
- 文本消息
- 圖像消息
- 語音消息
- 視頻消息
- 小視頻消息
- 地理位置消息
- 鏈接消息
- 關注消息 (Event)
- 取消關注消息 (Event)
- 掃描帶參數的二維碼關注事件 (Event)
- 掃描帶參數的二維碼未關注事件 (Event)
- 上報地理位置事件 (Event)
- 點擊定義菜單拉取消息事件 (Event)
- 點擊定義菜單跳轉鏈接事件 (Event)
http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html
## 事件名稱列表
```php
Event::TEXT // 文本消息
Event::IMAGE // 圖像消息
Event::VOICE // 語音消息
Event::VIDEO // 視頻消息
Event::SHORTVIDEO // 小視頻消息
Event::LOCATION // 地理位置消息
Event::LINK // 鏈接消息
Event::EVENT_SUBSCRIBE // 關注消息 (Event)
Event::EVENT_UNSUBSCRIBE // 取消關注消息 (Event)
Event::EVENT_QRCODE_SUBSCRIBE // 掃描帶參數的二維碼關注事件 (Event)
Event::EVENT_QRCODE_UNSUBSCRIBE // 掃描帶參數的二維碼未關注事件 (Event)
Event::EVENT_LOCATION // 上報地理位置事件 (Event)
Event::EVENT_CLICK // 點擊定義菜單拉取消息事件 (Event)
Event::EVENT_VIEW // 點擊定義菜單跳轉鏈接事件 (Event)
```
## 基本用法
```php
use Thenbsp\Wechat\Message\Event;
use Thenbsp\Wechat\Message\EventManager;
$eventManager = new EventManager();
$eventManager->on('eventName', 'eventCallback');
```
## on 方式調用
```php
$eventManager->on(Event::TEXT, 'eventCallback');
$eventManager->on(Event::IMAGE, 'eventCallback');
$eventManager->on(Event::VOICE, 'eventCallback');
$eventManager->on(Event::VIDEO, 'eventCallback');
$eventManager->on(Event::SHORTVIDEO, 'eventCallback');
$eventManager->on(Event::LOCATION, 'eventCallback');
$eventManager->on(Event::LINK, 'eventCallback');
$eventManager->on(Event::EVENT_SUBSCRIBE, 'eventCallback');
$eventManager->on(Event::EVENT_UNSUBSCRIBE, 'eventCallback');
$eventManager->on(Event::EVENT_QRCODE_SUBSCRIBE, 'eventCallback');
$eventManager->on(Event::EVENT_QRCODE_UNSUBSCRIBE, 'eventCallback');
$eventManager->on(Event::EVENT_LOCATION, 'eventCallback');
$eventManager->on(Event::EVENT_CLICK, 'eventCallback');
$eventManager->on(Event::EVENT_VIEW, 'eventCallback');
```
## onXXX 方式調用
```php
$eventManager->onText('eventCallback');
$eventManager->onImage('eventCallback');
$eventManager->onVoice('eventCallback');
$eventManager->onVideo('eventCallback');
$eventManager->onShortvideo('eventCallback');
$eventManager->onLocation('eventCallback');
$eventManager->onLink('eventCallback');
$eventManager->onEventSubscribe('eventCallback');
$eventManager->onEventUnsubscribe('eventCallback');
$eventManager->onEventQrcodeSubscribe('eventCallback');
$eventManager->onEventQrcodeUnsubscribe('eventCallback');
$eventManager->onEventLocation('eventCallback');
$eventManager->onEventClick('eventCallback');
$eventManager->onEventView('eventCallback');
```
## Closure 方式傳入回調
```php
$eventManager->on(Event::TEXT, function(Event $event) {
// ...
});
```
## Method 方式傳入回調
```php
class Demo
{
public function test(Event $event)
{
// ...
}
}
$eventManager->on(Event::TEXT, array(new Demo, 'test'));
```
## 鏈式調用
```php
$callback = function(Event $event) {
// ...
}
$eventManager
->on(Event::TEXT, $callback)
->on(Event::IMAGE, $callback)
->on(Event::VIDEO, $callback)
->on(Event::EVENT_CLICK, $callback)
->on(Event::EVENT_SUBSCRIBE, $callback);
```
## 被動回復消息
被動回復消息可在回調中返回消息實體即可,更多消息實體類型請參考 message-entity.md。
```php
use Thenbsp\Wechat\Message\Entity\Text;
$eventManager->on(Event::TEXT, function(Event $event) {
// 處理你自己的業務
// ...
// 回復文本消息
$options = array(
'ToUserName' => 'toUser',
'FromUserName' => 'fromUser',
'CreateTime' => 'CreateTime',
'Content' => '測試消息'
);
return new Text($options);
});
```