bridit/laravel-sns

2.2.0 2022-01-21 23:01 UTC

This package is auto-updated.

Last update: 2024-09-28 22:11:23 UTC


README

Laravel SNS 允许您广播和监听 SNS 事件。它通过在 BroadcastManager 上实现驱动程序,使得使用 SNS 与使用 Laravel 事件一样简单。它还实现了使用 rennokki/laravel-sns-events 包的控制器,该控制器旨在正确监听 SNS HTTP(s) Webhook 并触发您可以监听的事件。

如果您不熟悉 Laravel 事件与监听器,请确保您已经阅读了laravel.com上的文档部分,因为此包需要您理解这个概念。

同时,请确保查阅 rennokki/laravel-sns-events文档

安装

$ composer require bridit/laravel-sns

配置

您需要一个 AWS 账户,并确保您已按照官方文档中的步骤正确地在 Laravel 上配置。

然后,您需要在 broadcasting.php 上注册 SNS 连接,您可以在 broadcasting.php 的连接部分添加上述代码。

...

'sns' => [
  'driver' => 'sns',
  'route' => '/aws/sns',
  'key' => env('AWS_ACCESS_KEY_ID'), // optional
  'secret' => env('AWS_SECRET_ACCESS_KEY'), // optional
  'region' => env('SNS_REGION'), // optional
  'arn_prefix' => 'arn:aws:sns:' .
    env('AWS_SNS_REGION', env('AWS_REGION', 'us-east-1')) . ':' . env('AWS_ACCOUNT_ID'),
],

我们使用环境变量来构建 arn_prefix,但您也可以指定一个简单的字符串。您可以在 AWS 平台上找到您的 arn,在您拥有的任何主题上。

此包会自动为您注册必要的路由,在 web 中间件中,使用 broadcasting.php 的 'route' 属性。您不需要自己操作。

SNS 通过 POST 发送数据,因此您需要将您的路由列入 VerifyCsrfToken.php 的白名单。

protected $except = [
  ...
  '/aws/sns', // Or other route that you set on broadcasting.php
];

如果您想将其设置为默认的广播驱动程序,请在 .env 中设置它。

BROADCAST_DRIVER=sns

现在您可以开始了。只需创建一个主题,并为 HTTP(s) 协议设置一个订阅,该订阅指向您刚刚注册的路由。点击 AWS 控制台中的确认按钮。不久之后,如果您正确实现了路由,您将看到您的端点已注册。

用法

要发送 SNS 事件,只需使用默认的 Laravel 调度器,如下所示:

event(new OrderShipped($order));

此包包含两个事件类

  • Rennokki\LaravelSnsEvents\Events\SnsNotification - 在每个 SNS 消息上触发
  • Rennokki\LaravelSnsEvents\Events\SnsSubscriptionConfirmation - 当订阅被确认时触发

要处理事件,您应该在 app/Providers/EventServiceProvider.php 中添加这些事件

use Rennokki\LaravelSnsEvents\Events\SnsNotification;
use Rennokki\LaravelSnsEvents\Events\SnsSubscriptionConfirmation;

...

protected $listen = [
    ...
    SnsNotification::class => [
        // add your listeners here for SNS events
    ],
    SnsSubscriptionConfirmation::class => [
        // add your listeners here in case you want to listen to subscription confirmation
    ],
]

您可以从监听器中这样访问 SNS 消息:

class MyListener
{
    ...

    public function handle($event)
    {
        // $event->payload is an array
    }
}

许可证

MIT 许可证 (MIT)。