2016-08-03 8 views
7

Mam problemy z przeglądaniem dokumentacji dla AWS Amazon-sdk.Wysyłanie wiadomości SMS z usługami Amazon AWS PHP

Zasadniczo wystarczy wysłać standardową wiadomość tekstową na numer. Wiem, że to jest możliwe, ponieważ Amazon pozwala na wysyłanie wiadomości za pośrednictwem konsoli bezpośrednio za pośrednictwem tego ekranu:

Amazon Console SMS

Mówi coś o użyciu metody „Publikuj”, ale patrząc przez tą dokumentacją naprawdę nie zapewniają wszelkie odpowiedzi. #Publish documentation link

Każda pomoc lub wskazówki są mile widziane. Obecnie szukam rozwiązania, które używa V2 z sdk.

Z góry dziękuję.

+0

Gdzie dokładnie widzisz ten ekran? –

+0

Jeśli logujesz się do usług AWS, kliknij Amazon SNS, a następnie wyślij wiadomość tekstową z konsoli. – Imperialized

Odpowiedz

19

Nie ma dokąd dokument pokazujący to do użycia z PHP. Czytanie kodu Java i C# sdk Napisałem wersję PHP, która działa.

Pierwsza instalacja aws/aws-sdk-php. Korzystanie kompozytor:

composer require aws/aws-sdk-php

Utwórz plik php z:

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(
    "SenderID" => "SenderName", 
    "SMSType" => "Transactional", 
    "Message" => "Hello World! Visit www.tiagogouvea.com.br!", 
    "PhoneNumber" => "FULL_PHONE_NUMBER" 
); 

$result = $sns->publish($args); 
echo "<pre>"; 
var_dump($result); 
echo "</pre>"; 

wynik musi mieć jedną tablicę z wielu danych, w tym identyfikator wiadomości.

+2

Chociaż doceniam twój czas i wysiłek, nie mam konta Amazon, aby przetestować to. Od pierwszego wpisu (ograniczenia czasu, itp.) Poszliśmy z innym dostawcą SMS. Ponownie powinienem to usunąć, ale może pomóc komuś w przyszłości. Dziękuję Ci! – Imperialized

+0

Jak to zrobić w wersji 2 SDK? –

+0

@LesterPeabody Nie wiem. :( –

-3

Aby użyć czynności Opublikuj w celu wysłania wiadomości do mobilnego punktu końcowego, np. Aplikacji na urządzeniu Kindle lub telefonie komórkowym, musisz określić 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 
    ), 
)); 
+0

Co to jest EndpointArn? –

+0

EndpointArn to wartość TargetArn .Jeśli ta wartość jest pusta, musisz podać wartość numeru telefonu lub TopicArn – Yun

+0

Zaktualizuj swój przykład, aby odzwierciedlić wysyłanie wiadomości SMS na określony numer telefonu komórkowego. –

1

Jeśli używasz wersji AWS SDK przed 3,0, trzeba jeszcze stworzyć temat i subskrybowania z typu SMS. Ale od wersji 3.0 możesz wysyłać wiadomości SMS bezpośrednio na numer.

$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, 
));