package com.kidgrow.sms.aliyun.controller;
|
|
import com.kidgrow.common.base.ResponseCode;
|
import com.kidgrow.common.model.ResultBody;
|
import com.kidgrow.redis.template.RedisRepository;
|
import com.kidgrow.sms.client.SmsClient;
|
import com.kidgrow.sms.exception.SmsException;
|
import com.kidgrow.sms.service.AliyunSmsService;
|
import com.kidgrow.sms.model.SmsModel;
|
import com.kidgrow.sms.util.AliyunSmsUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.List;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: <br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/17 09:15 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
@RestController
|
@RequestMapping("sms")
|
public class SmsController implements AliyunSmsService {
|
|
@Autowired
|
private SmsClient smsClient;
|
|
@Autowired
|
private RedisRepository redisRepository;
|
|
@Value("${sms.verificationCode.timeOut:180}")
|
private Long timeOut;
|
|
@Value("${sms.verificationCode.prefix:default}")
|
private String smsPrefix;
|
|
/**
|
* 发送短信验证码
|
*
|
* @param smsModel
|
*/
|
@Override
|
public ResultBody sendVerificationCode(@RequestBody SmsModel smsModel) {
|
String phoneNumber = smsModel.getPhoneNumber();
|
String key = smsModel.getKey();
|
if (StringUtils.isBlank(phoneNumber) || StringUtils.isBlank(key)) {
|
return ResultBody.fail(ResponseCode.ERROR_PARAMS, "手机号或短信模板不能为空!");
|
}
|
if (!AliyunSmsUtils.isMobile(phoneNumber)) {
|
return ResultBody.fail(ResponseCode.ERROR_PARAMS, "手机号格式不正确!");
|
}
|
try {
|
// 发送验证码
|
Integer code = smsClient.sendVerificationCode(key, phoneNumber);
|
// 缓存验证码和有效期
|
redisRepository.setExpire(smsPrefix + phoneNumber, code.toString(), timeOut);
|
// redisRepository.expire(smsPrefix + phoneNumber, timeOut);
|
return ResultBody.ok();
|
} catch (SmsException smsEx) {
|
smsEx.printStackTrace();
|
return ResultBody.failed().msg(smsEx.getMessage());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultBody.failed().msg(e.getMessage());
|
}
|
}
|
|
/**
|
* 验证码校验
|
*
|
* @param smsModel
|
*/
|
@Override
|
public ResultBody validateVerificationCode(@RequestBody SmsModel smsModel) {
|
String phoneNumber = smsModel.getPhoneNumber();
|
String code = smsModel.getCode();
|
if (StringUtils.isBlank(phoneNumber) || StringUtils.isBlank(code)) {
|
return ResultBody.failed(ResponseCode.ERROR_PARAMS, "手机号或验证码不能为空!");
|
}
|
try {
|
if (redisRepository.exists(smsPrefix + phoneNumber)) {
|
String rightCode = (String) redisRepository.get(smsPrefix + phoneNumber);
|
if (code.equals(rightCode)) {
|
// 验证成功 移除缓存验证码
|
redisRepository.del(smsPrefix + phoneNumber);
|
return ResultBody.ok();
|
} else {
|
return ResultBody.failed(ResponseCode.ERROR_PARAMS, "验证码不正确!");
|
}
|
} else {
|
return ResultBody.failed(ResponseCode.ERROR_PARAMS, "验证码已失效!");
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultBody.failed("系统错误");
|
}
|
}
|
|
/**
|
* 发送手机短信消息
|
*
|
* @param smsModel
|
* @return
|
*/
|
@Override
|
public ResultBody sendSmsMsg(SmsModel smsModel) {
|
List<String> phoneNumbers = smsModel.getPhoneNumbers();
|
String key = smsModel.getKey();
|
// if ((phoneNumbers == null || phoneNumbers.isEmpty()) || StringUtils.isBlank(key)) {
|
// return ResponseBuilder.buildResultError(ResponseCode.ERROR_PARAMS, "手机号或短信模板不能为空!");
|
// }
|
|
try {
|
// 发送手机短信消息
|
smsClient.sendSmsMsg(key, smsModel.getParams(), phoneNumbers);
|
return ResultBody.ok();
|
} catch (SmsException smsEx) {
|
smsEx.printStackTrace();
|
return ResultBody.failed(smsEx.getMessage());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultBody.failed(e.getMessage());
|
}
|
}
|
}
|