簡體   English   中英

如何在 AWS SNS 上設置發件人號碼(使用 PHP v3 SDK)

[英]How to set the from number on AWS SNS (Using PHP v3 SDK)

設置

我已經下載了AWS V3 SDK 的 aws.zip 文件 PHP並將其解壓縮到我的項目文件夾中並將其自動加載器連接到我的自動加載器中。 我還完成了創建 AWS 賬戶的所有步驟,以及設置 SNS,包括獲取要使用的電話號碼。 所有示例工作都在完整性檢查中顯示。

有一個你應該知道的黑暗角落。 您需要在~/.aws/目錄中創建一個credentials文件。 如果您在 php-fpm 上下文中使用它,則該主目錄可能是您的/var/www/目錄,因此您應該將憑證文件放在/var/www/.aws/下。

可以在此處找到有關配置文件的更多信息... AWS 命令行界面 - 配置和憑證文件設置

完整性檢查

按照AWS SNS 文檔中的示例 - 發布到文本消息 (SMS 消息)

測試-AWS-SNS.php

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 = '+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 = \Aws\Sns\SnsClient::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 Aws\Sns\SnsClient; 
use Aws\Exception\AwsException;

$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####是我的電話號碼或我要發送短信的人的電話號碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM