1.在项目中创建短信服务模块
2.进入阿里云控制台
1.申请签名管理
2.申请模板管理
模板内容中显示短信内容
3.引入相关依赖
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> </dependency> </dependencies>
4.编写Service层逻辑
//可以使用redis来设置验证码有效时间
controller层
{ @Autowired private MsmService msmService; @Autowired private RedisTemplate<String,String> redisTemplate; //发送短信方法 @GetMapping("send/{phone}") public R sendMsm(@PathVariable String phone) throws ClientException { //现在redis中获取验证码,如果获取直接返回 String code = redisTemplate.opsForValue().get(phone); if (!StringUtils.isEmpty(code)){ return R.ok(); } //获取不到在进行发送短信 //生成随机的值,传递给阿里云进行发送 code = RandomUtil.getFourBitRandom(); Map<String,Object> param = new HashMap<>(); param.put("code",code); //调用service调用短信发送方法 Boolean isSend = msmService.send(param,phone); if (isSend){ //发送成功,把发送的验证码放到redis中 //设置五分钟的有效时长 redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES); return R.ok(); } return R.error().message("短线发送失败"); } }
service层
public Boolean send(Map<String, Object> param, String phone) throws ClientException { DefaultProfile profile = DefaultProfile.getProfile("default", "LTAI5t9poxhTjaYmgNAQi2ep", "ot4MuXpI5g4koZaQXDgX3sDUGmLY9b"); DefaultAcsClient client = new DefaultAcsClient(profile); //设置相关参数 CommonRequest request = new CommonRequest(); //request.setProtocol(ProtocolType.HTTPS); 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",""); //模板名称 request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码 //最终的发送 CommonResponse response = client.getCommonResponse(request); return response.getHttpResponse().isSuccess(); }