Commit 0d358b27 authored by liuyang's avatar liuyang

添加验证码短信发送接口

parent 6ebb92ac
package com.qkdata.biz.sms.controller;
import com.google.common.collect.Maps;
import com.qkdata.biz.common.BizConstants;
import com.qkdata.biz.sms.service.SmsService;
import com.qkdata.biz.sms.vo.SendValCodeReq;
import com.qkdata.biz.sms.vo.SmsV2Condition;
import com.qkdata.common.annotation.SysLog;
import com.qkdata.common.base.model.Result;
import com.qkdata.common.util.RandomDigitGenerator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Api(tags = "发送短信服务")
@RestController
@RequestMapping("/api/sms")
public class SmsController {
@Autowired
private SmsService smsService;
@Autowired
@Qualifier("stringRedisTemplate")
private StringRedisTemplate redisTemplate;
@ApiOperation("发送验证码")
@SysLog("发送验证码")
@GetMapping("/sendCode")
public Result<String> sendCode(@RequestBody @Validated SendValCodeReq req){
Map<String,Object> param = Maps.newHashMap();
String captcha = RandomDigitGenerator.generate(6);
param.put("code",captcha);
SmsV2Condition condition = new SmsV2Condition(req.getMobile(), BizConstants.SMS_TEMPLATE_CODE,param,null);
smsService.sendSmsV3(condition);
//将captcha存入Redis,过期时间为5分钟
redisTemplate.opsForValue().set(BizConstants.MOBILE_CAPTCHA_PREFIX + req.getMobile(),captcha,60*5, TimeUnit.SECONDS);
return Result.succeed("ok");
}
}
package com.qkdata.biz.sms.service;
import com.qkdata.biz.sms.vo.SmsRequest;
import com.qkdata.biz.sms.vo.SmsResponse;
import com.qkdata.biz.sms.vo.SmsV2Condition;
import com.qkdata.common.base.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;
@Slf4j
@Service
public class SmsService {
@Value("${sms.api.v3}")
private String api;
@Autowired
private RestTemplate restTemplate;
public void sendSmsV3(SmsV2Condition condition) {
SmsRequest smsRequest = new SmsRequest(Collections.singletonList(condition));
SmsResponse smsResponse = restTemplate.postForObject(api, smsRequest, SmsResponse.class);
if (smsResponse == null || smsResponse.hasError()) {
log.error("短信发送失败:{}", smsResponse, toString());
throw new BusinessException("短信发送失败");
}
}
}
package com.qkdata.biz.sms.vo;
import com.qkdata.common.constants.ValidatorPattern;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Data
public class SendValCodeReq {
@NotBlank(message = "请填写手机号")
@Pattern(regexp = ValidatorPattern.MOBILE_PATTERN, message = "手机号格式不正确")
private String mobile;
}
package com.qkdata.biz.sms.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmsRequest {
private List<SmsV2Condition> conditions;
}
package com.qkdata.biz.sms.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class SmsResponse {
private Integer code;
private String message;
private Map<String, Object> data = new LinkedHashMap<>();
private List<Object> errors;
public boolean hasError() {
return (code == null || code.intValue() != 0);
}
}
package com.qkdata.biz.sms.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SmsV2Condition {
/**
* 要发送的手机号
*/
private String mobile;
/**
* 模板编号
*/
private String code;
/**
* 模板参数
*/
private Map<String,Object> params;
/**
* outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
*/
private String outId;
private String notifyUrl;
public SmsV2Condition(String mobile, String code, Map<String,Object> params, String outId) {
this.mobile = mobile;
this.code = code;
this.params = params;
this.outId = outId;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment