赞
踩
1.查看阿里云短信服务文档使用指引:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.8d482c42vJiVOI ,开通阿里云短信服务
2.获取到 AccessKey ID 和 AccessKey Secret
AccessKey ID 用于标识用户。
AccessKey Secret 是用来验证用户的密钥。AccessKey Secret必须保密。
3.创建签名和模板
4.使用官方提供的API,进行封装 SendSms.java
@Component public class SendSms { @Autowired RedisUtils redisUtils; public static final String REDIS_KEY_PREFIX_AUTH_CODE = "portal:authCode:"; public static final String REDIS_KEY_PREFIX_ORDERID = "portal:orderId:"; //验证码超期时间 public static Long AUTH_CODE_EXPIRE_SECONDS = 90L; private static final String ACCESS_KEY_ID = "你的ACCESS_KEY_ID"; private static final String SYS_DOMIN = "dysmsapi.aliyuncs.com"; private static final String ACCESS_SECRET = "你的ACCESS_SECRET"; private static final String SIGN_NAME = "你的签名"; private static final String TEMPLATE_CODE = "你的模板编号"; //public static void main(String[] args) { // send("手机号"); //} /** * time:2020/12/4 生成六位验证码 */ public CommonResponse send(String phone) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_SECRET); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain(SYS_DOMIN);//固定值 request.setSysVersion("2017-05-25");//固定值 request.setSysAction("SendSms");//选择SendSms API request.putQueryParameter("RegionId", "cn-hangzhou");//固定值 request.putQueryParameter("PhoneNumbers", phone);//手机号 request.putQueryParameter("SignName", SIGN_NAME);//签名 request.putQueryParameter("TemplateCode", TEMPLATE_CODE);//模板 String code = randomCode(); System.out.println(code); request.putQueryParameter("TemplateParam", "{\"code\":" +"'"+ code +"'"+ "}");//模板中json格式的code参数,随机码 //验证码绑定手机号并存储到redis redisUtils.set(REDIS_KEY_PREFIX_AUTH_CODE + phone,code); redisUtils.expire(REDIS_KEY_PREFIX_AUTH_CODE + phone,AUTH_CODE_EXPIRE_SECONDS); try { CommonResponse response = client.getCommonResponse(request); return response; } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return null; } public static String randomCode() { StringBuilder str = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 6; i++) { str.append(random.nextInt(10)); } return str.toString(); } }
说明:这里利用Redis将手机号与验证码进行绑定,并设置验证码的过期时间,在登录验证时,从Redis中根据手机号取出发送了的验证码,再与用户填写的验证码进行对比。
5.创建接口
@GetMapping("/sendSms")
@ApiOperation(value = "发送短信验证码")
public Result sendSms(@RequestParam("phone") String phone){
return userService.sendSms(phone);
}
6.创建Service
@Autowired
SendSms sendSms;
@Override
public Result sendSms(String phone) {
CommonResponse response = sendSms.send(phone);
return Result.SUCCESS(response);
}
7.调用接口,进行测试
阿里云短信服务发送验证码为0开头不显示
解决方法:在验证码前后加上单引号
request.putQueryParameter("TemplateParam", "{\"code\":"+"'"+code+"'"+"}");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。