一、创建阿里云账号
开启服务后如果是需要生成AccessKeyID和AccessKey Secret
生成后点击访问控制再点击用户,创建用户,并勾选OpenAPI
创建登录名称和显示名称(不要带中文),点击确定
创建好之后下载csv文件方便保存,
然后点击添加权限,
在输入框中输入SMS,两个后勾选,点击确认。
可能会有同学疑问为什们不用AccessKey管理选项中的主AccessKeyID,在这里我的认为是用主AccessKeyID不安全所以不用,个人建议在程序中最好使用子用户的AccessKeyID
确认无误后测试发送短信,重新进入短信服务页面,点击快速学习和测试,如图
调用API发送短信进入控制台,如图填写就可以
然后发起调用,稍等一会儿,如果收到短信验证码就是成功,,如没有收到从头在重新过一遍,快速学习那里申请模板要花¥,手头不宽裕建议不要整
二、导入依赖
<!--阿里云短信服务--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.16</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.1.0</version> </dependency>
三、编写工具类
//发送短信的工具类
public class SMSUtils { /** * 发送短信 * @param signName 签名 * @param templateCode 模板 * @param phoneNumbers 手机号 * @param param 随机生成的四位或六位验证码数字 */ public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){ DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKeyID", "AccessKeySecret"); IAcsClient client = new DefaultAcsClient(profile); SendSmsRequest request = new SendSmsRequest(); request.setSysRegionId("cn-hangzhou"); request.setPhoneNumbers(phoneNumbers); request.setSignName(signName); request.setTemplateCode(templateCode); request.setTemplateParam("{\"code\":\""+param+"\"}"); try { SendSmsResponse response = client.getAcsResponse(request); System.out.println(response.getMessage()); }catch (ClientException e) { e.printStackTrace(); } } }
生成随机数的工具类
public class ValidateCodeUtils { //参数指定是四位还是六位 public static Integer generateValidateCode(int length){ Integer code =null; if(length == 4){ code = new Random().nextInt(9999);//生成随机数,最大为9999 if(code < 1000){ code = code + 1000;//保证随机数为4位数字 } }else if(length == 6){ code = new Random().nextInt(999999);//生成随机数,最大为999999 if(code < 100000){ code = code + 100000;//保证随机数为6位数字 } }else{ throw new RuntimeException("只能生成4位或6位数字验证码"); } return code; } /** * 随机生成指定长度字符串验证码 * @param length 长度 * @return */ public static String generateValidateCode4String(int length){ Random rdm = new Random(); String hash1 = Integer.toHexString(rdm.nextInt()); String capstr = hash1.substring(0, length); return capstr; } }
四、测试
@Test public void sendCode(){ SMSUtils.sendMessage("阿里云短信测试","SMS_154950909", "手机号",ValidateCodeUtils.generateValidateCode4String(6)); }
测试通过后自行编写。
(小贴士:登录访问发送验证码controller方法的时候拦截器要放行哦~)
0条评论
点击登录参与评论