我正在尝试学习aws sns服务以从我的Web应用程序发送短信。 我正在使用localhost。
$params = array(
'credentials' => array(
'key' => 'iam_key',
'secret' => 'iam_secret',
),
'region' => 'ap-south-1', // < your aws from SNS Topic region
'version' => 'latest',
'http' => ['verify'=>false]
);
$sns = \Aws\Sns\SnsClient::factory($params);
$msgattributes = [
'AWS.SNS.SMS.SenderID' => [
'DataType' => 'String',
'StringValue' => 'Klassroom',
],
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional',
]
];
$payload = array(
'Message' => "HK test",
"PhoneNumber" => "1234567890",
'MessageAttributes' => $msgattributes
);
$result = $sns->publish($payload);
我想直接在号码上发送短信。此代码提供此错误
致命错误:未捕获的异常'Aws \ Sns \ Exception \ SnsException',消息'错误执行'发布“on”https://sns.ap-south-1.amazonaws.com“; AWS HTTP错误:客户端错误:POST https://sns.ap-south-1.amazonaws.com
导致400 Bad Request
响应:发件人InvalidPara (truncated...) InvalidParameter (client): Invalid parameter: PhoneNumber Reason: +1234567890 is not valid to publish to - Sender
InvalidParameter
Invalid parameter: PhoneNumber Reason: +1234567890 is not valid to publish to 13e181c2-a20f-5e77-9c8e-d38c55c50266 ' exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: POST https://sns.ap-south-1.amazonaws.com
resulted in a 400 Bad Request
我不知道为什么......
答案 0 :(得分:0)
我认为AWS的电话号码必须包含国家/地区代码。
例如,如果我的电话号码为(999) 365-6721
,则为+19993656721
(适用于美国)
答案 1 :(得分:0)
即使我使用正确的国家/地区代码(例如+ 57xxxxxxxxxx)作为前缀的有效电话号码调用API,也遇到了完全相同的问题。
然后,我在互联网上经过一些线程运行后才发现,这仅仅是由于 REGION_CODE (例如 us-west-1 < / strong>,而不是在实例化SNSClient类时使用的 us-east-1 。
@Bean
public AmazonSNS snsClient() {
return AmazonSNSClientBuilder.standard().withRegion("us-east-1").withCredentials(new AWSStaticCredentialsProvider(credentials())).build();
}
请参阅link,以找到适合您情况的正确区域代码。
答案 2 :(得分:0)
您需要使用支持AWS SNS的SMS的区域。
更多信息:https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html