首页 > 编程知识 正文

springboot实现短信发送

时间:2023-05-03 18:02:19 阅读:261577 作者:2561

应用背景:用户手机验证码登录、注册都需要验证码,这里讲的就是Springboot集成阿里云发送短信的具体实现。

一、首先打开阿里云短信服务


在这里能获取到我们需要的4个参数,分别是accessKeyId、accessKeySecret、短信签名、模板code。

短信签名和模板code直接点击创建就行了。

二、后台实现

1、创建SendSmsService.java文件,用来处理信息的发送:

package com.lmj.sendSms.service;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.exceptions.ClientException;import com.aliyuncs.profile.DefaultProfile;import com.aliyuncs.profile.IClientProfile;import java.util.Random;/** * @author Abell * @descibe 阿里云短信 * @date 2020/6/16 16:10 */public class SendSmsService { /* 短信API产品名称(短信产品名固定,无需修改) */ private static final String product = "Dysmsapi"; /* 短信API产品域名,接口地址固定,无需修改 */ private static final String domain = "dysmsapi.aliyuncs.com"; /* 此处需要替换成开发者自己的accessKeyId和accessKeySecret(在阿里云访问控制台寻找) */ private static final String accessKeyId = "你的accessKeyId "; //TODO: 这里要写成你自己生成的 private static final String accessKeySecret = "你的accessKeySecret ";//TODO: 这里要写成你自己生成的 /* 短信发送 */ public static SendSmsResponse sendSms(String phone) throws ClientException { String code = getMsgCode(); /* 超时时间,可自主调整 */ 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(phone); /* 必填:短信签名-可在短信控制台中找到 */ request.setSignName("浪漫纪"); //TODO: 这里是你短信签名 /* 必填:短信模板code-可在短信控制台中找到 */ request.setTemplateCode("SMS_164750191"); //TODO: 这里是你的模板code /* 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为 */ request.setTemplateParam("{"code":"" + code + ""}"); System.out.println("给电话为" + phone + "发送的验证码为:" + code); // hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { System.out.println("短信发送成功!验证码:" + code); } else { System.out.println("短信发送失败!"); } return sendSmsResponse; } /** * 随机生成验证码 * * @return */ private static String getMsgCode() { int n = 6; StringBuilder code = new StringBuilder(); Random ran = new Random(); for (int i = 0; i < n; i++) { code.append(Integer.valueOf(ran.nextInt(10)).toString()); } return code.toString(); }}

上面有4个TODO的地方,就是填写你的四个从阿里云短信服务获取的4个参数。
2、创建SendSmsController.java:

package com.lmj.sendSms.controller;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;import com.lmj.sendSms.service.SendSmsService;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author Abell * @descibe 阿里云短信 * @date 2020/6/16 16:23 */@RestControllerpublic class SendSmsController { //发送短信 @RequestMapping(value = "/sendCode") public Object sendCode(String phone) { SendSmsResponse sendSmsResponse; try { sendSmsResponse = SendSmsService.sendSms(phone); } catch (Exception e) { return "发送失败!"; } return sendSmsResponse; }}

3、pom依赖

<!--阿里云短信 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.1.0</version> <exclusions> <exclusion> <artifactId>commons-codec</artifactId> <groupId>commons-codec</groupId> </exclusion> <exclusion> <artifactId>activation</artifactId> <groupId>javax.activation</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> </dependency>

4、下面我们来运行访问一下,比如:

http://localhost:8080/sendCode?phone=手机号


我们发现返回的是OK的数据,在我们手机上也收到了对应信息:

这样我们关于整合阿里云发送短信就完事了。具体的应用具体进行controller的修改就可以了。如有疑问请留言。

ps:可以点击这里下载源码:下载源码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。