使用 Amazon SNS 发送 SMS 并获取投递状态

使用 amazon sns 发送 sms 并获取投递状态

本文档介绍了如何使用 Amazon SNS 服务通过 PHP SDK 发送 SMS 消息,并详细阐述了如何通过 CloudWatch API 获取 SMS 消息的投递状态,以便开发者能够监控消息发送结果并及时处理异常。

Amazon Simple Notification Service (SNS) 是一种快速、灵活、完全托管的推送消息服务。您可以使用 SNS 发送消息到移动设备、电子邮件地址、其他 AWS 服务等。本教程将重点介绍如何使用 PHP SDK 发送 SMS 消息,并介绍如何获取消息的投递状态。

发送 SMS 消息

首先,确保您已经安装了 AWS PHP SDK。您可以使用 Composer 进行安装:

composer require aws/aws-sdk-php

接下来,使用以下代码发送 SMS 消息:

 'eu-west-1', // 替换为您的 AWS 区域    'version' => 'latest',    'credentials' => [        'key'    => 'YOUR_AWS_ACCESS_KEY_ID', // 替换为您的 AWS 访问密钥 ID        'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY', // 替换为您的 AWS 秘密访问密钥    ]]);try {    $result = $sdk->publish([        'Message' => 'This is a test message.',        'PhoneNumber' => '+1234567890', // 替换为目标手机号码,包含国家码        'MessageAttributes' => [            'AWS.SNS.SMS.SenderID' => [                'DataType' => 'String',                'StringValue' => 'MySenderID' // 替换为您希望显示的发送者 ID (可选)            ]        ]    ]);    print_r($result);} catch (AwsExceptionAwsException $e) {    // 输出错误信息    echo 'Error: ' . $e->getMessage();}?>

代码解释:

require ‘vendor/autoload.php’;: 引入 Composer 自动加载器,加载 AWS PHP SDK。new AwsSnsSnsClient([…]): 创建 SNS 客户端实例,需要配置 AWS 区域、版本和凭证。$sdk->publish([…]): 调用 publish 方法发送 SMS 消息。Message: 消息内容。PhoneNumber: 目标手机号码,必须包含国家码。MessageAttributes: 消息属性,可以设置发送者 ID 等。try…catch: 捕获可能发生的 AWS 异常,并输出错误信息。

注意事项:

请确保您已配置正确的 AWS 区域和凭证。目标手机号码必须包含国家码。发送者 ID 是可选的,但某些国家/地区可能要求必须设置。您需要在 AWS 管理控制台中为您的 AWS 账户启用 SMS 发送功能。

获取投递状态

Amazon SNS 本身不直接提供回调 URL 用于接收投递状态。目前,获取 SMS 消息投递状态的主要方法是使用 Amazon CloudWatch Logs。SNS 会将 SMS 消息的投递日志发送到 CloudWatch Logs,您可以通过 CloudWatch API 查询这些日志。

步骤:

配置 SNS 将 SMS 消息日志发送到 CloudWatch Logs。 您需要在 AWS 管理控制台中配置 SNS,使其将 SMS 消息的日志发送到指定的 CloudWatch Logs 日志组。

使用 CloudWatch API 查询日志。 您可以使用 AWS PHP SDK 中的 CloudWatch Logs 客户端查询日志。

以下是一个使用 CloudWatch Logs API 获取日志事件的示例代码:

 'eu-west-1', // 替换为您的 AWS 区域    'version' => 'latest',    'credentials' => [        'key'    => 'YOUR_AWS_ACCESS_KEY_ID', // 替换为您的 AWS 访问密钥 ID        'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY', // 替换为您的 AWS 秘密访问密钥    ]]);$logGroupName = '/aws/sns/sms'; // 替换为您的 CloudWatch Logs 日志组名称$logStreamName = 'YourLogStreamName'; // 可选,如果知道具体的日志流名称,可以指定try {    $result = $client->getLogEvents([        'logGroupName' => $logGroupName,        //'logStreamName' => $logStreamName, // 可选        'startTime' => strtotime('-1 hour') * 1000, // 查询过去一小时内的日志        'endTime' => time() * 1000,        'limit' => 100, // 限制返回的日志事件数量        'startFromHead' => true, // 从日志流的开头开始读取    ]);    foreach ($result['events'] as $event) {        echo $event['message'] . "n";        // 在这里解析日志消息,提取投递状态信息    }} catch (AwsExceptionAwsException $e) {    echo 'Error: ' . $e->getMessage();}?>

代码解释:

new AwsCloudWatchLogsCloudWatchLogsClient([…]): 创建 CloudWatch Logs 客户端实例,需要配置 AWS 区域、版本和凭证。$client->getLogEvents([…]): 调用 getLogEvents 方法查询日志事件。logGroupName: CloudWatch Logs 日志组名称。logStreamName: 可选,如果知道具体的日志流名称,可以指定。startTime: 查询的起始时间,Unix 时间戳(毫秒)。endTime: 查询的结束时间,Unix 时间戳(毫秒)。limit: 限制返回的日志事件数量。startFromHead: 从日志流的开头开始读取。foreach ($result[‘events’] as $event): 遍历返回的日志事件,并解析日志消息,提取投递状态信息。

注意事项:

请确保您已配置正确的 AWS 区域和凭证。您需要根据实际情况修改 logGroupName 和 logStreamName。日志消息的格式可能因 SNS 配置而异,您需要根据实际情况解析日志消息。可以使用更复杂的过滤条件,例如使用 filterPattern 参数,来更精确地查询日志。

总结:

虽然 Amazon SNS 不直接提供回调 URL 用于接收投递状态,但您可以使用 CloudWatch Logs API 查询 SMS 消息的投递日志,从而获取投递状态信息。 这种方法需要您配置 SNS 将日志发送到 CloudWatch Logs,并编写代码来查询和解析日志。 通过这种方式,您可以有效地监控 SMS 消息的发送结果并及时处理异常。

以上就是使用 Amazon SNS 发送 SMS 并获取投递状态的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1325219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP命令怎么执行多线程操作_PHP多进程与pcntl扩展使用
上一篇 2025年12月12日 11:48:40
在外部PHP页面中集成WordPress页脚:方法与注意事项
下一篇 2025年12月12日 11:48:45

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    100
  • 获取日期中的周数:CodeIgniter 教程

    本教程旨在帮助开发者在 CodeIgniter 框架中,从日期字符串中准确提取周数。我们将使用 PHP 内置的 DateTime 类,并提供详细的代码示例和注意事项,确保您能够轻松地在项目中实现此功能。 使用 DateTime 类获取周数 PHP 的 DateTime 类提供了一种便捷的方式来处理日…

    2026年5月10日
    100
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • php常量怎么用_PHP常量(define/const)定义与使用方法

    PHP中可通过define函数和const关键字定义常量,用于存储不可变值。define适用于全局作用域,支持动态名称和条件定义,如define(‘SITE_NAME’, ‘MyWebsite’);const在编译时生效,语法简洁但限制多,只能在类或全…

    2026年5月10日
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • PHP动态生成表单输入与POST数据获取实践指南

    本教程详细阐述了如何在php中根据动态数据源(如数据库值)生成多个表单输入框,并演示了如何通过post方法准确无误地获取这些动态生成的输入值。文章强调了正确的输入框命名策略,避免了常见的命名误区,并提供了完整的代码示例,确保开发者能够高效处理动态表单数据。 动态生成表单输入 在Web开发中,我们经常…

    2026年5月10日
    000
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    100
  • html5怎么画实线_HTML5用CSS border-style:solid画元素实线边框【绘制】

    可通过CSS的border-style属性设为solid添加实线边框:一、内联样式用border:2px solid #000;二、内部样式表统一设置如div{border:1px solid #333};三、外部CSS文件定义.my-box{border:3px solid red}并引入;四、单…

    2026年5月10日
    200
  • JavaScript函数中插入加载动画(Spinner)的正确方法

    本文旨在解决在JavaScript函数中插入加载动画(Spinner)时遇到的异步问题。通过引入async/await和Promise.all,确保在数据处理完成前后正确显示和隐藏加载动画,提升用户体验。我们将提供两种实现方案,并详细解释其原理和优势。 在Web开发中,当执行耗时操作时,显示加载动画…

    2026年5月10日
    100
  • JS如何实现迭代器?迭代器协议

    JavaScript中实现迭代器需遵循可迭代协议和迭代器协议,通过定义[Symbol.iterator]方法返回具备next()方法的迭代器对象,从而支持for…of和展开运算符;该机制统一了数据结构的遍历接口,实现惰性求值,适用于自定义对象、树、图及无限序列等复杂场景,提升代码通用性与…

    2026年5月10日
    100
  • 使用 Pydantic v2 实现条件性必填字段

    本文介绍了如何在 Pydantic v2 模型中实现条件性必填字段。通过自定义验证器,可以根据模型中其他字段的值来动态地控制某些字段是否为必填项,从而满足 API 交互中数据验证的复杂需求。本文提供了一个具体的示例,展示了如何确保模型中至少有一个字段被赋值。 在 Pydantic v2 中,虽然没有…

    2026年5月10日
    000
  • 如何讲html和css_讲解HTML与CSS结合使用基础【基础】

    需将HTML与CSS结合使用以实现网页结构与样式的分离:HTML定义标题、段落等语义结构,CSS控制颜色、字体等外观;可通过内联样式、内部样式表或外部CSS文件引入样式,并利用类选择器和ID选择器精准应用。 如果您希望网页不仅展示内容,还能具备基本的样式和结构布局,则需要将HTML与CSS结合使用。…

    2026年5月10日
    100
  • React组件中动态属性值的管理与同步:利用状态实现受控组件

    本教程旨在解决react组件中动态属性值同步使用的问题。我们将探讨如何利用react的`usestate` hook来管理组件内部状态,从而实现一个属性的值动态地影响另一个属性,并构建出可预测、易于维护的受控组件。文章将通过具体代码示例,详细阐述从初始化状态到处理状态更新的完整过程,并强调受控组件在…

    2026年5月10日
    000
  • PHP多维数组到复杂XML结构的SOAP序列化实践

    本文旨在解决php多维数组向复杂soap xml结构序列化时遇到的“无法序列化结果”问题。通过深入理解soap xml的结构要求,包括命名空间和类型属性,文章将指导您如何构建符合特定xml schema的php关联数组。我们将利用`spatie/array-to-xml`库,详细演示其安装与使用方法…

    2026年5月10日
    100
  • 高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行

    高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行高通预热 2023 骁龙峰会:以AI为主题,10 月 25-26 日举行

    【环球网科技综合报道】10月17日消息,高通今日对 2023 骁龙峰会进行了预热,本次大会将以 %ign%ignore_a_1%re_a_1% 为主题,届时骁龙 8 gen 3 处理器也很大可能在本届峰会亮相。 在临近活动召开之日,相关业内人士也透露了高通骁龙8Gen3跑分及规格。据悉,高通骁龙8 …

    2026年5月10日 用户投稿
    000
  • 使用 Ajax 和 FormData 实现文件上传及文本数据提交的完整教程

    本文旨在解决在使用 Ajax 和 FormData 进行文件上传时,遇到的 $_POST 和 $_FILES 为空的问题。通过详细的代码示例和解释,我们将展示如何正确地构建 FormData 对象,并通过 Ajax 将文件和文本数据发送到服务器端,同时避免常见的错误配置,确保数据能够成功地被 PHP…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信