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
*
* @Description:
* @Project:
* @CreateDate: Created in 2020/2/17 09:15
* @Author: liuke
*/
@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 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());
}
}
}