亚马逊SNS - aws-sdk-php

时间:2016-10-26 13:28:24

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

     $accessKey = 'XZA...';
     $accessSecret = 'YKW...';
     $credentials = new Aws\Credentials\Credentials($accessKey, $accessSecret);

     $sharedConfig = [
        'region'  => 'us-east-1',          
        'version' => 'latest',
        'credentials' => $credentials
    ];

     $sdk = new Aws\Sdk($sharedConfig);
     $sns = new SnsClient($sharedConfig);

     $payload = [
        'PhoneNumber' => '+999999999',   // E.164 format
        'Message' => md5(time()),
        'MessageAttributes' => [
          'DefaultSenderID' => ['DataType'=>'String','StringValue'=>'MyBrandName'],
          'DefaultSMSType' => ['DataType'=>'String','StringValue'=>'Transactional']
        ]
    ];

    try {
        $data = $sns->publish( $payload );
        $MessageId = $data->get('MessageId');
    } catch ( Exception $e ) {   }

我正在使用AWS SDK for PHP - 版本3.
上面的代码在我发送单个短信时效果很好,但当我向移动设备发送短信时, DefaultSenderID 属性不起作用。

亚马逊文档说 DefaultSenderID - 在接收设备上显示为发件人的字符串,例如您的商家品牌。发件人ID的支持因国家/地区而异。发件人ID可以是1到11个字母数字字符,并且必须至少包含一个字母。

使用Amazon SNS的任何人都遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

对于任何仍在努力解决这个问题的人。

如果查看文档here,您会发现需要将密钥 AWS.SNS.SMS.SenderID 添加到有效负载的 MessageAttributes

以下内容应该有效:

$payload = [
    'PhoneNumber' => '+999999999', // E.164 format
    'Message' => md5(time()),
    'MessageAttributes' => [
        'AWS.SNS.SMS.SenderID' => [
            'DataType' => 'String',
            'StringValue' => 'YourSenderID',
        ]
    ]
];

try {
    $data = $sns->publish($payload);
    $MessageId = $data->get('MessageId');
} catch (Exception $e) { }