添加用户组和用户
首先登陆阿里云 在个人头像这里可以看到AccessKey管理
点击进去 添加一个用户 然后将一个用户添加进用户组下
创建用户(开启子用户):
给用户组添加权限 并拿到AccessKey
点击刚刚创建的用户 会看到用户的具体的信息,然后拿到AccessKey和密码即可用来认证和授权
注意:AccessKey和AccessKey Secret 记得保存下来,千万不要泄露。。。
开通阿里云短信服务
添加签名和模版
添加签名
添加模版
注意:添加完签名和模后都必须要等待审核通过!!!
现在我们已经有了授权码和密码、签名和模版!!!即可开始使用了!!!
编写代码开始测试 非常简单
即可看到阿里云短信服务的SDK,Java、PHP等语言的都有!!
文档连接:https://help.aliyun.com/document_detail/112148.html?spm=a2c4g.11174283.6.657.5e4f2c42B98bHY
创建springboot项目导入依赖
<!--导入redis存储验证码-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--导入web方便测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--导入阿里云短信服务sdk-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
<!-- 短信验证码那一块需要传入JSON字符串-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
配置文件
server:
port: 8080
spring:
redis:
host: redis的host地址
port: 端口号
API Demo文档
https://api.aliyun.com/?spm=a2c4g.11186623.2.12.3fcb7f20YiuHRq#/?product=Dysmsapi&lang=JAVA
可以看到文档里面的demo
我们复制进代码里面进行测试 可以仔细看一下需要改的地方哦!!!
package com.yangzihao.springbootsms;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class SpringbootSmsApplicationTests {
@Test
void contextLoads() {
//连接阿里云 输入之前生成的AccessKey和密码即可
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "这里写密钥", "这里写秘钥的密码"); //前面的cn-hangzhou不要变 后面填写授权码和密码
IAcsClient client = new DefaultAcsClient(profile);
//构建请求
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");//这里不要动
request.setSysVersion("2017-05-25");//这里不要动
request.setSysAction("AddSmsSign");
//自定义(参数、签名、模版、验证码、手机号!!) 参数不要瞎填
request.putQueryParameter("PhoneNumbers", "1539280xxxx"); //这里填写要发送到的手机号
request.putQueryParameter("SignName", "常安JAVA学习网站"); //签名 (刚刚添加的签名)
request.putQueryParameter("TemplateCode", "SMS_204111877"); //模版 (刚刚添加的模版的CODE)
//构建一个短信验证码
Map<String,Object> map=new HashMap<>();
map.put("code",2233); //短信 这里先写死进行测试
request.putQueryParameter("TemplateParam", JSON.toJSONString(map)); //这里的验证码参数需要传入JSON字符串
try {
CommonResponse response = client.getCommonResponse(request);//发送
System.out.println(response.getData());//响应 验证是否发送成功
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
直接附上真实的业务场景吧!!!
controller表现层
package com.yangzihao.springbootsms.controller;
import com.yangzihao.springbootsms.service.SmsSend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@RestController
@CrossOrigin //跨域支持
public class SmsSendController {
@Autowired
private SmsSend smsSend;
@Autowired
private RedisTemplate<String,String> redisTemplate;
/*请求带上手机号、模板code、验证码code*/
@RequestMapping("/sendCod/{phone}")
public String smsSend(@PathVariable("phone") String phoneNumbers){
String code = redisTemplate.boundValueOps(phoneNumbers).get();
if (!StringUtils.isEmpty(code)){
return phoneNumbers+":"+code+"还没过期";
}
//生成随机验证码并存储
code = UUID.randomUUID().toString().substring(0, 4);
boolean isSend = smsSend.smsSend(phoneNumbers, "SMS_204111877", code);//发送验证码
if (isSend){
redisTemplate.boundValueOps(phoneNumbers).set(code,2, TimeUnit.MINUTES); //发送成功即存入redis
return phoneNumbers+":"+code+"发送成功";
}else {
return phoneNumbers+":"+code+"发送失败";
}
}
}
service业务层
package com.yangzihao.springbootsms.service.impl;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.yangzihao.springbootsms.service.SmsSend;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@Service
public class SmsSendImpl implements SmsSend {
@Override
public boolean smsSend(String phoneNumbers, String templateCode, String code) {
//连接阿里云 输入之前生成的AccessKey和密码即可
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "这里写之前生成的秘钥", "这里写之前生成秘钥的密码");
IAcsClient client = new DefaultAcsClient(profile);
//构建请求
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");//这里不要动
request.setSysVersion("2017-05-25");//这里不要动
request.setSysAction("AddSmsSign");
//自定义(参数、签名、模版、验证码、手机号!!) 参数不要瞎填
request.putQueryParameter("PhoneNumbers", phoneNumbers); //手机号
request.putQueryParameter("SignName", "常安JAVA学习网站"); //签名 (刚刚添加的签名)
request.putQueryParameter("TemplateCode", templateCode); //模版 (刚刚添加的模版的CODE)
//构建一个短信验证码
Map<String,Object> map=new HashMap<>();
map.put("code",code);
request.putQueryParameter("TemplateParam", JSON.toJSONString(map)); //这里的验证码参数需要传入JSON字符串
try {
CommonResponse response = client.getCommonResponse(request);//发送
System.out.println(response.getData());//响应
return response.getHttpResponse().isSuccess(); //响应发送成功则返回true
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
就是这么简单、恭喜你,完结撒花!!!