SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码

码农世界 2024-05-22 后端 59 次浏览 0个评论

SpringBoot集成阿里云短信实现发送短信验证码

  • 一、准备工作
    • 1、注册账号
    • 2、申请资质
    • 3、申请签名
    • 4、创建模板
    • 二、springboot集成发送短信
      • 1、引入依赖
      • 2、编写短信配置文件
      • 3、编写短信发送工具类

        一、准备工作

        在使用springboot集成短信服务之前,需要先注册阿里云的账号(实名认证),然后申请短信资质、签名以及短信模板。

        1、注册账号

        点击阿里云注册账号,如下所示

        image.png

        两种注册方式任选即可,注册后需要实名认证(可以通过支付宝扫码认证),这里省略实名认证的过程。

        实名认证之后,直接在搜索框搜索短信服务即可,然后申请资质和签名以及模板

        2、申请资质

        1. 点击新增资质

        image.png

        1. 填写信息

        image.png

        用途根据自己需要选择,我这里是自用,然后输入资质命名,并按照要求上传身份证照片。

        申请签名的时候需要用到资质。

        3、申请签名

        image.png

        点击新建签名,然后根据下图填写信息

        image.png

        4、创建模板

        image.png

        点击创建模板,然后根据下面的信息填写,也可以去网上查找相应的模板

        image.png

        之后等待申请通过即可。等申请通过后就可以购买短信,然后通过调用api进行发送短信。一般新用户可以试用100条短信

        二、springboot集成发送短信

        1、引入依赖

        
            com.aliyun
            dysmsapi20170525
            2.0.24
        
        

        2、编写短信配置文件

        # 阿里云短信服务配置
        aliyun:
          sms:
            accessKeyId:         # 填你的accesskeyid
            accessKeySecret:     # 填 accesskeySecret
            signName:            # 填写签名名称
            templateCode:        # 填写模板的code
        

        这里需要先在阿里云控制台获取上面的四项配置,如下所示:

        1. 获取accessKeyId和accessKeySecret,如下所示,点击Accesskey管理

        image.png

        1. 如下所示,如果想要使用子用户的话,需要创建一个子用户,跟着操作和提示创建即可。也可以选择继续使用accesskey,最终获取的方式差不多。

        image.png

        1. 我这里没有创建子用户,直接使用的accesskey,如下所示,直接点击创建accesskey,然后任选一种验证方式即可

        image.png

        1. 然后将创建的accessKeyId,accessKeySecret分别粘贴到对应的配置文件的位置中即可。
        2. 然后复制签名的名称,粘贴到配置文件中的相应位置如下所示:

        image.png

        1. 然后点击模板管理,粘贴你对应的模板的code即可,如下所示

        image.png

        这里配置文件的配置就结束了。

        3、编写短信发送工具类

        然后编写发短信的工具类,如下所示:

        @Service
        @slf4j
        public class AliSmsUtils{
            @Value("${aliyun.sms.accessKeyId}")
            private  String accessKeyId;
            @Value("${aliyun.sms.accessKeySecret}")
            private  String accessKeySecret;
            @Value("${aliyun.sms.signName}")
            private  String signName;
            //模板代码
            @Value("${aliyuan.sms.templateCode}")
            private String templateCode;
            private String templateParam;
            /**
             * 使用AK&SK初始化账号Client
             * @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);
                // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
                config.endpoint = "dysmsapi.aliyuncs.com";
                return new com.aliyun.dysmsapi20170525.Client(config);
            }
            @Override
            public boolean sendSms(String phone, String code) throws Exception {
                log.info("发送短信验证码: " + code);
                // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
                com.aliyun.dysmsapi20170525.Client client = SmsServiceImpl.createClient(accessKeyId, accessKeySecret);
                com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                        .setPhoneNumbers(phone)
                        .setTemplateCode(templateCode)
                        .setTemplateParam(code)
                        .setSignName(signName);
                try {
                    // 复制代码运行请自行打印 API 的返回值
                    client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());
                } catch (TeaException error) {
                    // 错误 message
                    System.out.println(error.getMessage());
                    // 诊断地址
                    System.out.println(error.getData().get("Recommend"));
                    com.aliyun.teautil.Common.assertAsString(error.message);
                } catch (Exception _error) {
                    TeaException error = new TeaException(_error.getMessage(), _error);
                    // 错误 message
                    System.out.println(error.getMessage());
                    // 诊断地址
                    System.out.println(error.getData().get("Recommend"));
                    com.aliyun.teautil.Common.assertAsString(error.message);
                }
                return true;
            }
        }
        

        说明:

        • 上面的的代码是我直接在Service中以方法的方式实现的,所以可以根据自己需要进行修改
        • 而且上面的方式是根据官网的demo进行修改的,想要进一步了解如何使用则可以在官网查看。
        • 上面的是直接通过@Value注解获取配置文件中的内容,你也可以通过@ConfigurationProperties注解实现,或者结合nacos配置中心实现获取远程配置中的值。

          调用上面的方法需要两个参数,一个是手机号,一个是验证码,所以对于该业务需要注意手机号的格式验证(使用正则表达式),和随机验证码的生成(可以使用hutool中的随机数生成,也可以采用获取UUID中的几位作为验证码)。

转载请注明来自码农世界,本文标题:《SpringBoot集成阿里云短信实现发送短信验证码》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,59人围观)参与讨论

还没有评论,来说两句吧...

Top