nxtlvlsoftware / laravel-github-webhooks
一个让在您的Laravel应用程序中处理GitHub webhook变得轻松的包。
Requires
- php: >=7.2.0
- ext-json: *
- laravel/framework: 5.8.*
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-22 21:45:00 UTC
README
让在您的Laravel应用程序中处理GitHub webhook变得轻松。
关于
此包提供容器注入和控制器样式的处理,用于处理所有可用的GitHub webhook事件。开箱即用,您可以使用php artisan make:gh-webhook {event}
命令为事件生成处理器,这将在Http/Webhooks/GitHub
下创建一个具有相应事件名称的类,并为webhook将通知您的每个操作创建一个单独的方法。
<?php namespace App\Http\Webhooks\GitHub; use nxtlvlsoftware\githubwebhooks\handler\ForkHandler as Handler; use nxtlvlsoftware\githubwebhooks\payload\WebhookPayload; class ForkHandler extends Handler { protected function forked(WebhookPayload $payload): void { // } }
然后您应该确保通过从服务提供者的boot方法调用GitHubWebhooks::registerFromDir();
来注册您的应用程序提供的处理器目录。如果您自定义了处理器生成的位置,也可以将正确的目录传递给注册方法:GitHubWebhooks::registerFromDir('Http/Github');
您可以使用php artisan github-webhook:list
命令列出所有可用/支持的GitHub webhook事件。
安装
使用composer安装只需执行以下操作
$ composer require nxtlvlsoftware/laravel-github-webhooks
或者直接将其添加到您的composer.json清单中
{ "require": { "nxtlvlsoftware/laravel-github-webhooks": "*" } }
Composer会自动为您处理注册服务提供者和外观,但您也可以手动注册这些内容(如果愿意的话)。
然后您可以发布迁移文件以创建webhook事件表
$ php artisan vendor:publish --provider="nxtlvlsoftware\githubwebhooks\GitHubWebhooksServiceProvider" --tag="migrations"
您还可以选择发布配置文件,如果您不想在.env文件中定义webhook密钥
$ php artisan vendor:publish --provider="nxtlvlsoftware\githubwebhooks\GitHubWebhooksServiceProvider" --tag="config"
使用
您应该注册一个类似于https://myapp.com/api/webhook/github
的POST API路由,并将GitHub应用程序配置为使用此webhook URL。此包提供了一个用于定义此路由的帮助方法,将其添加到您的api.php文件中
Route::githubWebhooks();
这将默认在github/webhook
处注册一个路由。您可以传递一个自定义路由名称作为第一个参数,并且宏将尊重嵌套组路由规则。
如果收到一个没有配置处理器的webhook,请求将抛出Symfony\Component\HttpKernel\Exception\NotFoundHttpException
异常,这将导致webhook投递失败并返回404错误,并且不会分发任何作业。
如果为事件配置了处理器并且签名验证成功,则将在github_webhook_events
表中插入一个新的模型,包含事件名称、有效载荷和最后作业状态信息。当作业完成时,它将更新模型并将handled
属性设置为true,并删除任何失败信息。如果作业在处理事件时遇到错误,则模型将更新为异常信息,并将failed
属性标记为true。
此包不会自动从数据库中删除已处理的webhook事件数据,因为您可能希望在生产中重新安排失败的事件处理器作业,或者在开发环境中再次运行处理器。
设置有效载荷类型
您应该设置您期望的webhook有效载荷类型(当前默认为数组有效载荷)
GitHubWebhooks::useObjectPayloads(); // payload will be \stdObject GitHubWebhooks::useArrayPayloads(); // payload will be an array
如果您想接受其他格式或以不同方式解析JSON,也可以实现自己的有效载荷类
GitHubWebhooks::usePayload(YourPayload::class);
问题
发现laravel-github-webhooks存在问题?请确保在问题跟踪器上打开一个问题,我们将解决这个问题!
本仓库的内容遵循Unlicense许可证。许可证的完整副本可在此处找到。