citricguy / postmark-webhooks-laravel
允许您的Laravel项目监听来自PostmarkApp的webhook。
Requires
- php: ^8.2|^8.3
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^1.20|^2.0
This package is auto-updated.
Last update: 2024-09-05 22:57:41 UTC
README
您正在寻找一个易于实现的包,该包可以接受来自PostmarkApp.com的webhook。此包正是为此而设计的。
此无额外功能的解决方案提供了一个简单的API,用于接受来自PostmarkApp.com的webhook,然后触发一个您可以在应用程序中监听的事件。
没有额外的迁移,没有模型,只有一个您可以监听并对其进行操作的事件。
它是可配置的,易于使用,并利用中间件确保webhook来自PostmarkApp.com。
因为我们是从零开始,并试图尽可能地保持其可维护性和可靠性,所以我们使用最新的Laravel和PHP版本。
要求
- Laravel 10.x|11.x
- PHP 8.2|8.3
- 有效的PostmarkApp.com账户。
安装
您可以使用composer安装此包
composer require citricguy/laravel-postmark-webhooks
配置Postmark账户中的webhook
在Postmark账户的服务器页面中,选择您希望接收webhook的服务器和流。
一旦到达那里,请转到“设置”->“webhook”->“添加webhook”。
添加您的webhook URL,默认为 https://<your-domain.com>/api/postmark/webhook
(这是可配置的)。
选择Postmark应发送到您的webhook的事件,然后保存。
事件配置
监听 PostmarkWebhookReceived
事件是我们与webhook交互的主要方式。
如果您之前没有使用过事件或监听器,请参阅有关 事件 的Laravel文档。
简而言之,我们将创建一个监听器,在 EventServiceProvider
中注册它,然后在监听器中处理事件。
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ PostmarkWebhookCalled::class => [ ListenerClasses::class, // Create with `php artisan make:listener <listener name>` ], ];
以下是一个示例监听器
<?php namespace App\Listeners; use Citricguy\PostmarkWebhooks\Events\PostmarkWebhookReceived; class ProcessPostmarkWebhooks { /** * Create the event listener. */ public function __construct() { // } /** * Handle the event. */ public function handle(PostmarkWebhookReceived $event): void { // Process Webhook Data Here. // Access the PostmarkApp payload using: $event->payload. // The email address, record type and message ID are also made available: // $event->email; // $event->recordType; // $event->messageId; } }
高级配置
虽然不是必需的,但如果您想要配置webhook的路径、基本认证或禁用认证中间件,可以发布配置文件。
php artisan vendor:publish --provider="Citricguy\PostmarkWebhooks\PostmarkWebhooksServiceProvider" --tag="config"
您可以在该配置中更改您的设置,或者如果愿意,可以使用.env文件。
以下.env值可用
POSTMARK_WEBHOOK_PATH=/api/postmark/webhook POSTMARK_WEBHOOK_FIREWALL_ENABLED=true POSTMARK_WEBHOOK_AUTH_USER= POSTMARK_WEBHOOK_AUTH_PASS=
关于防火墙
默认情况下,除非您处于“生产”环境,否则防火墙是禁用的。(即 APP_ENV=production
)。
如果配置了,中间件将执行“基本认证”。要使用此功能,您需要在PostmarkApp.com上配置您的webhook以包含基本认证凭据。
最后,您需要设置您的.env文件
POSTMARK_WEBHOOK_AUTH_USER=<username matching webhook configuration> POSTMARK_WEBHOOK_AUTH_PASS=<password matching webhook configuration>
中间件还将确认webhook的来源是PostmarkApp.com。这是通过检查请求的IP地址与PostmarkApp.com提供的IP地址列表进行对比来实现的。
要禁用防火墙,请在.env文件中将 POSTMARK_WEBHOOK_FIREWALL_ENABLED=false
设置,或者简单地处于除生产环境之外的环境。
测试
$ composer test
鸣谢
此项目受到了 Laravel Postmark Webooks 的启发,是一个更简单的替代方案,没有添加任何额外的模型或迁移。它还允许与PostmarkApp进行基本认证的webhook集成,同时努力保持与Laravel和PHP当前版本的同步。
许可协议
MIT许可(MIT)。有关更多信息,请参阅许可文件。