集成阿里云短信服务发送短信

  • 前言
  • 实现步骤
    • 1.pom文件引入依赖
    • 2.编写阿里云短信服务核心配置类
    • 3.短信服务管理业务实现类SMSConfigServiceImpl
    • 4.短信验证码配置类
    • 5.发送短信验证码核心代码
  • 实现效果
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

前期准备:需要在阿里云中开通了短信服务并进行相应的配置,可以在我的《阿里云短信服务》中查看系列博客。
系列博客:
一、阿里云 短信服务——发送短信验证码图文教程
二、阿里云 短信服务——开启验证码防盗刷监控
三、阿里云 短信服务——短信发送频率限制
言归正传,本篇博客主要内容是在项目中运用阿里云的短信服务发送短信验证码。
业务场景:用户忘记密码,通过发送短信验证码验证用户的真实性
参考bilibili忘记密码的界面理解业务



实现步骤

阿里云官网实现参考地址:SDK地址
在项目不仅要能够实现发送短信验证码,更需要考虑到之后的可复用性、可维护、可扩充性。所以咱们不能仅仅的实现功能。为了之后如果需要发送其他形式的短信,如通知短信、营销短信。以及实现其他阿里云提供的短信服务相关的API如:查询短信发送统计信息、发送卡片短信、批量发送短信等等与短信相关的业务。需要将核心的配置抽离出来,再根据各种业务需求封账相应的实现类。这儿以业务发送短信中的发送短信验证码为例。

1.pom文件引入依赖

<!--阿里云短信服务--><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.22</version></dependency>

2.编写阿里云短信服务核心配置类

这块儿用到了nacos做配置管理,accessKeyId,accessKeySecret,endpoint都是从naocs中读取

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;/*** @author : [WangWei]* @version : [v1.0]* @className : ALiYunSMSConfig* @description : [阿里云短信服务配置类]* @createTime : [2022/11/7 15:39]* @updateUser : [WangWei]* @updateTime : [2022/11/7 15:39]* @updateRemark : [描述说明本次修改内容]*/
@Configuration
@RefreshScope
public class ALiYunSMSConfig {//阿里云账号的accessKeyId@Value("${aliyun.sms.accessKeyId}")private String accessKeyId;//阿里云账号的accessKeySecret@Value("${aliyun.sms.accessKeySecret}")private String accessKeySecret;//短信服务访问的域名@Value("${aliyun.sms.endpoint}")private String endpoint;/** @version V1.0* Title: createClient* @author Wangwei* @description 创建短信服务的代理* @createTime  2022/11/7 15:47* @param []* @return com.aliyun.dysmsapi20170525.Client*/public com.aliyun.dysmsapi20170525.Client createClient() throws Exception {com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()// 您的 AccessKey ID.setAccessKeyId(accessKeyId)// 您的 AccessKey Secret.setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint =endpoint ;return new com.aliyun.dysmsapi20170525.Client(config);}
}

3.短信服务管理业务实现类SMSConfigServiceImpl

用于实现短信服务相关的方法,目前只是实现了发送短信的方法。

sendShortMessage()实现发送短信,可以通过传入的参数不同,发送不同形式的短信,如短信验证码、通知短信、营销短信。

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teautil.models.RuntimeOptions;
import com.tfjy.arprobackend.config.ALiYunSMSConfig;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author : [WangWei]* @version : [v1.0]* @className : SMSConfigServiceImpl* @description : [短信服务管理业务实现类]* @createTime : [2022/11/5 17:16]* @updateUser : [WangWei]* @updateTime : [2022/11/5 17:16]* @updateRemark : [描述说明本次修改内容]*/
@Service
public class SMSConfigServiceImpl{private static final Logger log = LogManager.getLogger();//阿里云短信服务配置类@AutowiredALiYunSMSConfig aLiYunSMSConfig;/** @version V1.0* Title: sendShortMessage* @author Wangwei* @description 发送短信* @createTime  2022/11/7 16:02* @param [sendSmsRequest]* @return com.aliyun.dysmsapi20170525.models.SendSmsResponse*/public SendSmsResponse sendShortMessage(SendSmsRequest sendSmsRequest) throws Exception {//初始化配置信息Client client=aLiYunSMSConfig.createClient();//TODO 配置运行时间选项暂时未进行配置RuntimeOptions runtime = new RuntimeOptions();SendSmsResponse sendSmsResponse;try {//发送短信sendSmsResponse=client.sendSmsWithOptions(sendSmsRequest, runtime);}catch (Exception e){throw new Exception("调用阿里云发送短信接口失败",e);}log.info("调用阿里云发送短信接口成功");return sendSmsResponse;}
}

4.短信验证码配置类

主要是与发送短信验证码有关的参数配置,也将其放到了nacos中,使用的时候读取nacos中的配置

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;/*** @author : [WangWei]* @version : [v1.0]* @className : SMSConfigModel* @description : [短信验证码配置类]* @createTime : [2022/11/5 16:06]* @updateUser : [WangWei]* @updateTime : [2022/11/5 16:06]* @updateRemark : [描述说明本次修改内容]*/
@RefreshScope
@Configuration
public class SMVCodeConfigModel {//短信签名名称@Value("${aliyun.sms.sMVCode.signName}")private String signName;//短信模板CODE@Value("${aliyun.sms.sMVCode.templateCode}")private String templateCode;//短信模板变量对应的实际值private String templateParam;//短信验证码存储在redis中的时间 单位分钟@Value("${aliyun.sms.sMVCode.limitTime}")private  String limitTime;public String getSignName() {return signName;}public void setSignName(String signName) {signName = signName;}public String getTemplateCode() {return templateCode;}public void setTemplateCode(String templateCode) {templateCode = templateCode;}public String getTemplateParam() {return templateParam;}public void setTemplateParam(String templateParam) {templateParam = templateParam;}public String getLimitTime() {return limitTime;}public void setLimitTime(String limitTime) {this.limitTime = limitTime;}
}

5.发送短信验证码核心代码

         //生成六位手机验证码String verificationCode = randomCodeUtils.randomCode();//拼接阿里云短信模板变量对应的实际值"{\"code\":\"+verificationCode+\"}";HashMap hashMap = new HashMap();hashMap.put("code", verificationCode);String templateParam = JSON.toJSONString(hashMap);//配置发送阿里云短信的请求体SendSmsRequest sendSmsRequest=new SendSmsRequest();//设置短信签名名称sendSmsRequest.setSignName(smvCodeConfigModel.getSignName());//设置短信模板CodesendSmsRequest.setTemplateCode(smvCodeConfigModel.getTemplateCode());//设置发送短信的手机号sendSmsRequest.setPhoneNumbers(phoneNumber);//设置短信模板变量对应的实际值sendSmsRequest.setTemplateParam(templateParam);//发送短信响应体SendSmsResponse sendSmsResponse;try {//调用阿里云短信服务发送短信验证码sendSmsResponse = smsConfigService.sendShortMessage(sendSmsRequest);log.info("调用阿里云短信服务发送短信验证码");} catch (Exception e) {throw new Exception("调用阿里云短信服务发送短信验证码接口失败!", e);}if (!sendSmsResponse.getBody().getCode().equals("OK")) {log.error("调用阿里云短信服务发送短信验证码失败 {}", sendSmsResponse);return false;}log.info("调用阿里云短信服务发送短信验证码成功 {}", sendSmsResponse);

生成六位随机数的方法

public  String randomCode() {StringBuffer  stringBuffer = new StringBuffer ();Random random = new Random();for (int i = 0; i < 6; i++) {stringBuffer.append(random.nextInt(10));}return stringBuffer.toString();}

实现效果

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

Spring boot项目集成阿里云短信服务发送短信验证码相关推荐

  1. 使用阿里云的短信服务发送短信

    原文地址使用阿里云的短信服务发送短信 在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样,之前用的一个厂商的,提供了一个封装类就很容易发 ...

  2. spring boot上传阿里云对象存储OSS快速上手(一、控制台简介)

    代码实现请看下一篇: spring boot上传阿里云对象存储OSS快速上手(二.代码实现,复制粘贴可用) 简介: 1.阿里云对象存储OSS其实就是一个文件存储的服务 2.在我们的开发过程中会遇到类似 ...

  3. SpringBoot集成阿里云存储OSS服务

    前言 该文章会先简单的介绍一下阿里云的OSS存储,然后演示如何在SpringBoot项目中集成OSS,每一步都有记录,保证初学者也能看懂. 文章目录 前言 1.阿里云存储OSS是什么? 2.Sprin ...

  4. 如何使用阿里巴巴短信服务发送短信验证码

    关于调用阿里巴巴短信服务发送短信验证的接口的方法: 用户的注册 1.首先我们需要在阿里大于(www.alidayu.com)注册一个账号登录 点击进入控制台 点击使用短信服务 然后需要你申请签名和模板 ...

  5. 阿里云 短信服务——发送短信验证码图文教程

    阿里云短信服务 前言 配置阿里云短信服务 准备工作 1.获取Accesskey 1.2创建子账号 1.2为刚创建的用户分配短信服务的权限 2.1申请签名 2.2申请模板 2.3由于目前还没有使用到系统 ...

  6. Spring Boot项目集成AWS SDK连接到AWS S3,实现上传下载功能

    本文主要描写在Spring Boot项目里集成AWS SDK连接到AWS S3,实现上传下载功能的具体代码和注意事项.如有不足和错误之处,欢迎指正. AWS S3相关介绍 AWS S3(官网): ht ...

  7. 腾讯云服务器 - 将 Spring Boot 项目部署到云服务器上(保姆级教程)

    目录 前言 1.在云服务器上安装 jdk 2.在云服务器上安装 mysql 2.1.安装 mysql 2.2.启动 mysql 服务 2.3.验证 3.将 Spring Boot 项目打包成 jar ...

  8. 【微服务集成阿里SMS短信服务发送短信】

    发送短信项目中很多地方都在使用,所以集成一个单独的服务,如果某个服务需要发送短信只需要依赖短信服务即可. 1.开通阿里SMS短信,创建模板 (省略) 2.创建短信服务 common-server-sm ...

  9. 用阿里云短信服务--发送短信demo

    一. AccessKey管理 内容包括:开启子用户AccessKey,创建用户组,给用户组添加sms短信服务权限,创建用户,添加用户到用户组中. 详细操作: 登录阿里云,点击控制台右上角的头像,点击A ...

  10. 使用阿里云提供的短信服务发送短信(个人版)

    本人最近需要实现一个注册发短信验证码的功能,找了几家短信服务平台,如腾讯云,云片网等,发现他们都没有提供给用户个人的短信服务权限,申请短信签名等都需要有企业等相关证明,最后找到了阿里云的短信服务平台, ...

最新文章

  1. server缺少sqlexpress sql_SQL Server----解决SQL Server 配置管理器不见了
  2. 帮小猴子准备的高数知识点
  3. 更新windows SID工具,对于虚拟机复制很有用
  4. 十分钟搭建和使用ELK日志分析系统
  5. SpringBoot @Value、 @ConfigurationProperties 与 @EnableConfigurationProperties 使用
  6. 直播卖房和VR看房,到底是噱头还是新趋势?
  7. [转] Bound Service的三种方式(Binder、 Messenger、 AIDL)
  8. python文本格式_python处理文本文件并生成指定格式的文件
  9. 实现Ajax异步的layui分页
  10. 基于protues仿真及stm32cubemx的基础外设使用-------串口中断
  11. 课程体系包括哪些要素_未来学校的课程体系
  12. suffix tree学习
  13. 基于Elastic Search的搜索广告召回方案
  14. 证件照换底色,快速简单!(附去水印宝藏工具)
  15. Win11怎么在右键菜单添加一键关机选项
  16. 供水为民振兴乡村 国稻种芯-慈利县:抗旱保收盛德村在行动
  17. python语言的实验心得体会范文_实验心得体会四篇
  18. 1分钟了解什么是枚举/以及枚举的使用
  19. 频谱、能谱、功率谱、倍频程谱、1/3 倍频程谱
  20. linux egg,Ubuntu下egg文件的安装与制作

热门文章

  1. Java 打印某年某月的月日历
  2. 进度图绘制十大注意事项
  3. 1688-API接口安全详解
  4. ACM入门之【矩阵快速幂】
  5. NS和DNS的区别有哪些
  6. 如何去管理Java项目
  7. 新主播如何在直播行业混得好
  8. CMOS Image Sensor的接口硬件设计(DVP/MIPI CSI)
  9. C语言文件读写常用函数
  10. wgs84坐标系拾取工具_百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具...