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()); } } }