SpringBoot使用阿里云短信服务

SpringBoot使用阿里云短信服务

了解阿里云用户权限操作

SpringBoot使用阿里云短信服务_第1张图片

1,开启子用户

SpringBoot使用阿里云短信服务_第2张图片

SpringBoot使用阿里云短信服务_第3张图片

2,新建一个用户组(设置添加权限sms)

SpringBoot使用阿里云短信服务_第4张图片

SpringBoot使用阿里云短信服务_第5张图片

3,创建一个用户(具体来操作的账号)

SpringBoot使用阿里云短信服务_第6张图片

4,得到AccessKey(id,密码)

SpringBoot使用阿里云短信服务_第7张图片

注意:要将这个账号保存下来

开通阿里云短信服务

1,找到短信控制台面板

SpringBoot使用阿里云短信服务_第8张图片

【不清楚的地方,可以看一下帮助文档】

添加短信模块

1,短信的具体内容

2,等待审核通过(需要正当的理由)

SpringBoot使用阿里云短信服务_第9张图片

SpringBoot使用阿里云短信服务_第10张图片

添加签名

1,公司的名称

2,等待审核通过(需要正当理由)

SpringBoot使用阿里云短信服务_第11张图片

编写测试代码

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主

你可能感兴趣的:(Java开发中实用功能)