发送短信工具类
@Component
@EnableConfigurationProperties({SmsProperties.class})
public class SmsUtils {
@Autowired
private SmsProperties smsProperties;
private String code = "";
public void sendSms(String phoneNum) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", this.smsProperties.getAccessKeyId(), this.smsProperties.getAccessKeySecret());
IAcsClient client = new DefaultAcsClient(profile);
//生成6位数字字符串短信验证码
code = NumberUtils.generateCode(6);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", phoneNum);
request.putQueryParameter("SignName", "梦叶");
request.putQueryParameter("TemplateCode", "SMS_195705618");
request.putQueryParameter("TemplateParam", "{code:" + code + "}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
//返回验证码方法
public String getCode() {
return code;
}
配置文件
aliyun:
sms:
accessKeyId: *******************
accessKeySecret: *******************
读取配置文件
@Data
@ConfigurationProperties(prefix = "aliyun.sms")
public class SmsProperties {
private String accessKeyId;
private String accessKeySecret;
}
生成验证码工具类
public class NumberUtils {
public static boolean isInt(Double num) {
return num.intValue() == num;
}
/**
* 判断字符串是否是数值格式
*
* @param str
* @return
*/
public static boolean isDigit(String str) {
if (str == null || str.trim().equals("")) {
return false;
}
return str.matches("^\\d+$");
}
/**
* 将一个小数精确到指定位数
*
* @param num
* @param scale
* @return
*/
public static double scale(double num, int scale) {
BigDecimal bd = new BigDecimal(num);
return bd.setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
// 从字符串中根据正则表达式寻找,返回找到的数字数组
public static Double[] searchNumber(String value, String regex) {
List<Double> doubles = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
MatchResult result = matcher.toMatchResult();
for (int i = 1; i <= result.groupCount(); i++) {
doubles.add(Double.valueOf(result.group(i)));
}
}
return doubles.toArray(new Double[doubles.size()]);
}
/**
* 生成指定位数的随机数字
*
* @param len
* @return
*/
public static String generateCode(int len) {
len = Math.min(len, 8);
int min = Double.valueOf(Math.pow(10, len - 1)).intValue();
int num = new Random().nextInt(Double.valueOf(Math.pow(10, len + 1)).intValue() - 1) + min;
return String.valueOf(num).substring(0, len);
}
}