2016-08-03 31 views
7

我在瀏覽亞馬遜AWS PHP-sdk的文檔時遇到了問題。用亞馬遜AWS服務發送短信PHP

基本上,我只需要發送一個標準的文本消息到一個數字。我知道這是可能的,因爲亞馬遜允許你通過控制檯直接通過該屏幕發送消息:

Amazon Console SMS

它說,一些有關使用「發佈」的方法,但通過文件仔細看還真沒有提供任何答案。 #Publish documentation link

任何幫助或指導表示讚賞。我目前正在尋找一個解決方案,使用sdk的V2

在此先感謝。

+0

你究竟在哪裏看到那個屏幕? –

+0

如果您登錄AWS服務,請單擊Amazon SNS,然後從控制檯發送文本消息。 – Imperialized

回答

19

沒有哪裏有一個文檔顯示它使用PHP。閱讀Java和C#sdk我寫了可用的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(
    "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>"; 

結果必須有一個陣列有許多數據,包括的MessageId。

+2

儘管我很欣賞你的時間和精力,但我目前沒有一個亞馬遜賬戶來測試它。自最初發布(時間限制等)以來,我們與另一個SMS提供商進行了交流。再次,我應該刪除這個,但它可能在未來幫助某人。謝謝! – Imperialized

+0

這怎麼可以用SDK的v2來完成? –

+0

@LesterPeabody我不知道。 :( –

-3

要使用發佈操作將消息發送到移動端點(例如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 
    ), 
)); 
+0

什麼是EndpointArn? –

+0

EndpointArn是TargetArn的值,如果該值爲空,則您需要爲電話號碼或TopicArn指定一個值 – Yun

+0

請更新您的示例以反映通過電話號碼向特定手機發送短信。 –

1

如果您使用的AWS SDK版本早於3.0,您仍然創建了主題並使用SMS類型進行了訂閱。但從3.0開始,你可以直接發送短信給一個號碼。

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