了解阿里云用户权限操作
1,开启子用户
2,新建一个用户组(设置添加权限sms)
3,创建一个用户(具体来操作的账号)
4,得到AccessKey(id,密码)
注意:要将这个账号保存下来
开通阿里云短信服务
1,找到短信控制台面板
【不清楚的地方,可以看一下帮助文档】
添加短信模块
1,短信的具体内容
2,等待审核通过(需要正当的理由)
添加签名
1,公司的名称
2,等待审核通过(需要正当理由)
编写测试代码
1,新建一个SpringBoot项目
2,导入依赖
<!--发送短信-->
<dependency>
<groupId>com.aliyun groupId>
<sartifactId>aliyun-java-sdk-coreartifactId>
<version>4.0.3version>
dependency>
!--构建数据-->
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.62version>
dependency>
!--存用户的信息-->
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
3,测试代码
void contextLoads(){
//连接阿里云
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "用户的AccessKey ID", "密码");
IAcsClient client = new DefaultAcsClient(profile)
//构建请求!
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi,aliyuncs.com");//不要动
request.setversion("2017-05-25");//不要动
request.setAction("SendSms");
//自定义的参数(手机号,验证码,签名,模板!)
request.putQueryParameter("PhoneNumbers", "手机号");
request.putQueryParameter("SignName", "签名名称");//签名(要和之前申请的保持一致)
request.putQueryParameter("TemplateCode", "模板的code");//模板管理里的模板CODE
//构建一个短信的验证码
HashMap<String, object> map = new HashMap<>();
map.put ("code",2233)
request.putQueryParameter("TemplateParam", JSoNObject.toJSONString(map));
try{
CommonResponse response = client.getcommonResponse (request);
System.out.println(response.getData());
}catch(ServerException e){
e. printStackTrace();
} catch(ClientException e){
e. printstackTrace();
}
}
4,编写接口
public interface SendSms {
public boolean send(String phoneNum, String templateCode, Map<String, Object> code);
}
5,实现接口
@Service
public class SendSmsImpl implements SendSms{
@Override
public boolean send(String phoneNum, String templateCode, Map<String, Object> code){
//连接阿里云
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "用户的AccessKey ID", "密码");
IAcsClient client = new DefaultAcsClient(profile)
//构建请求!
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi,aliyuncs.com");//不要动
request.setversion("2017-05-25");//不要动
request.setAction("SendSms");
//自定义的参数(手机号,验证码,签名,模板!)
request.putQueryParameter("PhoneNumbers", "手机号");
request.putQueryParameter("SignName", "签名名称");//签名(要和之前申请的保持一致)
request.putQueryParameter("TemplateCode", "templateCode");//模板管理里的模板CODE
//构建一个短信的验证码
request.putQueryParameter("TemplateParam", JSoNObject.toJSONString(code));
try{
CommonResponse response = client.getcommonResponse (request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
}catch(ServerException e){
e. printStackTrace();
} catch(ClientException e){
e. printstackTrace();
return false;
}
}
}
6,调用接口实现业务
@RestController
@CrossOrigin//跨域支持
public class SmsApiController{
@Autowired
private SendSms sendSms;
@Autowired
private RedisTemplate<String,String> redisTemplate;
@GetMapping("/send/{phone}")
public String code(@PathVariable("phone")String phone){
//调用发送方法(模拟真实业务redis)
String code = redisTemplate.opsForValue().get(phone);
if(!StringUtils.isEmpty(code)){
return phone+":"+code+"已存在,还没过期";
}
//生成验证码并存储到redis中
code = UUID.randomUUID().toString().substring(0,4);
HashMap<String,Object> param = new HashMap<>();
param.put("code",code);
boolean isSend = sendSms.send(phone,"模板CODE",param);
if(isSend){
redisTemplate.opsForValue().set(phone,code,5,TimeUnit.SECONDS);
return phone+":"+code+"发送成功!";
}else{
return "发送失败!";
}
}
}
7,配置Redis
server.port=9090
spring.redis.host=127.0.0.1
spring.redis.port=6379
笔记参考自B站狂神说java:https://www.bilibili.com/video/BV1c64y1M7qN?t=2488
笔者也很是推崇这位up主