一、使用步骤
1、申请阿里云账号并认证
链接地址:https://www.aliyun.com/product/sms
2、创建一个新的AccessKeys 包含AccessKey ID 和Access Key Secret 记得截图保存 (最重要的一步)
3、新建签名和短信模板
因为阿里照顾到开发人员使用短信服务 所以可以 选择通用场景 不需要上传材料!
模板选择 注:个人用户只能选择验证码 其他无法通过申请
项目配置AccessKey ID 和Access Key Secret
AccessKey配置类
@Configuration
@PropertySource(value="classpath:application.yml")
public class SmsConfig {
public static String accessKeyID;
public static String AccessKeySecret;
public String getAccessKeyID() {
return accessKeyID;
}
@Value("${aliyunSms.AccessKeyID}")
public void setAccessKeyID(String accessKeyID) {
SmsConfig.accessKeyID = accessKeyID;
}
public String getAccessKeySecret() {
return AccessKeySecret;
}
@Value("${aliyunSms.AccessKeySecret}")
public void setAccessKeySecret(String accessKeySecret) {
SmsConfig.AccessKeySecret = accessKeySecret;
}
}
创建请求工具类 我写了登录和注册请求验证码 这里只放出登录的模板
登录验证码生成请求工具类
public class SmsLoginRequest {
public static int code ;
private static Log logger= LogFactory.getLog(SmsRegisteRequest.class);
public static CommonRequest generateSmsRequest(String phone){
//随机生成六位验证码
code = (int)((Math.random()*9+1)*100000);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
//目前阿里最新的设置请求体的方式
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers",phone );
request.putQueryParameter("SignName", 签名);
request.putQueryParameter("TemplateCode", 模板code);
request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}");
return request;
}
}
最后controller层 短信发送方法
结合了Redis缓存
/**
* 发送验证码
*
* @return
*/
@RequestMapping(value = "/sendSms", method = RequestMethod.POST)
@Transactional(rollbackFor = MyException.class)
public RetResult<?> sendVerificationCode(@RequestBody UserBO userBO)throws MyException {
//短信登录验证
SmsUtil.sendLoginSms(userBO.getPhone());
int loginCode = SmsLoginRequest.code;
//将code存入缓存 并设置过期时间为 1分钟
stringRedisTemplate.opsForValue().set(userBO.getPhone(), String.valueOf(loginCode));
stringRedisTemplate.expire(userBO.getPhone(), 1, TimeUnit.MINUTES);
if (loginCode <= 0) {
throw new MyException("验证码发送失败!");
}
return RetResponse.makeOKRsp("短信验证码已发送,请在1分钟内确认!");
}
源码地址: https://github.com/MandalasWang/sms-server