viezel/webhooks

1.0.0 2020-10-20 11:39 UTC

This package is auto-updated.

Last update: 2024-09-20 20:48:56 UTC


README

Latest Version on Packagist GitHub Tests Action Status

简单强大的Webhooks实现。

安装

您可以通过composer安装此包。

composer require viezel/webhooks

您可以使用以下命令发布并运行迁移:

php artisan vendor:publish --provider="Viezel\Webhooks\WebhooksServiceProvider" --tag="migrations"
php artisan migrate

将路由添加到您的应用程序中。以下是带有认证、api前缀和命名的典型路由配置。

Route::middleware('auth:api')->prefix('api')->as('webhooks.api.')->group(function() {
    Route::get('hooks', Viezel\Webhooks\Controllers\API\ListWebhooks::class)->name('list');
    Route::get('hooks/events', Viezel\Webhooks\Controllers\API\ListWebhookEvents::class)->name('events');
    Route::post('hooks', Viezel\Webhooks\Controllers\API\CreateWebhook::class)->name('create');
    Route::delete('hooks/{id}', Viezel\Webhooks\Controllers\API\DeleteWebhook::class)->name('delete');
});

使用方法

首先,在应用程序中注册应作为Webhooks公开的事件。为此,您的事件应实现ShouldDeliverWebhooks接口。

该接口有两个方法,getWebhookName用于为Webhook提供一个唯一的名称,以及getWebhookPayload用于定义与Webhook一起发送的数据。

以下示例显示了如何实现Post Updated事件及其实现:

use App\Models\Post;
use Viezel\Webhooks\Contracts\ShouldDeliverWebhooks;

class PostUpdatedEvent implements ShouldDeliverWebhooks
{
    public function __construct(Post $post)
    {
        $this->post = $post;
    }

    public function getWebhookName(): string
    {
        return 'post:updated';
    }

    public function getWebhookPayload(): array
    {
        return [
            'post' => $this->post->toArray(),
            'extra' => [
                'foo' => 'bar'
            ]       
        ];
    }
}

接下来,您需要将所有事件注册到WebhookRegistry中。这通常在ServiceProvider的boot方法中完成。

public function boot()
{
    WebhookRegistry::listen(PostUpdatedEvent::class);
}

要检查一切是否按预期工作,请访问Webhooks事件路由。默认路由为:/api/hooks/events。这取决于您如何注册Webhook路由。

列出可用的Webhooks事件

GET https://myapp.test/api/hooks/events

列出注册的Webhooks

GET https://myapp.test/api/hooks

注册Webhook

POST https://myapp.test/api/hooks

{
    "events": [
        "post:updated"
    ],
    "url": "https://another-app.com/some/callback/route"
}

删除Webhook

DELETE https://myapp.test/api/hooks/{id}

测试

composer test

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件