Je ne parviens pas à parcourir la documentation relative à AWS PHP-sdk d'Amazon.
Fondamentalement, je dois juste envoyer un message texte standard à un numéro. Je sais que c'est possible car Amazon vous permet d'envoyer des messages via la console directement via cet écran:
Cela dit quelque chose sur l'utilisation de la méthode "publier", mais parcourir cette documentation ne donnait vraiment aucune réponse. #Publish documentation link
Toute aide ou orientation est appréciée. Je suis actuellement à la recherche d'une solution utilisant V2 du sdk.
Merci d'avance.
Aucun où avoir un doc montrant le à utiliser avec PHP. En lisant le sdk Java et C #, j’ai écrit la version PHP qui fonctionne.
Les arguments passés à la méthode publish
ont maintenant un nouveau format. Fixé!
Commencez par installer aws/aws-sdk-php . Utilisation du compositeur:
composer require aws/aws-sdk-php
Créer un fichier php avec:
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>";
Le résultat doit avoir un tableau avec plusieurs données, y compris MessageId.
Si vous utilisez la version du kit SDK AWS antérieure à la version 3.0, vous devez toujours créer une rubrique et vous abonner avec un type SMS. Mais à partir de la version 3.0, vous pouvez envoyer SMS directement à un numéro.
$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,
));
D'une certaine manière, la réponse de Tiago n'a pas fonctionné pour moi. J'ai donc examiné l'API de publication d'AWS-SDK. On dirait qu'il n'y a pas de paramètres de SMSType
& SenderID
dans la méthode de publication. Vérifier ici -
https://docs.aws.Amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish
Donc, si vous voulez remplacer ces paramètres, la variante suivante du code de Tiago devrait bien fonctionner -
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);
J'espère que cette aide sera utile aux personnes qui utilisent encore PHP AWS SDK v2
Même question: https://stackoverflow.com/a/51208701/551559
Vous auriez besoin d'ajouter un nouveau paramètre dans le code source.
// 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']