Skip to content

event_system

刘广财 edited this page Apr 4, 2018 · 1 revision

事件列表

微信中有很多种事件,比如收接文字事件,关注事件,扫码关注事件等,每一种事件都可以被监听,SDK 中默认包含以下 13 种事件(当然,也可以扩展自定义事件):

事件 类型 说明
Itxiao6\Wechat\Event\Event\Text 消息事件 文本消息事件
Itxiao6\Wechat\Event\Event\Image 消息事件 图片消息事件
Itxiao6\Wechat\Event\Event\Voice 消息事件 语音消息事件
Itxiao6\Wechat\Event\Event\ShortVideo 消息事件 小视频消息事件
Itxiao6\Wechat\Event\Event\Location 消息事件 地理位置消息事件
Itxiao6\Wechat\Event\Event\Link 消息事件 链接消息事件
Itxiao6\Wechat\Event\Event\Subscribe 事件推送 关注事件
Itxiao6\Wechat\Event\Event\Unsubscribe 事件推送 取消关注事件
Itxiao6\Wechat\Event\Event\ScanSubscribe 事件推送 扫描二维码关注事件
Itxiao6\Wechat\Event\Event\ScanSubscribed 事件推送 扫描二维码时已关注,直接进入会话事件
Itxiao6\Wechat\Event\Event\UserLocation 事件推送 上报地理位置事件
Itxiao6\Wechat\Event\Event\MenuClick 事件推送 自定义菜单点击拉取消息事件
Itxiao6\Wechat\Event\Event\MenuView 事件推送 自定义菜单跳转链接事件

事件监听

要监听一个事件,只需注册事件的命名空间至监听器即可,第二个参数接收一个 callableclosure 类型:

use Itxiao6\Wechat\Event\EventListener;

$listener = new EventListener();
$listener->addListener('Thenbsp\\Wechat\\Event\\Event\\Text', callable $callable);

或者使用短语法:

use Itxiao6\Wechat\Event\Event\Text;

$listener->addListener(Text::class, callable $callable);

也可以链式调用:

use Itxiao6\Wechat\Event\Event\Text;
use Itxiao6\Wechat\Event\Event\Image;
use Itxiao6\Wechat\Event\Event\Voice;

$listener
    ->addListener(Text::class, callable $callable)
    ->addListener(Image::class, callable $callable)
    ->addListener(Voice::class, callable $callable);

事件处理器

use Itxiao6\Wechat\Event\EventHandler;

$handler = new EventHandler();
$handler->handle($listener);

指定 Request 对象

use Symfony\Component\HttpFoundation\Request;
// 指定 Request 对象
$handler->setRequest(Request::createFromGlobals());

调试 Request

// 获取事件中的 Request 对象
$request = $handler->getRequest();
$content = $request->getContent();

// 将 Request 同容输出到日志
$logger->debug($content);