使用适用于PHP的AWS开发工具包v.3.90.3,我正尝试直接发送SMS而不订阅主题。
经过大量Google搜索后,没有获得正确的结果,并且在阅读了有关PHP的AWS SNS的所有主题之后,我不得不要求别人提供一个想法,以找到正确的做事方法。
我的开发代码在加载aws-autoloader.php并将值放在变量$ code和$ phonenumber中之后,是:
error_reporting(E_ALL);
ini_set("display_errors", 1);
$params = array(
'credentials' => array(
'key' => 'ofcoursemykey',
'secret' => 'ofcoursemysecretkey',
),
'region' => 'eu-west-1',
'version' => 'latest'
);
$sns = new \Aws\Sns\SnsClient($params);
$args = array(
"MessageAttributes" => [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'MY-BRAND'
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional'
]
],
"Message" => "This is your code: $code",
"PhoneNumber" => "$phonenumber"
);
$result = $sns->publish($args);
echo "<pre>";
var_dump($result);
echo "</pre>";
但我收到此错误:
致命错误:未捕获的异常'Aws \ Sns \ Exception \ SnsException'与 消息“在执行“发布”时出错 “ https://sns.eu-west-1.amazonaws.com”; AWS HTTP错误:客户端错误: POST https://sns.eu-west-1.amazonaws.com导致403 禁止回应: 发件人
Authorizati (truncated...) AuthorizationError (client): User: arn:aws:iam::xxxxxxxxxxxxx:user/yyyyyyyyyyy is not authorized to perform: SNS:Publish on resource: +1234567890 - Sender AuthorizationError
用户: arn:aws:iam :: xxxxxxxxxxxxxxxxx:user / yyyyyyyyyyyy未经授权 执行:SNS:发布在资源上:+1234567890 zzzzzzzzzzzzzzzzzzzzzzzzzzzz' GuzzleHttp \ Exception \ ClientException:客户端错误:POST https://sns.eu-west-1.amazonaws.com导致403禁止 /home/xxxxxxxxx/aws_sdk/Aws/WrappedHttpHandler.php在第191行
我当然有一个AWS账户,一个ARN以及一个正确的AWS SNS授权密钥和秘密密钥。开发人员机器是AWS Lightsail之下的实例,而不是Ec2,但我认为这并不重要,因为可以在网络中的任何地方使用SDK。