forked from kidgrow-microservices-platform

zhaoxiaohao
2020-05-22 f21c78ae0e3c410c6ba5be77277b5b491aca3af1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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());
        }
    }
}