citricguy/postmark-webhooks-laravel

允许您的Laravel项目监听来自PostmarkApp的webhook。

v1.1.1 2024-04-05 22:02 UTC

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)。有关更多信息,请参阅许可文件