如何通过阿里云短信服务发送短信(超详细,幼儿园小朋友都能看懂)
话不多说,直接开整!
话不多说,直接开整!
1.阿里云购买短信服务
地址: 企业服务与云通信企业云服务云通信_企业服务-阿里云 (aliyun.com) 打开后如下图

然后搜索短信服务 结果如下

然后点击第一个选项“短信服务” 结果如下

选下面第一个最便宜的就可以了 如果是个人测试使用的话 这里价格有差异,根据自己页面购买即可
2.购买完成之后,创建用户


选择创建子用户,当然你选继续也没关系 但是你得记得住之前账户的 accessKeyId 和 accessKeySecret
当然你点击 "x" 也没关系 会出现下面这个界面
这个时候你点创建用户 就会和上面点击使用子用户出现一样的界面了 如下

然后填写或勾选上面3个箭头所指的位置 点击确定 出现下面页面
这里出现的accessKeyId 和 accessKeySecret 一定要复制下来 后面会配置到 yml中
然后点击他的名字 出现如下
点击上面的新增授权 在后边如下图所示:
到这里 你就拥有了可以发送短信的用户了 所需要的 accessKeyId 和 accessKeySecret 就都拿到了
但是还不能直接发送短息 我们在代码中还需要短信的模板,签名,参数等
3.控制台配置短信发送所需的信息
我们去到短信服务的控制台: 短信服务 (aliyun.com) 页面如下:

点击 左边 操作栏的 “快速学习和测试” :使用这个不需要审核资质,不需要审核模板,相当于就是你自己绑定一个测试机来测试功能 , 后面你如果需要正式环境使用 就需要审核资质,模板,签名等,审核通过后参数都是这些,这里就不整那么复杂了

按上面的操作后得到下图 :

这里可以获取到代码中所需的所有参数 就是我箭头所指的地方
4.所需依赖
下面是所需依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
5.代码实现
下面是阿里云的配置类 这个配置类会返回一个发送短信的Bean 我这里直接把发送短信的方法也在这里
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 org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author YangLi
* @Date 2024/9/12 10:13
* @注释
*/
@Configuration
public class AliyunSmsConfig {
@Value("${aliyun.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.regionId}")
private String regionId;
@Bean
public IAcsClient acsClient() {
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
return new DefaultAcsClient(profile);
}
public SendSmsResponse sendSms(String phoneNumber, String signName, String templateCode, String templateParam) throws Exception {
IAcsClient client = acsClient();
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(phoneNumber);
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam(templateParam);
return client.getAcsResponse(request);
}
}
这里是service:
/**
* @Author YangLi
* @Date 2024/9/11 18:21
* @注释
*/
public interface SmsService {
boolean sendVerificationCode(String phoneNumber, String code);
}
这里是具体的发送短信的代码
import com.example.spring_boot_security.config.AliyunSmsConfig;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.example.spring_boot_security.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Author YangLi
* @Date 2024/9/11 18:21
* @注释
*/
@Service
@Slf4j
public class SmsServiceImpl implements SmsService {
@Resource
private AliyunSmsConfig aliyunSmsConfig;
@Override
public boolean sendVerificationCode(String phoneNumber, String code) {
try {
// aliyun 短信测试控制台地址 https://dysms.console.aliyun.com/quickstart?spm=5176.25163407.domtextsigncreate-index-1ec3c_58c50_0.1.3ac1bb6eYTArb1
// 因为是测试,这个地址先绑定测试机号码,选择专用测试模版 然后点击 下方调用api发送消息 就能看到 signName, templateCode,templateParam 这4个参数
// 如果是正式环境 需要先审核资质,审核模板,然后添加签名,审核完成之后,就能看到所需要的参数(这里我自己为了方便就不去做资质审核了)
SendSmsResponse response = aliyunSmsConfig.sendSms(
phoneNumber,
"阿里云短信测试", // 阿里云短信签名
"SMS_154950909", // 阿里云短信模板代码
"{\"code\":\"" + code + "\"}" // 模板参数
);
log.info(response.getCode());
return "OK".equals(response.getCode());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
写一个controller来试试:
import com.example.spring_boot_security.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* @Author YangLi
* @Date 2024/9/11 18:17
* @注释
*/
@RestController
@RequestMapping
@Slf4j
public class SmsController {
@Resource
private SmsService smsService;
@Resource
private RedisTemplate<String, String> redisTemplate;
@PostMapping("/send-sms-code")
public String sendCode(@RequestParam String phoneNumber) {
// 生成随机验证码
String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
// 将验证码发送给用户
boolean success = smsService.sendVerificationCode(phoneNumber, code);
if (success) {
// 你可以将验证码存储在Redis中,并设置过期时间
redisTemplate.opsForValue().set("SMS_" + phoneNumber, code, 5, TimeUnit.MINUTES);
return "验证码发送成功";
} else {
return "验证码发送失败";
}
}
}
6.配置文件
aliyun:
# 用户的 key 在自己的阿里云账号中去创建 用户的时候会有这个
accessKeyId: 之前让你复制的key
# 用户的密码 在自己的阿里云账号中去创建 用户的时候会有这个
accessKeySecret: 之前让你复制的secret
# 地区代号 其他springboot也可以一直使用下面的值东西 不用修改
regionId: cn-hangzhou
7.测试结果
手机会收到如下信息:

搞定,短信就发送成功了 至于你是发送短信干嘛呢? 嘿嘿嘿
更多推荐



所有评论(0)