本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在使用 AWS SDK for PHP 版本 3 的 Amazon SNS 中发送 SMS 消息
您可以使用 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 消息的默认设置。
-
了解给定的电话号码所有者是否已选择不使用 CheckIfPhoneNumber IS 从您的账户接收短信OptedOut。
-
列出所有者选择不接收来自您账户的 SMS 消息的电话号码ListPhoneNumberOptedOut。
-
使用 Publish 直接将文本消息(SMS 消息)发送到电话号码。
有关使用 Amazon SNS 的更多信息,请参阅将手机号码作为订阅用户,将 Amazon SNS 用于用户通知(发送 SMS)。
的所有示例代码都可以在此AWS SDK for PHP处找到 GitHub
凭证
运行示例代码之前,请配置您的 AWS 凭证,如 凭证 中所述。然后导入 AWS SDK for PHP,如 基本用法 中所述。
获取 SMS 属性
要检索 SMS 消息的默认设置,请使用 GetSMSAttributes 操作。
此示例获取 DefaultSMSType
属性。此属性控制 SMS 消息是作为 Promotional
发送(这将优化消息传送以尽可能降低成本)还是作为 Transactional
发送(这将优化消息传送以实现最高的可靠性)。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
示例代码
$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\Exception\AwsException; use Aws\Sns\SnsClient;
示例代码
$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\Exception\AwsException; use Aws\Sns\SnsClient;
示例代码
$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()); }
列出选择不接收消息的电话号码
要检索所有者选择不从您的账户接收短信的电话号码列表,请使用该ListPhoneNumbersOptedOut操作。
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
示例代码
$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\Exception\AwsException; use Aws\Sns\SnsClient;
示例代码
$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()); }