aws sns 短信util demo

本文介绍了一个使用Spring Boot和AWS SNS服务发送短信的实现方案。通过配置AWS访问密钥,并利用SNS服务的短信功能,该方案能够向指定电话号码发送消息。代码中详细展示了如何设置短信属性,如发送者ID、短信类型和最大价格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.demo;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.AmazonSNSClientBuilder;
import com.amazonaws.services.sns.model.MessageAttributeValue;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * @author seif
 * @Description: TODO
 * @date 2018/7/2719:46
 * @Modified by:
 */
@Service
public class SnsService {
    private Map<String, MessageAttributeValue> smsAttributes;

    private static String AWS_ACCESS_KEYID;
    private static String AWS_SECRET_KEY;


    @Value("${sns.AWS_ACCESS_KEYID}")
    public void setKeyId(String keyid) {
        AWS_ACCESS_KEYID = keyid;
    }

    @Value("${sns.AWS_SECRET_KEY}")
    public void setKey(String key) {
        AWS_SECRET_KEY = key;
    }

    public boolean send2SNS(String phoneNumber, String message) {
        if (phoneNumber.contains("_")) {
            phoneNumber = StringUtils.replace(phoneNumber, "_", "");
        }
        if (!phoneNumber.startsWith("+")) {
            phoneNumber = "+" + phoneNumber;
        }
        PublishResult result = sendSMSMessage(phoneNumber, message, getDefaultSMSAttributes());
        if (result != null && !StringUtils.isEmpty(result.getMessageId())) return true;
        return false;
    }


    public Map<String, MessageAttributeValue> getDefaultSMSAttributes() {
        if (smsAttributes == null) {
            smsAttributes = new HashMap<>();
            smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue()
                    .withStringValue("1")
                    .withDataType("String"));
            smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue()
                    .withStringValue("0.05")
                    .withDataType("Number"));
            smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue()
                    .withStringValue("Transactional")
                    .withDataType("String"));
        }
        return smsAttributes;
    }


    public PublishResult sendSMSMessage(String phoneNumber, String message, Map<String, MessageAttributeValue> smsAttributes) {
        AWSCredentials awsCredentials = new AWSCredentials() {
            @Override
            public String getAWSAccessKeyId() {
                return AWS_ACCESS_KEYID;// 带有发短信权限的 IAM 的 ACCESS_KEY
            }

            @Override
            public String getAWSSecretKey() {
                return AWS_SECRET_KEY; // 带有发短信权限的 IAM 的 SECRET_KEY
            }

        };
        AWSCredentialsProvider provider = new AWSCredentialsProvider() {
            @Override
            public AWSCredentials getCredentials() {
                return awsCredentials;
            }

            @Override
            public void refresh() {
            }
        };
        AmazonSNS amazonSNS = null;
        try {
            //设置aws区域
            amazonSNS = AmazonSNSClientBuilder.standard().withCredentials(provider).withRegion("us-east-1").build();
        } catch (Exception e) {

        }
        return amazonSNS.publish(
                new PublishRequest()
                        .withMessage(message)
                        .withPhoneNumber(phoneNumber)
                        .withMessageAttributes(smsAttributes)
        );
    }
}

 

转载于:https://my.oschina.net/ToFlySeif/blog/2877234

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值