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

发布时间:2024年01月11日

一、准备工作

在使用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、引入依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.24</version>
</dependency>

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中的几位作为验证码)。

文章来源:https://blog.csdn.net/weixin_45915647/article/details/135529937
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。