如何在AWSSNS上设置发件人编号(使用PHPv3SDK)
设置
我已经下载了适用于 PHP 的 AWS V3 SDK的aws.zip 文件,并将其解压缩到我的项目文件夹中,并将它的自动加载器连接到我的自动加载器中。我还完成了创建 AWS 帐户的所有步骤,以及设置 SNS,包括获取要使用的电话号码。所有示例工作都显示在健全性检查中。
有一个你应该知道的黑暗角落。您需要credentials在您的~/.aws/目录中创建一个文件。如果您在 php-fpm 上下文中使用它,则该主目录可能是您的/var/www/目录,因此您应该将凭据文件放在/var/www/.aws/.
可以在此处找到有关配置文件的更多信息... AWS 命令行界面 - 配置和凭证文件设置。
完整性检查
遵循AWS SNS 文档中的示例- 发布到文本消息(SMS 消息)。
测试-AWS-SNS.php
require 'vendor/autoload.php';
use AwsSnsSnsClient;
use AwsExceptionAwsException;
$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 = '+1AAALLL####';
try {
$result = $SnSclient->publish([
'Message' => $message,
'PhoneNumber' => $phone,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
(注:+1AAALLL####实际上指向我的手机号码,但我显然不会把它放在这里。)
问题
问题是没有关于如何从我从 AWS 的 SNS 长代码列表中拥有的号码之一发送文本消息的文档。它总是来自列表中的第一个电话号码,我找不到有关如何将号码更改为另一个号码的任何文档。这里的一些帮助会很棒。
先前的研究
显然,我已经翻遍了整个文档并搜索了 Stack Overflow。
这个非常接近,因为它设置了一个 SenderID。他们的文档
提到如何将其作为上面发件人 ID 旁边的可选数字 9
但我知道这是可能的,因为他们在2020 年 10 月 23 日添加了该功能- Amazon SNS 现在支持在发送 SMS 时选择原始号码消息——他们只是没有放置任何代码示例。
帮助我欧比旺克诺比,你是我唯一的希望。
回答
因此,在在上面的文本框中输入内容时,经过多次环顾四周并回避问题后,解决方案是一起使用几个不同的答案。之前关于设置 SenderID 的研究中提到的 Stack Overflow 线程对于至少将原始信息输入 AWS SDK 非常有帮助。
$params = array(
'credentials' => array(
'key' => 'iam_key',
'secret' => 'iam_secret',
),
'region' => 'ap-south-1', // < your aws from SNS Topic region
'version' => 'latest',
'http' => ['verify'=>false]
);
$sns = AwsSnsSnsClient::factory($params);
$msgattributes = [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'Klassroom',
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional',
]
];
$payload = array(
'Message' => "HK test",
"PhoneNumber" => "1234567890",
'MessageAttributes' => $msgattributes
);
$result = $sns->publish($payload);
如果您滚动到SMS Publish To Phone文档,您将看到上面使用的字符串AWS.SNS.SMS.SenderID,下一项是AWS.MM.SMS.OriginationNumber…… 那么这可能会起作用吗?
它正在工作!它正在工作!
require 'vendor/autoload.php';
use AwsSnsSnsClient;
use AwsExceptionAwsException;
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$msgAttributes = [
'AWS.MM.SMS.OriginationNumber' => [
'DataType' => 'String',
'StringValue' => '+1XXXYYYZZZZ',
]
];
$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1AAALLL####';
try {
$result = $SnSclient->publish([
'Message' => $message,
'PhoneNumber' => $phone,
'MessageAttributes' => $msgAttributes
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
注意:显然,+1XXXYYYZZZZ是我已经建立的长码列表中的一个号码,就像以前一样,+1AAALLL####是我的电话号码或我想要发送短信的人的电话号码。