帮助文档:
https://help.aliyun.com/product/44282.html?spm=5176.10629532.0.0.38311cbeYzBm73
1、开通阿里云短信服务
2、添加签名管理与模板管理
(1)添加模板管理
选择 国内消息 - 模板管理 - 添加模板
点击提交,等待审核,审核通过后可以使用
(2)添加签名管理
选择 国内消息 - 签名管理 - 添加签名
点击添加签名,进入添加页面,填入相关信息
注意:签名要写的有实际意义
(3)点击提交,等待审核,审核通过后可以使
3、编写发送短信接口
1、在service-msm的pom中引入依赖
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> </dependency> </dependencies>
2、编写controller,根据手机号发送短信
-
@RestController
-
@RequestMapping(
"/msmservice/msm")
-
@CrossOrigin
-
public
class
MsmController {
-
-
@Autowired
-
private
MsmService msmService;
-
-
@Autowired
-
private
RedisTemplate<
String,
String> redisTemplate;
-
-
//发送短信的方法
-
@GetMapping(
"/send/{phone}")
-
public R
sendMsm(
@PathVariable String phone){
-
//从redis获取验证码,如果能获取,直接返回
-
String code = redisTemplate.
opsForValue().
get(phone);
-
if (!
StringUtils.
isEmpty(code)){
-
return R.
ok();
-
}
-
-
//获取不到就阿里云发送
-
//生成随机值,并传递给阿里云短信,让他转发给手机
-
code =
RandomUtil.
getSixBitRandom();
-
HashMap<
String,
Object> map =
new
HashMap<>();
-
map.
put(
"code",code);
-
-
//调用service中发送短信的方法
-
boolean isSend = msmService.
sendMsm(map, phone);
-
if (isSend){
-
//如果发送成功,把发送成功的code验证码保存到redis中,并设置有效时间,设置5分钟过期
-
redisTemplate.
opsForValue().
set(phone,code,
5,
TimeUnit.
MINUTES);
-
return R.
ok();
-
}
else {
-
return R.
error().
message(
"短信发送失败");
-
}
-
-
}
-
-
}
3、编写service
- service接口
-
public
interface
MsmService {
-
//发送短信的方法
-
boolean
sendMsm(
HashMap<
String,
Object> map,
String phone);
-
}
- serviceImpl
-
@Service
-
public
class
MsmServiceImpl
implements
MsmService {
-
-
//发送短信的方法
-
@Override
-
public
boolean
sendMsm(
HashMap<String, Object> map, String phone) {
-
if (
StringUtils.
isEmpty(phone))
return
false;
-
//参数1:地域节点
-
//参数2:AccessKey ID
-
//参数3:AccessKey Secret
-
DefaultProfile profile =
DefaultProfile.
getProfile(
"default",
"LTAI4GBABS7Sq8MLf2RNwLuu",
"ynfsD31FLdcRoQVFSIdHP7AeoKaf4o");
-
DefaultAcsClient client =
new
DefaultAcsClient(profile);
-
-
//设置相关固定参数
-
CommonRequest request =
new
CommonRequest();
-
//request.setProtocol(ProtocolType.HTTPS);
-
request.
setSysMethod(
MethodType.
POST);
//提交方式,默认不能改
-
request.
setSysDomain(
"dysmsapi.aliyuncs.com");
//请求阿里云哪里,默认不能改
-
request.
setSysVersion(
"2017-05-25");
//版本号
-
request.
setSysAction(
"SendSms");
//请求哪个方法
-
-
//设置发送相关参数
-
request.
putQueryParameter(
"PhoneNumbers",phone);
//设置要发送的【手机号】
-
request.
putQueryParameter(
"SignName",
"阿昌日语在线教育网站");
//申请阿里云短信服务的【签名名称】
-
request.
putQueryParameter(
"TemplateCode",
"SMS_212711286");
//申请阿里云短信服务的【模版中的 模版CODE】
-
-
//要求传递的code验证码为jason格式,可以使用JSONObject.toJSONString()将map转为json格式
-
request.
putQueryParameter(
"TemplateParam",
JSON
Object.
toJSONString(map));
-
-
//最终发送
-
try {
-
CommonResponse response = client.
getCommonResponse(request);
-
return response.
getHttpResponse().
isSuccess();
-
}
catch (
ClientException e) {
-
e.
printStackTrace();
-
return
false;
-
}
-
-
}
-
-
}
转载:https://blog.csdn.net/weixin_60257072/article/details/128120742
查看评论