minkbear/captainhook

为您的Laravel应用添加webhooks。

3.4.4 2018-09-10 16:56 UTC

README

Captain Hook

## Captain Hook ## 为您的Laravel应用添加Webhooks,哗啦啦

image image codecov.io Scrutinizer Code Quality Build Status StyleCI

使用Laravel事件系统将多个webhooks实现到您的Laravel应用中。

A webhook is a method of altering the behavior of a web application, with custom callbacks.
These callbacks may be managed by third-party users and developers who may not necessarily
be affiliated with the originating application.

示例

php artisan hook:add http://www.myapp.com/hooks/ '\App\Events\PodcastWasPurchased'
php artisan hook:add http://www.myapp.com/hooks/ 'eloquent.saved: \App\User'
Webhook::create([
    "url" => Input::get("url"),
    "event" => "\\App\\Events\\MyEvent",
    "tenant_id" => Auth::id()
]);

内容

## 安装

为了将CaptainHook添加到项目中,只需将以下内容添加到您的composer.json文件的require块中:

"mpociot/captainhook": "~2.0" 

然后运行composer installcomposer update

或者,如果您更喜欢,可以直接运行composer require mpociot/captainhook

然后,在您的config/app.php中,将以下内容添加到providers数组中:

Mpociot\CaptainHook\CaptainHookServiceProvider::class 

发布并运行迁移以创建将保存所有已安装webhooks的"webhooks"表。

php artisan vendor:publish --provider="Mpociot\CaptainHook\CaptainHookServiceProvider" php artisan migrate
## 使用

CaptainHook服务提供程序监听任何eloquent.*事件。

如果包找到了为事件配置的webhook,它将向指定的URL发出POST请求。

Webhook数据以JSON格式发送到POST请求正文中。事件对象完整地包含在内,并在解析JSON正文后可以直接使用。

示例

假设您想创建一个webhook,每次您的User模型被更新时都会调用它。

从Laravel调用的将是以下事件:

eloquent.updated: \App\User

因此,您要监听的就是这个事件。

### 添加新webhooks

如果您知道您想监听哪个事件,您可以使用hook:add artisan命令添加一个新的webhook。

此命令接受两个参数:

  • 将接收POST请求的webhook URL
  • 事件名称。这可以是eloquent.*事件之一,也可以是您的自定义事件之一。
php artisan hook:add http://www.myapp.com/hook/ 'eloquent.saved: \App\User'

您也可以为同一事件添加多个webhooks,因为所有配置的webhooks都会异步调用。

### 删除现有webhooks

要从系统中删除现有的webhook,请使用hook:delete命令。此命令接受webhook ID作为参数。

php artisan hook:delete 2
### 列出所有活动webhooks

要列出所有现有的webhooks,请使用hook:list命令。

它将以表格形式输出所有配置的webhooks。

### Spark

按照安装部分所述安装此包,然后按照Spark安装说明进行操作。

### 自定义事件监听器

所有监听器都在位于 config/captain_hook.php 的配置文件中定义。

### 接收 webhook 通知

要在配置的 webhook 中接收事件数据,请使用以下方法:

// 获取请求体并将其解析为 JSON$input = @file_get_contents("php://input"); $event_json = json_decode($input); // 使用 $event_json 做一些事情
### Webhook 记录

从版本 2.0 开始,此包允许您记录触发 webhook 的有效负载和响应。

注意:强烈建议使用非阻塞队列驱动程序(非 sync)。否则,您的应用程序将需要等待 webhook 执行。

您可以配置每个 webhook 将保存多少条日志(默认 50 条)。

此值可以在配置文件 config/captain_hook.php 中修改。

### 在多租户中使用 webhook

有时您不想使用系统级 webhook,而是希望它们针对特定的“租户”进行范围限定。这可能绑定到一个用户或一个团队。

webhook 表有一个用于此目的的字段 tenant_id。因此,如果您想允许用户添加他们自己的 webhook,您就不会使用 artisan 命令将 webhook 添加到数据库中,而是自行添加。

例如,要添加针对当前用户的 webhook,您可以这样做:

Webhook::create([ "url" => Input::get("url"), "event" => "\\App\\Events\\MyEvent", "tenant_id" => Auth::id() ]);

现在当您触发此事件时,您只想为当前登录的用户调用 webhook。

为了过滤 webhook,请修改 config/captain_hook.php 文件中的 filter 配置值。这是一个 Laravel 集合过滤器。

要只为当前登录的用户返回 webhook,它可能看起来像这样:

'filter' => function( $webhook ){ return $webhook->tenant_id == Auth::id(); },
## 许可证

CaptainHook 是免费软件,根据 MIT 许可证的条款分发。

“第二日:桌子、台灯和宝藏地图”图像根据 Creative Commons 2.0 许可证授权 - 图片来自 stevedave