mvdnbrk/laravel-postmark-webhooks

在 Laravel 应用程序中处理 Postmark webhooks。

v1.7.0 2022-03-09 18:02 UTC

README

Postmark Inbound

在 Laravel 应用程序中处理 Postmark webhooks

Latest Version on Packagist Software License Tests StyleCI Total Downloads

当事件发生时,Postmark 可以向您的应用程序发送几个 webhooks。
这样,Postmark 就能在有新情况发生时立即通知您。

此包可以帮助您处理这些 webhooks。

安装

您可以通过 composer 安装此包

composer require mvdnbrk/laravel-postmark-webhooks

默认情况下,此包会将所有传入的 webhooks 记录到数据库中。
运行迁移以在数据库中创建 postmark_webhook_logs

php artisan migrate

如果您想禁用数据库日志记录,可以在 .env 文件中设置 POSTMARK_WEBHOOKS_LOG_ENABLED=false

使用 Postmark 设置 webhooks

访问您的 服务器 页面。选择您要设置 webhooks 的服务器。
转到 settings > webhooks > add webbook

此包将注册一个路由,Postmark 可以将其 webhooks 发布到: /api/webhooks/postmark

填写您的 webhook URL: https://<your-domain.com>/api/webhooks/postmark
选择 Postmark 应该发送给您的活动,并保存 webhook。
您已准备好接收 Postmark 的 webhook 通知!

您可以将 /api/webhooks/postmark 端点更改为您喜欢的任何内容。
您可以通过更改 config/postmark-webooks.php 文件中的 path 键来实现此操作。

您的 webhook 保护

此包通过仅允许来自 Postmark 使用 IP 范围 的请求来自动保护您的 webhook。

用法

Postmark 可以通过发布 webhook 发送几种事件类型。
您可以在 Postmark 文档中找到 完整的 webhook 列表

所有 webhook 请求都将记录在 postmark_webhook_logs 表中。
该表有一个 payload 列,其中保存了传入 webhook 的整个有效负载。
Postmark 分配给原始消息的 ID 将保存在 message_id 列中,
事件类型将存储在 record_type 列中,以及电子邮件地址也存储在 email 列中。

注意,事件类型将被转换为 snake_case
例如,SpamComplaint 将保存为 spam_complaint

事件

每当 webhook 调用到来时,此包将触发一个 PostmarkWebhookCalled 事件。
您可以在 EventServiceProvider 中注册事件监听器

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    PostmarkWebhookCalled::class => [
        YourListener::class,
    ],
];

监听器示例

<?php

namespace App\Listeners;

use Mvdnbrk\PostmarkWebhooks\Events\PostmarkWebhookCalled;

class YourListener
{
    /**
     * Handle the event.
     *
     * @param  \Mvdnbrk\PostmarkWebhooks\Events\PostmarkWebhookCalled  $event
     * @return void
     */
    public function handle(PostmarkWebhookCalled $event)
    {
        // Do your work here.

        // You can access the payload here with: $event->payload.
        // The email address, message ID and record type are also available:
        // $event->email
        // $event->messageId
        // $event->recordType
    }
}

您还可以为特定类型的事件注册事件监听器

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'webhook.postmark: spam_complaint' => [
        YourSpamComplaintListener::class,
    ],
];

可用事件:openbounceclickdeliveryspam_complaint

高级配置

您可以选择使用以下方式发布配置文件

php artisan vendor:publish --provider="Mvdnbrk\PostmarkWebhooks\PostmarkWebhooksServiceProvider" --tag="config"

在配置文件中,您可以更改用于保存日志记录到数据库的表名或 Eloquent 模型。

如果您想使用自己的模型将日志保存到数据库中,您应该扩展 Mvdnbrk\PostmarkWebhooks\PostmarkWebhook 类。

您还可以排除一个或多个事件类型以记录到数据库中。
将您想要排除的事件放置在except键下

'log' => [
    ...
    'except' => [
        'open',
        ...
    ],
],

可以将此包触发的事件映射到您自己的事件类

'events' => [
    'spam_complaint' => App\Events\SpamComplaint,
    ...
],

变更日志

有关最近变更的更多信息,请参阅变更日志

测试

$ composer test

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

致谢

Spatie的Laravel Stripe Webooks启发。

许可协议

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