前提工作:
1、注册阿里云账号
2、开通短信服务
3、账号需要充值一点金额, 短信服务是收费的
4、学习官方文档
一、注册阿里云账号
自己注册, 略
二、开通短信服务
1、登陆阿里云控制台, 搜索短信服务
2、开通短信服务我这里已经开通过了, 第一次进入会提示开通服务, 点击开通即可。
3、学习官方文档
官方文档是我们学习新技术最好的参考资料, 这里会给出所有的样例, 以及向我们详细的介绍这项技术。 (好多技术文档都是英文的, 阅读起来比较费劲, 直接就把一部分同学劝退了, 好在阿里云是国产。。。)找到文档, 之后就开始阅读把
链接:
https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11186623.6.558.508715ecm4kLnC
点击帮助文档, 哇塞 , 这么全!新手必看, 1 、2 、 3、4 还担心学不会嘛!
点击第一步
阅读步骤后, 我们发现获取 AccessKey、 和创建模板签名是管加你步骤, 熟悉使用第三方服务的同学对AccessKey都比较了解了, 它就是相当于我们的账号, 还有一个对应的密码,我们在编码的时候不可能扫码登陆阿里云把, 不现实, 所有就有了替代产品, AccessKey, 这个AccessKey去自己的阿里云控制台就可以获取到了。
获取 AccessKey
自己点击获取, 一定要注意保密。
创建短信模板和签名
先分析一波短信验证码, 这个每天见, 啊啊啊哈哈哈,
签名:
【 短信签名, 一般公司的名字, 自己平台的名字, 官方点的】
模板:
就是你具体要发送的内容了
了解之后, 就开始创建把, 返回到我们的短信控制台, 点击创建
1、添加签名
注意要正式一点, 我已经添加过一个了, 不可以添加了。。。。
2、添加模板
依旧傻瓜式操作, 依次填写内容,开始申请。
成功界面如下:
开始快乐编码把!
编写微服务
1、学习官方 SDK
2、编码, 微服务
一、学习官方SDK
我们想要的东西, 在控制台首页全部都有!!!!
点击进去
你会发现, 直接就有生成的代码, 没错!!!阿里就是这么强大!!!,添写必要的参数 , Run !!!
实例:
结果:
哈哈哈, 激动吗, 生活中的验证码就是这样发类 ,简单把
现在我们已经完成了简单的发送验证码了, 接下来就是编写微服务。
二、编写微服务
1、导入依赖
2、复制代码
就是这么真实, 复制代码!!!
点击 SDK使用说明
https://help.aliyun.com/document_detail/66496.html?spm=a2c1g.8271268.10000.132.772fdf25o9SfBZ
导入依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码
@Test
void contextLoads() {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", " ", " ");
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", " ");
HashMap<Object, Object> map = new HashMap<>();
map.put("code", "1321");
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();
}
}
填写你的信息, 即可测试!!!
三、集成 redis , 成为 微服务, 我们架构中的一个小模块!!!
1、配置文件
spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=123456
2、接口
public interface sendMsg {
boolean send(String phone, String templatecode, HashMap<String, Object> map);
}
3、实现
@Override
public boolean send(String phone, String templatecode, HashMap<String, Object> map) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", " ", " ");
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", phone);
request.putQueryParameter("SignName", " ");
request.putQueryParameter("TemplateCode", templatecode);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return true;
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
4、Controller
@Autowired
sendMsg sendMsg;
@Autowired
RedisTemplate<String, String> redisTemplate;
@GetMapping("/send/{phone}")
public String code(@PathVariable("phone") String phone) {
String code = redisTemplate.opsForValue().get(phone);
if (!StringUtils.isEmpty(code)) {
return phone + ":" + code + "已经存在";
}
code = UUID.randomUUID().toString().substring(0, 4);
HashMap<String, Object> param = new HashMap<>();
param.put("code", code);
boolean issend = sendMsg.send(phone, " ", param);
if(issend) {
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS);
return phone + ":" + code + "发送成功";
}else{
return phone + ":" + code + "发送失败";
}
}
Nice !!!
提示: 短信服务是收费的, 不过阿里已经做了防止盗刷。(代码里面也做了处理)
小结
集成第三方服务其实仔细阅读官方文档即可, 导入相应的依赖, 直接把实例代码拿过来用就行了, 超级方便快捷,简直就是 CV工程师的快乐源泉啊。
https://www.bilibili.com/video/BV1c64y1M7qN