renatoxm/laravel-postmark-webhooks

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

v2.0.3 2024-04-10 20:18 UTC

README

Latest Version on Packagist Software License Tests StyleCI Total Downloads

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

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

安装

您可以通过 composer 安装此包

composer require RenatoXM/laravel-postmark-webhooks

发布配置和迁移文件

sail artisan vendor:publish --provider="RenatoXM\PostmarkWebhooks\PostmarkWebhooksServiceProvider"

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

php artisan migrate

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

使用 Postmark 设置 webhook

访问您的 服务器 页面。选择您要设置 webhook 的服务器。
转到 设置 > webhooks > 添加 webhook

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

填写您的 webhook URL: https://<your-domain.com>/api/webhooks/postmark
选择 Postmark 应发送给您的活动并保存 webhook。
您现在可以接收来自 Postmark 的 webhook 通知了!

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

您的 webhook 保护

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

禁用 webhook 保护

如果您需要使用 ngrok 在开发中使用 ngrok 测试 Postmark webhook,您可以将 webhook 完全禁用。为此,在您的 .env 文件中添加 POSTMARK_WEBHOOKS_MIDDLEWARE_DISABLE=true

POSTMARK_WEBHOOKS_MIDDLEWARE_DISABLE=true

警告:不要忘记在生产中再次启用它!

使用

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 RenatoXM\PostmarkWebhooks\Events\PostmarkWebhookCalled;

class YourListener
{
    /**
     * Handle the event.
     *
     * @param  \RenatoXM\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="RenatoXM\PostmarkWebhooks\PostmarkWebhooksServiceProvider" --tag="config"

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

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

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

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

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

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

变更日志

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

测试

$ composer test

贡献

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

安全漏洞

请查阅我们关于如何报告安全漏洞的安全策略

致谢

灵感来源于Spatie的Laravel Stripe Webooks

许可证

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