如何在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####是我的电话号码或我想要发送短信的人的电话号码。


以上是如何在AWSSNS上设置发件人编号(使用PHPv3SDK)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>