Отправка SMS с помощью услуг Amazon AWS PHP
У меня возникли проблемы с копированием документации для Amazon AWS PHP-sdk.
В принципе, мне просто нужно отправить стандартное текстовое сообщение на номер. Я знаю, что это возможно, потому что amazon позволяет отправлять сообщения через консоль напрямую через этот экран:
![SMS-сообщения Amazon Console]()
В нем говорится об использовании метода "publish", но, просматривая эту документацию, на самом деле не было ответов. # Опубликовать ссылку для документации
Любая помощь или руководство приветствуются. В настоящее время я ищу решение, которое использует V2 для sdk.
Спасибо заранее.
Ответы
Ответ 1
Нет, где есть документ, показывающий его для использования с PHP. Читая Java и С# SDK, я написал версию PHP, которая работает.
Обновлено 20 декабря 18
Аргументы, переданные методу publish
теперь имеют новый формат. Исправлена!
Как отправить SMS через AWS с помощью PHP
Сначала установите aws/aws-sdk-php. Использование композитора:
composer require aws/aws-sdk-php
Создайте php файл с:
require './vendor/autoload.php';
error_reporting(E_ALL);
ini_set("display_errors", 1);
$params = array(
'credentials' => array(
'key' => 'YOUR_KEY_HERE',
'secret' => 'YOUR_SECRET_HERE',
),
'region' => 'us-east-1', // < your aws from SNS Topic region
'version' => 'latest'
);
$sns = new \Aws\Sns\SnsClient($params);
$args = array(
"MessageAttributes" => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'YOUR_SENDER_ID'
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional'
]
],
"Message" => "Hello World! Visit www.tiagogouvea.com.br!",
"PhoneNumber" => "FULL_PHONE_NUMBER"
);
$result = $sns->publish($args);
echo "<pre>";
var_dump($result);
echo "</pre>";
В результате должен быть один массив с множеством данных, включая MessageId.
Ответ 2
Если вы используете версию AWS SDK до 3.0, вы все равно создаете тему и подписываетесь с типом SMS. Но начиная с 3.0, вы можете отправить SMS прямо на номер.
$client = SnsClient::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => array(
'key' => 'key',
'secret' => 'secret')
));
$message = 'Your verification code is 4';
$payload = [
'TopicArn' => 'arn:aws:sns:XXXXX',
'Message' => $message,
'MessageStructure' => 'string',
'MessageAttribute' => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'Sender',
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional',
]
]
];
$result = $client->subscribe(array(
'TopicArn' => 'arn:aws:sns:XXXXX',
'Protocol' => 'sms',
'Endpoint' => 'XXXXXXXXXXX',
));
$subarn = $result['SubscriptionArn'];
$result = $client->publish($payload);
$result = $client->unsubscribe(array(
'SubscriptionArn' => $subarn,
));
Ответ 3
Каким-то образом ответ Тиаго не сработал для меня. Итак, я взглянул на API публикации из AWS-SDK. Похоже, что нет никаких параметров SMSType
& SenderID
в методе публикации. Проверьте здесь -
https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish
Поэтому, если вы хотите переопределить эти параметры, следующий вариант кода Tiago должен работать нормально:
require './vendor/autoload.php';
error_reporting(E_ALL);
ini_set("display_errors", 1);
$params = array(
'credentials' => array(
'key' => 'YOUR_KEY_HERE',
'secret' => 'YOUR_SECRET_HERE',
),
'region' => 'us-east-1', // < your aws from SNS Topic region
'version' => 'latest'
);
$sns = new \Aws\Sns\SnsClient($params);
$args = array(
"MessageAttributes" => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'YOUR_SENDER_ID'
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional'
]
],
"Message" => "Hello World! Visit www.tiagogouvea.com.br!",
"PhoneNumber" => "FULL_PHONE_NUMBER"
);
$result = $sns->publish($args);
Ответ 4
Надеюсь, что эта помощь для людей, которые все еще используют PHP AWS SDK v2
Тот же вопрос: fooobar.com/questions/6491151/...
Вам нужно будет добавить новый параметр в исходный код.
// update file: aws-sdk-php/src/Aws/Sdk/Resources/sns-2010-03-31.php
'Publish' => array(
'parameters' => array(
'PhoneNumber' => array( // new parameter
'type' => 'string',
'location' => 'aws.query',
),
),
),
// You just need to publish it and include the 'PhoneNumber' parameter
$snsClientResult = $snsClient->publish([
'Message' => 'YOUR_MESSAGE',
'PhoneNumber' => 'PHONE_NUMBER',
'MessageStructure' => 'SMS',
'MessageAttributes' => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'SENDER_ID',
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Promotional', // Transactional
]
]
]);
// Get the response
$snsClientResult['MessageId']
Ответ 5
Чтобы использовать действие "Опубликовать" для отправки сообщения на конечную точку мобильного устройства, например приложение на устройстве Kindle или мобильном телефоне, вы должны указать EndpointArn.
$result = $client->publish(array(
'TopicArn' => 'string',
'TargetArn' => 'string',
// Message is required
'Message' => 'string',
'Subject' => 'string',
'MessageStructure' => 'string',
'MessageAttributes' => array(
// Associative array of custom 'String' key names
'String' => array(
// DataType is required
'DataType' => 'string',
'StringValue' => 'string',
'BinaryValue' => 'string',
),
// ... repeated
),
));