SpringBoot集成阿里云短信实现发送短信验证码
- 一、准备工作
- 1、注册账号
- 2、申请资质
- 3、申请签名
- 4、创建模板
- 二、springboot集成发送短信
- 1、引入依赖
- 2、编写短信配置文件
- 3、编写短信发送工具类
一、准备工作
在使用springboot集成短信服务之前,需要先注册阿里云的账号(实名认证),然后申请短信资质、签名以及短信模板。
1、注册账号
点击阿里云注册账号,如下所示
两种注册方式任选即可,注册后需要实名认证(可以通过支付宝扫码认证),这里省略实名认证的过程。
实名认证之后,直接在搜索框搜索短信服务即可,然后申请资质和签名以及模板
2、申请资质
- 点击新增资质
- 填写信息
用途根据自己需要选择,我这里是自用,然后输入资质命名,并按照要求上传身份证照片。
申请签名的时候需要用到资质。
3、申请签名
点击新建签名,然后根据下图填写信息
4、创建模板
点击创建模板,然后根据下面的信息填写,也可以去网上查找相应的模板
之后等待申请通过即可。等申请通过后就可以购买短信,然后通过调用api进行发送短信。一般新用户可以试用100条短信
二、springboot集成发送短信
1、引入依赖
com.aliyun dysmsapi20170525 2.0.24 2、编写短信配置文件
# 阿里云短信服务配置 aliyun: sms: accessKeyId: # 填你的accesskeyid accessKeySecret: # 填 accesskeySecret signName: # 填写签名名称 templateCode: # 填写模板的code
这里需要先在阿里云控制台获取上面的四项配置,如下所示:
- 获取accessKeyId和accessKeySecret,如下所示,点击Accesskey管理
- 如下所示,如果想要使用子用户的话,需要创建一个子用户,跟着操作和提示创建即可。也可以选择继续使用accesskey,最终获取的方式差不多。
- 我这里没有创建子用户,直接使用的accesskey,如下所示,直接点击创建accesskey,然后任选一种验证方式即可
- 然后将创建的accessKeyId,accessKeySecret分别粘贴到对应的配置文件的位置中即可。
- 然后复制签名的名称,粘贴到配置文件中的相应位置如下所示:
- 然后点击模板管理,粘贴你对应的模板的code即可,如下所示
这里配置文件的配置就结束了。
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中的几位作为验证码)。
还没有评论,来说两句吧...