# 服务器事件

# 接收回调消息

TIP

SDK 目前提供三种方法以方便你监听钉钉服务器的事件推送

你无需关心回调消息的加解密问题,直接使用如下实例即可

当然你可以多次调用 push 方法,实现多个消息处理器

# Closure 闭包




 
 
 
 
 
 
 
 
 
 
 
 
 





// 获取 server 实例
$server = $app->server;

$server->push(function ($payload) {
    // 此处 $payload 为钉钉推送事件解密后的内容,为数组形式
    /**
     * 比如测试回调 URL 事件,$payload 内容为:
     *
     * $payload = [
     *     "EventType" => "check_url",
     * ]
     */
    $type = $payload['EventType'];
    // ...
    // 可根据内容处理你对应的业务逻辑
});

return $server->serve(); // 如 Laravel 框架中使用该语法

$server->serve()->send(); // ThinkPHP 等框架使用

# 自定义类

WARNING

自定义类中需要包含 __invoke 方法

DingTalkHandler.php











 
 
 
 
 
 
 
 
 


class DingTalkHandler
{
    /**
     * @param \EasyDingTalk\Application $app
     */
    public function __construct($app)
    {
        // SDK 会注入当前 $app 实例到你自定义类的构造方法中,你可以根据业务情况使用
    }

    /**
     * @param  array $payload
     *
     * @return void
     */
    public function __invoke($payload)
    {
        // 在此处处理你的业务逻辑
    }
}



 





// 获取 server 实例
$server = $app->server;

$server->push(DingTalkHandler::class);

return $server->serve(); // 如 Laravel 框架中使用该语法

$server->serve()->send(); // ThinkPHP 等框架使用

# 传入已实例化对象

WARNING

自定义类中需要包含 __invoke 方法

DingTalkHandler.php



 
 
 
 
 
 
 
 
 


class DingTalkHandler
{
    /**
     * @param  array $payload
     *
     * @return void
     */
    public function __invoke($payload)
    {
        // 在此处处理你的业务逻辑
    }
}



 





// 获取 server 实例
$server = $app->server;

$server->push(new DingTalkHandler('foo'));

return $server->serve(); // 如 Laravel 框架中使用该语法

$server->serve()->send(); // ThinkPHP 等框架使用

# 响应钉钉服务器

WARNING

当调用 $server->serve() 方法时(如上述示例)

SDK 会向钉钉服务器返回 success 的 JSON 数据,无需手动拼接返回数据 😃