一、创建阿里云账号
开启服务后如果是需要生成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条评论
点击登录参与评论