1.引入aws-sdk-php
使用composer安装:aws/aws-sdk-php
2.使用SnsClient类,生成sns服务对象
$snsClient = new SnsClient([
'region' => 'ap-southeast-1',//这是亚马逊在新加坡的服务器,具体要根据情况决定
'credentials' => [
'key' => '需要登陆aws的控制台查看',
'secret' => '需要登陆aws的控制台查看',
],
'version' => '2010-03-31', //一般在aws的官方api中会有关于这个插件的版本信息
'debug' => false,
]);
region:区域信息
credentials : 证书
version:版本
debug:是否是debug
3.向指定的topic订阅者(群发)发送短信
$topic = $client->createTopic([
'Name' => 'abc' //自定义
]); //如果已经存在一个同名的topic,则不会重新创建
//*** 设置topic显示值,第一次设置或如果topic设置在console中设置了就不用写这个了
$client->setTopicAttributes([
'AttributeName' => 'DisplayName', //可以自定义
'AttributeValue' => 'My SNS Topic Display Name', //可以自定义
'TopicArn' => $topic中的值 //'arn:aws:sns:ap-southeast-1:...:abc', // REQUIRED
]);
// 往topic中添加订阅者
$client->subscribe([
'Endpoint' => '+86...........', //手机号或email(注意,如果是手机号,需要转换为E.164国际标准,可以考虑使用google维护的一个开源库: giggsey/libphonenumber-for-php,在github上可以找到,也可以使用composer安装)
'Protocol' => 'sms', //enum值,有sms、email等值
'TopicArn' => $topic中的值 //'arn:aws:sns:ap-southeast-1:...:abc'
]);
$args = [
'Message' => 'Hello, world!', // REQUIRED
'TopicArn' => $topic中的值 //'arn:aws:sns:ap-southeast-1:...:abc',
];
$client->Publish($args);
4.向指定的PhoneNumber发送短信
这个功能需要检查你的php-sdk的版本,如果>3.0就可以使用,如果<3.0,则不能使用下列方式向指定phoneNumber发送
$args = [
'Message' => 'Hello, world!', // REQUIRED
'PhoneNumber' => '+86....',
];
$client->Publish($args);
代码示例:
类文档 : http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html
参考示例 : https://github.com/chrisbarr/AmazonSNS-PHP-API
https://stackoverflow.com/questions/38752336/sending-sms-with-amazon-aws-services-php