nxtlvlsoftware/laravel-github-webhooks

一个让在您的Laravel应用程序中处理GitHub webhook变得轻松的包。

dev-master 2019-03-22 08:13 UTC

This package is auto-updated.

Last update: 2024-09-22 21:45:00 UTC


README

让在您的Laravel应用程序中处理GitHub webhook变得轻松。

Build Status

关于

此包提供容器注入和控制器样式的处理,用于处理所有可用的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许可证。许可证的完整副本可在此处找到。