Amazon SNS使用PHP推送主题

时间:2012-03-14 06:55:20

标签: php amazon-web-services amazon-sns

我正在尝试了解AWS的amazon php sdk,但我真的无法使用它。 我找到了一些基本类来创建,显示和推送主题,但我也无法工作。 我只想找到一种方法(最简单的方法)从我的网站推送一个主题。

4 个答案:

答案 0 :(得分:18)

首先,为了熟悉Amazon Simple Notification Service (SNS),我建议您按照AWS Management Console中所述的Getting Started Guide手动执行所有必需步骤,即Create a TopicSubscribe to this TopicPublish a message to it

之后,为了方便运行AWS SDK for PHP文档中提供的样本片段,应该相当直接,例如,类AmazonSNS中的方法publish()

$sns = new AmazonSNS();

// Get topic attributes
$response = $sns->publish(
    'arn:aws:sns:us-east-1:9876543210:example-topic',
    'This is my very first message to the world!',
    array(
        'Subject' => 'Hello world!'
    )
);

// Success?
var_dump($response->isOK());

有关更完整的示例,您可能需要查看Sending Messages Using SNS [...]中提供的示例。

如果这些都没有成功,您必须按照tster的要求提供有关您遇到的具体问题的更多详细信息。

祝你好运!

答案 1 :(得分:4)

正如@SteffenOpel告诉您的那样,您应该尝试通过AWS管理控制台手动执行所有必需的步骤。

然后,您可以使用AWS SDK for PHP(v3)as below创建SNS客户端(或者实际上是任何服务的客户端,当然还有一些更改)和然后创建一个SNS主题

<?php
    //assuming that use have downloaded the zip file for php sdk
    require 'C:/wamp/www/aws sdk/aws-autoloader.php'; //Change the path according to you
    use Aws\Sns\SnsClient;



    try{
            /*-------------METHOD 1----------------*/
            // Create a new Amazon SNS client using AWS v3
            //$sns = new Aws\Sns\SnsClient([
            $sns = new SnsClient([

                'region' => 'us-west-2', //Change according to you
                'version' => '2010-03-31', //Change according to you
                'credentials' => [
                    'key'    => '<Your root AWS Key',
                    'secret' => '<Your root AWS Secret>',
                ],
                'scheme' => 'http', //disables SSL certification, there was an error on enabling it 

            ]);

            $result = $sns -> createTopic([
            'Name' => '<Your Topic>',
            ]);


        /*-------------METHOD 2----------------*/
        /*
        // Create a new Amazon SNS client using AWS v2
        $sns = SnsClient::factory(array(

            'region' => 'us-west-2',
            'version' => '2010-03-31',
            'credentials' => [
                'key'    => '<Your root AWS Key',
                'secret' => '<Your root AWS Secret>',
            ],
            'scheme' => 'http',
        ));


        $result = $sns -> createTopic([
            'Name' => '<Your Topic>',
            ]);

        */



        /*-------------METHOD 3----------------*/
        /*
        // Create a new Amazon SNS client using AWS SDK class
        // Use the us-west-2 region and latest version of each client.
        $sharedConfig = [
            'region'  => 'us-west-2',
            'version' => '2010-03-31',

            'credentials' => [
                'key'    => '<Your root AWS Key',
                'secret' => '<Your root AWS Secret>',
            ],
            //'ssl.certificate_authority' => '/path/to/updated/cacert.pem',
            'scheme' => 'http',
        ];

        // Create an SDK class used to share configuration across clients.
        $sdk = new Aws\Sdk($sharedConfig);

        $sns =  $sdk -> createSns();

        $result = $sns -> createTopic([
            'Name' => '<Your Topic>',
            ]);
        */


        if ($result)
            echo "Yes";
        else
            echo "No";
    }

    catch(Exception $e){

        echo 'Caught Exception: ', $e->getMessage(), "\n";

    }


?>

注意:此代码说明了使用三种不同的方法为SNS创建客户端。 您可以根据需要取消注释并使用一个。 方法1(版本3)是最好的,如果您正在创建单个客户端,否则使用方法3.方法2很快就会贬值(作为其版本2)

答案 2 :(得分:1)

我成功地使用这个类 - &gt; Amazon-SNS-client-for-PHP

非常好,易于使用,工作得很好。

答案 3 :(得分:0)

根据 AWS 官方文档 here,我们必须创建一个 SnsClient 并调用它的发布方法。您可以从 AWS 控制台获取主题的 ARN。

$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());
}