阿里云验证码短信功能---SpringBoot项目

发布时间 2023-05-31 10:42:45作者: wzh_Official

阿里云官网:https://www.aliyun.com/activity/2023caigouji/shangyuncaigouji?utm_content=se_1013408957

准备工作
注册阿里云账号
申请AccessKeyID和AccessKeySecret
搜索“短信服务SMS”,选择“免费开通”即可
选择国内消息,申请签名管理和模板管理

准备完成后我们可以获取AccessKeyID,AccessKeySecret,签名名称,模板CODE。

加入相关依赖

点击查看代码
<!--阿里云短信依赖-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.3</version>
        </dependency>

代码实现
发送短信工具类

点击查看代码
/**
 * 短信发送工具类
 */
@Component
public class SMSUtil {

    @Value(value = "${Reggie.sms.accessKeyId}")
    private String accessKeyId="accessKeyId";
    @Value(value = "${Reggie.sms.accessKeySecret}")
    private String accessKeySecret="accessKeySecret";
    @Value(value = "${Reggie.sms.signName}")
    private String setSignName="签名名称";
    @Value(value = "${Reggie.sms.templateCode}")
    private String setTemplateCode="模板CODE";

    //发送短信
    public void sendMsg(String phone,String code){
        try {
            // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
            com.aliyun.dysmsapi20170525.Client client = SMSUtil.createClient(
                    accessKeyId,
                    accessKeySecret);
            com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                    .setSignName(setSignName)
                    .setTemplateCode(setTemplateCode)
                    .setPhoneNumbers(phone)
                    .setTemplateParam("{\"code\":\""+code+"\"}");
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            // 复制代码运行请自行打印 API 的返回值
            client.sendSmsWithOptions(sendSmsRequest, runtime);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }
}

验证码生成工具类

点击查看代码
/**
 * 随机生成验证码工具类
 */
public class ValidateCodeUtils {
    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    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;
    }
}