本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用第 3 AWS SDK for PHP 版管理 Amazon SNS 中的訂閱
使用亞馬遜簡單通知服務 (Amazon SNS) 主題將通知傳送到 Amazon Simple Queue Service (Amazon SQS)、HTTP/HTTPS、電子郵件地址 AWS Server Migration Service (AWS SMS) 或。AWS Lambda
訂閱會連接到主題,以管理對訂閱者的訊息傳送。進一步了解如何使用第 3 AWS SDK for PHP 版在 Amazon SNS 中管理主題中建立主題。
下列範例示範如何:
-
使用 Subscribe 訂閱現有的主題。
-
使用驗證訂閱ConfirmSubscription。
-
使用列出現有的訂閱ListSubscriptionsByTopic。
-
使用 Unsubscribe 刪除訂閱。
-
使用 Publish 傳送訊息給某主題的所有訂閱者。
如需使用 Amazon SNS 的詳細資訊,請參閱使用 Amazon SNS 進行系統對系統簡訊。
所有的範例程式碼都可以AWS SDK for PHP在這裡取
登入資料
在執行範例程式碼之前,請依照中的說明設定您的AWS認證憑證。然後匯入AWS SDK for PHP,如中所述基本使用。
讓電子郵件地址訂閱主題
若要為電子郵件地址起始訂閱,請使用 Subscribe 操作。
您可以使用訂閱方法來訂閱 Amazon SNS 主題的數個不同端點,具體取決於用於傳遞參數的值。本主題的其他範例將示範做法。
在此範例中,端點是電子郵件地址。確認字符會傳送至該電子郵件。收到確認符記後,可於三天內驗證訂閱。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $protocol = 'email'; $endpoint = 'sample@example.com'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->subscribe([ 'Protocol' => $protocol, 'Endpoint' => $endpoint, 'ReturnSubscriptionArn' => true, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
訂閱應用程式端點以取得主題
若要為 web 應用程式起始訂閱,請使用 Subscribe 操作。
您可以使用訂閱方法來訂閱 Amazon SNS 主題的數個不同端點,具體取決於用於傳遞參數的值。本主題的其他範例將示範做法。
在此範例中,端點是 URL。確認字符會傳送至該網址。收到確認符記後,可於三天內驗證訂閱。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $protocol = 'https'; $endpoint = 'https://'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->subscribe([ 'Protocol' => $protocol, 'Endpoint' => $endpoint, 'ReturnSubscriptionArn' => true, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
將 Lambda 函數訂閱至主題
若要啟動 Lambda 函數的訂閱,請使用「訂閱」作業。
您可以使用訂閱方法來訂閱 Amazon SNS 主題的數個不同端點,具體取決於用於傳遞參數的值。本主題的其他範例將示範做法。
在此範例中,端點是 Lambda 函數。一個確認令牌被發送到這個 Lambda 函數。收到確認符記後,可於三天內驗證訂閱。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $protocol = 'lambda'; $endpoint = 'arn:aws:lambda:us-east-1:123456789023:function:messageStore'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->subscribe([ 'Protocol' => $protocol, 'Endpoint' => $endpoint, 'ReturnSubscriptionArn' => true, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
訂閱文本短信到一個主題
如需傳送簡訊至多個電話號碼,各號碼都要訂閱主題。
若要為電話號碼起始訂閱,請使用 Subscribe 操作。
您可以使用訂閱方法來訂閱 Amazon SNS 主題的數個不同端點,具體取決於用於傳遞參數的值。本主題的其他範例將示範做法。
在此範例中,端點是 E.164 格式的電話號碼,遵照國際電信通訊所採用的標準。
確認字符會傳送至該電話號碼。收到確認符記後,可於三天內驗證訂閱。
如需使用 Amazon SNS 傳送簡訊的替代方式,請參閱使用第 3 AWS SDK for PHP 版在 Amazon SNS 中傳送簡訊。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $protocol = 'sms'; $endpoint = '+1XXX5550100'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->subscribe([ 'Protocol' => $protocol, 'Endpoint' => $endpoint, 'ReturnSubscriptionArn' => true, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
確認訂閱主題
若要實際建立訂閱,端點擁有者必須使用最初建立訂閱時傳送的符記,確認其有意接收來自該主題的訊息,如前所述。確認符記的有效期為三天。三天之後,您可以透過建立新的訂閱重新傳送符記。
若要確認訂閱,請使用該ConfirmSubscription作業。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $subscription_token = 'arn:aws:sns:us-east-1:111122223333:MyTopic:123456-abcd-12ab-1234-12ba3dc1234a'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->confirmSubscription([ 'Token' => $subscription_token, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
列出主題的訂閱
若要列出指定AWS區域中最多 100 個現有訂閱,請使用此ListSubscriptions作業。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); try { $result = $SnSclient->listSubscriptions(); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
取消訂閱主題
若要移除已訂閱主題的端點,請使用 Unsubscribe 操作。
如果訂閱需要驗證才能刪除,則只有訂閱的擁有者或主題的擁有者可以取消訂閱,且需要AWS簽名。如果取消訂閱呼叫無須身分驗證,而申請者也並非訂閱擁有者,便會向端點交付一則最終取消訊息。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription'; try { $result = $SnSclient->unsubscribe([ 'SubscriptionArn' => $subscription, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
將訊息發佈到 Amazon SNS 主題
若要向訂閱 Amazon SNS 主題的每個端點傳遞訊息,請使用「發佈」操作。
建立一個物件,其中包含用於發佈訊息的參數,包括 Amazon SNS 主題的訊息文字和 Amazon 資源名稱 (ARN)。
匯入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sns\SnsClient;
範例程式碼
$SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); $message = 'This message is sent from a Amazon SNS code sample.'; $topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic'; try { $result = $SnSclient->publish([ 'Message' => $message, 'TopicArn' => $topic, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }