重要代码在最后面,前面是一些判断步骤,可直接省略
注释突出的地方需要注意,看注释!!!
<!-- 阿里短信 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.4</version>
</dependency>
import back.minsu.entity.Codes;
import back.minsu.param.UserParam;
import back.minsu.service.UserService;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@Configuration
@RequestMapping(value = "code")
@RestController
public class CodeUtils {
@Autowired
UserService userService;
@PostMapping(value = "/generateCode")
public Result generateCode(@RequestBody UserParam param) throws Exception {
String phone = param.getPhone();
if(phone == null && phone.equals("")){
return Result.error("请输入手机号");
}
Codes appCodeApi = userService.getCode(phone);
if (StringUtils.isEmpty(appCodeApi)){
String code = aliCode(param.getPhone());
param.setCode(code);
param.setNum(1);
userService.saveCode(param);
} else {
System.out.println(123);
Date obtainTime = appCodeApi.getAddTime();
if (new Date().getTime() - obtainTime.getTime() < 60*1000){
return Result.error("1分钟内只能请求一次");
}
if (appCodeApi.getNum() >= 5){
return Result.error("获取验证码次数过多!").build("count",appCodeApi.getNum());
} else {
String code = aliCode(param.getPhone());
appCodeApi.setCode(code);
appCodeApi.setNum(appCodeApi.getNum() + 1);
userService.saveCode1(appCodeApi);
}
}
return Result.ok("state","获取成功").build("count",(appCodeApi != null ? appCodeApi.getNum() : 1));
}
public boolean checkCode(String phone, String code) {
boolean res = true;
UserParam appCodeApi = userService.selectPhone(phone);
if (appCodeApi != null) {
if (appCodeApi.getCode().equals(code)) {
if (System.currentTimeMillis() > appCodeApi.getAddTime().getTime()+5*60*1000) {
res = false;
}
} else {
res = false;
}
} else {
res = false;
}
return res;
}
public String aliCode(String phone) throws ClientException {
int codeInt = (int)((Math.random()*9+1)*100000);
String i = String.valueOf(codeInt);
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
final String product = "Dysmsapi";
final String domain = "dysmsapi.aliyuncs.com";
final String accessKeyId = "***********************";
final String accessKeySecret = "***********************";
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setMethod(MethodType.POST);
request.setPhoneNumbers(phone);
request.setSignName("小牛邦");
request.setTemplateCode("SMS_187105350");
request.setTemplateParam("{\"code\":\""+i+"\"}");
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
System.out.println("code:"+request.getTemplateParam());
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
System.out.println("短信发送成功!");
}else {
System.out.println("短信发送失败!");
}
return String.valueOf(i);
}
}