适用于 PHP 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用AWS SDK for PHP版本 3 在 Amazon SNS 中发送消息

您可以使用 Amazon Simple Notification Service (Amazon SNS) 将文本消息或 SMS 消息发送到支持 SMS 的设备上。您可以直接向电话号码发送消息,也可以使用多个电话号码订阅主题,然后通过向该主题发送消息来一次向这些电话号码发送消息。

使用 Amazon SNS 指定发送 SMS 消息的首选项,例如如何优化消息传输(在成本或可靠传输方面)、您的每月支出限额、如何记录消息传输以及是否要订阅每日 SMS 使用率报告。这些首选项通过检索得到,并设置为 Amazon SNS 的 SMS 属性。

在发送 SMS 消息时,请使用 E.164 格式指定电话号码。E.164 是国际电信的标准电话号码结构。遵循此格式的电话号码最多可包含 15 位,并以加号 (+) 和国家/地区代码作为前缀。例如,E.164 格式的美国电话号码将显示为 +1001XXX5550100。

以下示例演示如何:

  • 使用 GetSMSAttributes 检索从您账户发送 SMS 消息的默认设置。

  • 使用 SetSMSAttributes 更新从您账户发送 SMS 消息的默认设置。

  • 使用 CheckIfPhoneNumberISOptedOut 确定指定电话所有者是否已选择不接收来自您账户的 SMS 消息。

  • 使用 ListPhoneNumberOptedOut 列出其所有者已选择不接收来自您账户的 SMS 消息的电话号码。

  • 使用 Publish 直接将文本消息(SMS 消息)发送到电话号码。

有关使用 Amazon SNS 的更多信息,请参阅将手机号码作为订阅者,将 Amazon SNS 用于用户通知(发送 SMS)

GitHub 上的此处提供了AWS SDK for PHP版本 3 的所有示例代码。

凭证

在运行示例代码之前,您需要配置 AWS 凭证,如适用于 PHP 的 AWS 开发工具包版本 3 的凭证中所述。然后导入AWS SDK for PHP,如适用于 PHP 的 AWS 开发工具包版本 3 的基本使用模式中所述。

获取 SMS 属性

要检索 SMS 消息的默认设置,请使用 GetSMSAttributes 操作。

此示例获取 DefaultSMSType 属性。此属性控制 SMS 消息是作为 Promotional 发送(这将优化消息传送以尽可能降低成本)还是作为 Transactional 发送(这将优化消息传送以实现最高的可靠性)。

导入

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException;

示例代码

$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); try { $result = $SnSclient->getSMSAttributes([ 'attributes' => ['DefaultSMSType'], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }

设置 SMS 属性

要更新 SMS 消息的默认设置,请使用 SetSMSAttributes 操作。

此示例将 DefaultSMSType 属性设置为 Transactional,这会优化消息传送以实现最高的可靠性。

导入

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException;

示例代码

$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); try { $result = $SnSclient->SetSMSAttributes([ 'attributes' => [ 'DefaultSMSType' => 'Transactional', ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }

检查电话号码是否已选择不接收消息

要确定指定电话所有者是否已选择不接收来自您账户的 SMS 消息,请使用 CheckIfPhoneNumberIsOptedOut 操作。

在此示例中,电话号码为 E.164 格式,这是国际电信的标准。

导入

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException;

示例代码

$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $phone = '+1XXX5550100'; try { $result = $SnSclient->checkIfPhoneNumberIsOptedOut([ 'phoneNumber' => $phone, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }

列出选择不接收消息的电话号码

要检索其所有者已选择不接收来自您账户的 SMS 消息的电话号码列表,请使用 ListPhoneNumbersOptedOut 操作。

导入

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException;

示例代码

$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); try { $result = $SnSclient->listPhoneNumbersOptedOut([ ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }

发布到文本消息(SMS 消息)

要将文本消息(SMS 消息)直接传送到电话号码,请使用 Publish 操作。

在此示例中,电话号码为 E.164 格式,这是国际电信的标准。

SMS 消息最多可以包含 140 个字节。单个 SMS 发布操作的大小限制为 1600 字节。

有关发送 SMS 消息的更多详细信息,请参阅发送 SMS 消息

导入

require 'vendor/autoload.php'; use Aws\Sns\SnsClient; use Aws\Exception\AwsException;

示例代码

$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $message = 'This message is sent from a Amazon SNS code sample.'; $phone = '+1XXX5550100'; try { $result = $SnSclient->publish([ 'Message' => $message, 'PhoneNumber' => $phone, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }