mpociot/captainhook

将webhooks添加到您的Laravel应用程序中。

3.2.0 2016-12-08 10:10 UTC

README

Captain Hook

## Captain Hook ## 将Webhooks添加到您的Laravel应用程序,arrr

image image codecov.io Scrutinizer Code Quality Build Status StyleCI

使用Laravel事件系统在您的Laravel应用程序中实现多个webhooks。

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.jsonrequire块中。

"mpociot/captainhook": "~2.0" 

然后运行composer installcomposer update

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

然后在您的config/app.php中添加

Mpociot\CaptainHook\CaptainHookServiceProvider::class 

providers数组。

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

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

## 用法

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

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

Webhook数据作为JSON发送到POST请求体中。完整的事件对象包括在内,并在解析JSON体后可以直接使用。

示例

假设您希望有一个每当您的User模型被更新时被调用的webhook。

从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"

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

### 删除现有的webhooks

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

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

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

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

### 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 许可证条款分发。

'第 02 天:桌子、台灯和宝藏地图' 图片由 Creative Commons 2.0 许可 - 图片来自 stevedave