基于SpringBoot调用阿里云短信接口实现发送短信功能

1、准备工作

1.1、流程
在这里插入图片描述
1.2、开通短信服务
在这里插入图片描述
1.3、申请认证密钥
在这里插入图片描述
1.4、
申请短信签名
在这里插入图片描述
1.5、申请短信模板
在这里插入图片描述

2、Controller层接口

    @GetMapping("sendSMS")
    public void getUser() {
        //生成验证码 1-9 6
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            builder.append(new Random().nextInt(9) + 1);
        }
        String smsCode = builder.toString();

        try {
            //发送短信 {"code":"123456"}
            SmsUtil.sendSms("18319143841", "自己在阿里云申请的签名名称", "填写自己申请的模板code", smsCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3、SmsUtils(发送短信工具类)

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SmsUtil {
    //替换成自己申请的accessKeyId
    private static String accessKeyId = "LTAI4GHw8BMP1RhZwYKedBRu";
    //替换成自己申请的accessKeySecret
    private static String accessKeySecret = "1F5zjL1Ke4DIHVklZmOygnx5z2yKpA";

    static final String product = "Dysmsapi";
    static final String domain = "dysmsapi.aliyuncs.com";

    /**
     * 发送短信
     *
     * @param phoneNumbers 要发送短信到哪个手机号
     * @param signName     短信签名[必须使用前面申请的]
     * @param templateCode 短信短信模板ID[必须使用前面申请的]
     * @param param        模板中${code}位置传递的内容
     */
    public static void sendSms(String phoneNumbers, String signName, String templateCode, String param) {
        try {
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");

            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);

            SendSmsRequest request = new SendSmsRequest();
            request.setPhoneNumbers(phoneNumbers);
            request.setSignName(signName);
            request.setTemplateCode(templateCode);
            request.setTemplateParam(param);
            request.setOutId("yourOutId");
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if (!"OK".equals(sendSmsResponse.getCode())) {
                log.info("发送短信失败,{}", sendSmsResponse);
                throw new RuntimeException(sendSmsResponse.getMessage());
            }
        } catch (Exception e) {
            log.info("发送短信失败,{}", e);
            throw new RuntimeException("发送短信失败");
        }
    }
}

4、pom.xml新增短信坐标

  <!--短信发送-->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-alicloud-sms</artifactId>
     </dependency>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,你需要在阿里云短信控制台中创建签名和模板,并获取到 AccessKeyId 和 AccessKeySecret。 接下来,在Spring Boot项目中添加阿里云 Java SDK的依赖: ``` <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.0.0</version> </dependency> ``` 然后,在项目的 application.properties 文件中添加阿里云短信服务的相关配置: ``` aliyun.sms.accessKeyId=yourAccessKeyId aliyun.sms.accessKeySecret=yourAccessKeySecret aliyun.sms.signName=yourSignName aliyun.sms.templateCode=yourTemplateCode ``` 在代码中,你可以使用以下示例代码发送国际短信: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20170628.SendSmsRequest; import com.aliyuncs.sms.model.v20170628.SendSmsResponse; import java.util.Arrays; public class SmsUtil { private String accessKeyId; private String accessKeySecret; private String signName; private String templateCode; public SmsUtil(String accessKeyId, String accessKeySecret, String signName, String templateCode) { this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.signName = signName; this.templateCode = templateCode; } public boolean sendSms(String phoneNumber, String message) { IClientProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessKeySecret); DefaultProfile.addEndpoint("default", "default", "Dysmsapi", "dysmsapi.aliyuncs.com"); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(phoneNumber); request.setSignName(signName); request.setTemplateCode(templateCode); request.setTemplateParam("{\"code\":\"" + message + "\"}"); try { SendSmsResponse response = client.getAcsResponse(request); if (response.getCode() != null && response.getCode().equals("OK")) { return true; } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return false; } public static void main(String[] args) { // 使用示例 SmsUtil smsUtil = new SmsUtil( "yourAccessKeyId", "yourAccessKeySecret", "yourSignName", "yourTemplateCode" ); boolean result = smsUtil.sendSms("+86xxxxxxxxxxx", "yourMessage"); System.out.println(result); } } ``` 其中,phoneNumber 是接收短信的手机号码,message 是短信内容,可以根据模板中定义的变量替换。调用 sendSms 方法即可发送短信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值