我在StackOverflow上看到了和我类似的问题的帖子,但都没有帮我解决这个问题。这就是为什么我要创建一个新的帖子。
当我第一次设置AWS SNS时,我测试了使用在线控制台发送SMS,它工作了!然后我写了PHP代码来发送示例消息。我得到了一些错误,但能够轻松解决它们。然而,当我得到一个成功的响应时,消息根本没有收到。
我认为这是一个Limitation问题。所以我联系了AWS,并将我的限制增加到20USmonth。我更新了偏好设置,但结果还是一样。我得到了一个成功的响应,仪表板显示消息已成功发送(尽管更新发送的消息数量需要时间)。但是消息没有收到。
这是我的代码,供参考。
<?php
require './aws/aws-autoloader.php';
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;
$sdk = new SnsClient([
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => 'XXXXXXXXXXXXXXXXXXX',
'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
]
]);
try {
$result = $sdk->publish([
'Message' => 'Reminder - You are scheduled for a session on 2020-05-20 at 4:30 PM',
'MessageStructure' => 'String',
'PhoneNumber' => '+1XXX789XXXX',
'MessageAttributes' => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'MyName'
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional'
]
]
]);
var_dump($result);
echo "\n";
} catch (AwsException $e) {
// output error message if fails
var_dump($e->getMessage());
}
这里是结果对象
object(Aws\Result)#119 (2) {
["data":"Aws\Result":private]=>
array(2) {
["MessageId"]=>
string(36) "8cf11950-cdb0-5503-9b69-4e6e9b61eaba"
["@metadata"]=>
array(4) {
["statusCode"]=>
int(200)
["effectiveUri"]=>
string(35) "https://sns.us-east-1.amazonaws.com"
["headers"]=>
array(4) {
["x-amzn-requestid"]=>
string(36) "0488b803-8776-57bc-b9a9-ef3dd1a71805"
["content-type"]=>
string(8) "text/xml"
["content-length"]=>
string(3) "294"
["date"]=>
string(29) "Tue, 19 May 2020 21:50:09 GMT"
}
["transferStats"]=>
array(1) {
["http"]=>
array(1) {
[0]=>
array(0) {
}
}
}
}
}
["monitoringEvents":"Aws\Result":private]=>
array(0) {
}
}
我已经没有办法了 不知道如何解决这个问题。任何帮助都将是感激的.谢谢。
我相信从短信的性质来看,它时常会失败。
根据我自己的观察,AWS雇佣了一些区域性的SMS提供商,他们会帮助他们将SMS发送到你的运营商。
有时候,短信提供商会发送失败。有时会被接收运营商拒绝。
目前,我们没有办法确定它是否失败(并对这种情况做出反应)如果短信对你的业务至关重要,我建议结合AWS使用其他短信服务。