oncology-support/amazon-sms-helper-bundle

Symfony Bundle,简化使用Amazon SNS发送短信

0.2 2024-07-15 17:35 UTC

This package is auto-updated.

Last update: 2024-09-15 18:04:24 UTC


README

AmazonSMSHelperBundle

文档

许可证

AmazonSMSHelperBundle 在MIT许可证下发布。有关详细信息,请参阅捆绑的LICENSE文件。

安装

使用Symfony Flex的应用程序

打开命令行,进入您的项目目录并执行以下命令

composer require oncology-support/amazon-sms-helper-bundle

不使用Symfony Flex的应用程序

步骤1:下载Bundle

打开命令行,进入您的项目目录并执行以下命令以下载此捆绑包的最新稳定版本

composer require oncology-support/amazon-sms-helper-bundle

步骤2:启用Bundle

然后,通过将其添加到项目中config/bundles.php文件中注册的捆绑包列表中,来启用捆绑包

// config/bundles.php

return [
    // ...
    OncologySupport\AmazonSMSHelper\OncologySupportAmazonSMSHelperBundle::class => ['all' => true],
];

步骤3:配置

要使用此捆绑包,您需要一个启用了SNS服务的AWS账户。

启用SNS需要您请求一个发起号码。然后,您将进入从沙盒中移除该号码的过程,以便将短信发送到任何手机。

SNS启用后,您需要配置IAM以获取AWS账户的access_key_idsecret_access_key。以下是如何操作的示例:从IAM控制台创建了一个具有编程访问权限的新用户。然后,我为用户添加了一个新的策略,其json策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "OncologySupport0",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.xxx",
                        "yyy.yyy.yyy.yyy"
                    ]
                }
            }
        }
    ]
}

此策略允许您创建的SNS用户发送短信。您需要将xxx.xxx.xxx.xxxyyy.yyy.yyy.yyy替换为发送短信消息的服务器IP地址。如果您想允许用户从任何IP地址发送短信,则可以省略“条件”块,但出于安全原因不建议这样做。您还可以在“操作”部分进行更宽松的处理,如果想让用户执行发送短信以外的操作。以下是一个更宽松的示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:*",
            "Resource": "*"
        }
    ]
}

无论如何,您都需要获取您创建的用户access_key_idsecret_access_key,并将default_region设置为创建SNS主题的区域(例如,us-east-1)。您可以将这些值存储在.env文件中,如下所示

# AWS credentials
AMAZON_SNS_ACCESS_ID=your_aws_access_key_id
AMAZON_SNS_SECRET=your_aws_secret_access_key
AMAZON_SNS_DEFAULT_REGION=your_aws_default_region

更好的是,您可以将这些值存储在.env.local文件中,该文件不会被提交到您的存储库。

步骤4:使用它!

当您准备好发送消息时,可以使用AmazonSMSHelper服务如下所示

<?php
use Aws\Result
use OncologySupport\AmazonSMSHelper\Service\AmazonSMSHelper;

class ExampleSmsService
{
    public function __construct(private readonly $smsHelper)
    {
    }

    public function sendSMS(string $message, string $phoneNumber): Result
    {
        // cellPhoneNumber must be in the format +1XXXXXXXXXX (for US numbers)
        $cellPhoneNumber = '+1' . preg_replace("/[^0-9]+/", "", $phoneNumber);
        
        return $this->smsHelper($message, $cellPhoneNumber);
    }
}

享受!