一、pom.xml 引入依赖
<!--阿里云短信-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.24</version>
</dependency>
二、初始化账号Client
/**
* 阿里云短信配置
*/
//环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID
public static final String ACCESS_KEY_ID="ALIBABA_CLOUD_ACCESS_KEY_ID";
//环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET
public static final String ACCESS_KEY_SECRET="ALIBABA_CLOUD_ACCESS_KEY_SECRET";
//模板code
public static final String TEMPLATE_CODE="SMS_123456789";
//签名
public static final String SIGN_NAME="TEST";
public static Client createClient() throws Exception {
Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(ACCESS_KEY_ID)
.setAccessKeySecret(ACCESS_KEY_SECRET);
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
config.endpoint = "dysmsapi.aliyuncs.com";
return new Client(config);
}
三、生成随机验证码(工具类)
public static String generateSMSCode(int length) {
if (length < 1) {
throw new IllegalArgumentException("验证码生成错误!");
}
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int randomDigit = random.nextInt(10);
sb.append(randomDigit);
}
return sb.toString();
}
四、发送短信
public Map<String,Object> sendSms(String phoneNumber) {
try {
String smsCode = generateSMSCode(6);
String msg="{'code':";
Client client = createClient();
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers(phoneNumber)
.setTemplateCode(TEMPLATE_CODE)
.setTemplateParam(msg.concat("'"+smsCode.concat("'}")))
.setSignName(SIGN_NAME);
SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
if("OK".equals(sendSmsResponse.getBody().getCode())){
saveCode(phoneNumber,smsCode);
return ResultUtils.getSuccessResultData("短信发送成功!");
}
} catch (TeaException error) {
//初始化配置有问题,会有此处异常
logger.error("阿里云发送短信失败!error:{}",error.getMessage());
} catch (Exception e) {
logger.error("发送短信失败!error:{}",e.getMessage());
}
return ResultUtils.getFaildResultData("短信发送失败!");
}