bridit / laravel-sns
Laravel 广播 SNS
Requires
- php: ^7.1|^8.0|^8.1
- aws/aws-sdk-php-laravel: ^3.0
- illuminate/broadcasting: ^5.8|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.8|^6.0|^7.0|^8.0|^9.0
- rennokki/laravel-sns-events: ^7.0
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)。