阿里云SMS服务使用步骤:
阿里云短信服务步骤篇
- 开启子用户
- 新建一个用户组
- 创建一个用户
- 得到AccessKey(id和密码)
- 找到短信控制台控制面板
- 找到帮助文档
- 添加短信模板
- 添加签名
- 编写代码
代码篇
- 导入依赖
<!--pom依赖-->
<!--阿里云sdk-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
<!--lang3工具依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--spring集成redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 获取私钥。(id和密码)
接口
package com.example.dzk.service;
import java.util.Map;
public interface SmsService {
/**
*@描述
*@参数 phoneNum 手机号 、 templateCode 模板、 code验证码
*@返回值 布尔 true发送成功。 false发送失败
*@author dzk
*/
boolean sendSmsMsg(String phoneNum , String templateCode, Map code);
}
实现
package com.example.dzk.service.impl;
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.example.dzk.service.SmsService;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class SmsServiceImpl implements SmsService {
/**
* @param phoneNum
* @param templateCode
* @param code
* @描述 阿里云sms短信服务接口
* @参数 phoneNum 手机号 、 templateCode 模板、 code验证码
* @返回值 布尔
* @author dzk
*/
@Override
public boolean sendSmsMsg(String phoneNum, String templateCode, Map code) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","<accessKeyId>","<accessSecret>");
IAcsClient client =new DefaultAcsClient(profile);
CommonRequest request =new CommonRequest();
request.setMethod(MethodType.POST);
//不要动
request.setDomain("dysmsapi.aliyun.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
//自己构建
//自定义参数 (手机号、验证码、签名、模板)
request.putQueryParameter("RegionId","ch-hangzhou");
//手机号
request.putQueryParameter("PhoneNumbers",phoneNum);
//签名
request.putQueryParameter("SignName","阿里云上创建的签名的值");
//模板 --sms上自己创建短信模板的值
request.putQueryParameter("TemplateCode",templateCode);
//短信验证码 --自己生成的验证码,根据需要看是四位还是六位
request.putQueryParameter("TemplateCode", code.get("code").toString());
//下方代码不动
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println("response.getData() = " + response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
}catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
controller
package com.example.dzk.controller;
import com.example.dzk.service.SmsService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
*@描述 阿里云短信服务
* 1. 开启子用户
* 2. 新建一个用户组
* 3. 创建一个用户
* 4. 得到AccessKey(id和密码)
* 5. 找到短信控制台控制面板
* 6. 找到帮助文档
* 7. 添加短信模板
* 8. 添加签名
* 9. 编写代码
*@author dzk
*/
/**
* 跨域
*/
@CrossOrigin
@RestController
public class SmsController {
@Autowired
SmsService smsService;
//此处引入了 redis
@Autowired
RedisTemplate<String, String> redisTemplate;
@GetMapping("sendSms")
String code(String phone) {
//模拟真实业务
String code = redisTemplate.opsForValue().get(phone);
//此处验证验证码是否存在redis中
if (!StringUtils.isEmpty(code)) {
return phone + ":" + code + "已经存在,未过期";
}
//生成验证码
code = UUID.randomUUID().toString().substring(0, 4);
HashMap<Object, Object> temp = new HashMap<>();
temp.put("code", code);
boolean isSend = smsService.sendSmsMsg(phone, "短信模板code", temp);
if (isSend) {
//如果发送成功就给redis 中 以 手机号为key 存放 验证码,过期时长为5分钟
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
return phone + ":" + code + "发送成功! ";
} else {
return "发送失败";
}
}
}
此文章是我开发过程的一个记录,方便我日后学习和复盘。若能帮到你不胜荣幸。