renatoxm / laravel-postmark-webhooks
在 Laravel 应用程序中处理 Postmark webhooks。
Requires
- php: ^8.0
- illuminate/support: ^10.0 || ^11.0
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.15
- orchestra/testbench: ^7.0 || ^8.17 || ^9.0
- phpunit/phpunit: ^9.4 || ^10.1
README
当发生事件时,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, ], ];
可用事件: open
,bounce
,click
,delivery
,spam_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许可证。有关更多信息,请参阅许可证文件。