Springboot集成阿里云短信
1 前言
线上系统开发中,短信功能是经常要用到的,比如注册、修改手机号、修改密码时短信验证码等。我们这里是一个基于Springboot的微服务(SpringCloud Alibaba)项目,选择阿里云的短信接口。
2 准备工作
2.1 了解流程
登录阿里云短信控制台,了解短信相关知识。我们这里需要短信发送功能,进一步了解相关API。
2.2 配置信息
- 凭证:登录阿里云短信控制台,通过快速学习,我们知道,我们需要创建accessKey,accessKeySecret,即用户的访问凭证,具体如何创建,这里不赘述,自行查阅文档。
- 域名endpoint:即我们通过那个地址访问阿里云的短信接口。
2.3 短信签名和模板
签名和模板是阿里云短信功能所必须的,下面讲解下签名和模板的添加。
2.3.1 签名
- 添加签名:一个账户只能添加一个验证码类型的签名,我已经添加了一个,你们根据需要自行选择,图示:

2.3.2 模板
添加模板:

审核不通过原因:
- 场景连接:这里场景连接一定要填写公网可访问连接,比如你上线的App、网站网址,或者你的博客等待的。
- 模板内容:如需自定义,仔细阅读变量规范、模板申请规范;或者直接说使用模板库中预定义模块,适当修改文字,可满足大部分应用场景。
效果图示:

2.3.3 存入数据库
- 与短信功能相关的签名、模板,这些信息保存在数据库的配置表中。
- 签名:效果就是短信开头的【】中的信息,开发需要用到签名名称signName。
- 模板:效果就是短信的内容,开发中需要用到模板名称templateCode,其他信息保存在数据库中。
3 SDK
虽然是做了前面的准备工作,但是具体怎么应用还是很模糊,查阅相关技术文档,很多都是旧版本的内容。这里我们还是通过阿里云的OpenAPI来学习最新的应用技术,这里我们以短信发送为例,图示:
api参数,示例,依赖一目了然,而且是最新版本的内容,下面我们开始集成到项目中。
4 集成Springboot
4.1 集成
pom.xml:复制上面依赖信息
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.21</version>
</dependency>
分析:
- 短信功能我们项目中多个模块需要用到,我们把短信发送功能封装到AliSms类中,AliSms配置为IOC容器中的bean,位置放置在公共模块中。
- 需要用到的配置信息,比如accessKey,secretKey,endpoint,我们在nacos中配置,图示:
参考官网给出的SDK封装我们自己的AliSms类,源码:
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import cn.hutool.core.bean.BeanUtil; import java.util.Map; /**
* @author Administrator
* @version 1.0
* @description ali sms
* @date 2022-09-30 11:19
* 阿里云短信类
*/
public class AliSms { private final Client client;
private final SendSmsRequest request; public AliSms(Client client, SendSmsRequest request) {
this.client = client;
this.request = request;
} public Map<String, Object> sendSms(String templateCode, String templateParam, String phoneNumbers) throws Exception { request.setTemplateCode(templateCode);
request.setTemplateParam(templateParam);
request.setPhoneNumbers(phoneNumbers); RuntimeOptions runtime = new RuntimeOptions();
SendSmsResponse response = null;
try {
response = client.sendSmsWithOptions(request, runtime);
} catch (Exception e) {
e.printStackTrace();
throw new Exception("短信发送失败");
}
return BeanUtil.beanToMap(response);
}
} import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @author Administrator
* @version 1.0
* @description sms短信发送
* @date 2022-10-04 12:50
*/
@Configuration
public class SmsAutoConfiguration { /**
* 阿里云短信服务账户accessKey
*/
@Value("${spring.cloud.alicloud.access-key}")
private String accessKey; /**
* 阿里云短信服务账户accessKey
*/
@Value("${spring.cloud.alicloud.secret-key}")
private String secretKey; /**
* 阿里云短信服务endpoint
*/
@Value("${spring.cloud.alicloud.sms.endpoint}")
private String endpoint; /**
* 阿里云短信服务签名
*/
@Value("${spring.cloud.alicloud.sms.signName}")
private String signName; @Bean
public AliSms aliSms() {
return new AliSms(createClient(), sendSmsRequest());
} private SendSmsRequest sendSmsRequest() {
SendSmsRequest request = new SendSmsRequest();
request.setSignName(signName);
return request;
} private Client createClient(){
Config config = new Config()
// 您的 AccessKey ID
.setAccessKeyId(accessKey)
// 您的 AccessKey Secret
.setAccessKeySecret(secretKey);
// 访问的域名
config.endpoint = endpoint;
Client client = null;
try {
client = new Client(config);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("创建阿里客户端失败!");
} return client;
} }
pom.xml添加依赖,全部相关依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.21</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.14</version>
</dependency>
4.2 测试
- 测试代码:前端代码及后端接口根据业务需求自己设计,这里只展示业务实现层的短信发送方法的简单测试实现:
@Autowired
private AliSms aliSms;
@Override
public void sendSms(Sms sms) {
try {
log.info("发送短信{}", JSON.toJSONString(sms, true));
String templateParam = "{\"code\":\"" + "123456" + "\"}";
Map<String, Object> info = aliSms.sendSms(sms.getTemplateCode(), templateParam, sms.getMobile());
log.info("发送结果:{}", JSON.toJSONString(info, true));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("发送短信失败");
}
}
测试结果:
控制台:
{
"basePath":"http://192.168.10.1:8090",
"description":"发送短信",
"ip":"192.168.10.1",
"method":"com.gaogzhen.controller.SmsController.sendSms",
"parameter":{
"sms":{
"countryCode":"+86",
"mobile":"自己填写的手机号",
"templateCode":"自己的模板CODE"
}
},
"result":{
"code":200
},
"spendTime":0,
"uri":"/sms/sendTo",
"url":"http://192.168.10.1:8090/sms/sendTo",
"username":"1014066909280374785"
}手机截图:

5 后记
欢迎交流学习,下面为联系方式和仓库源代码地址
QQ:806797785
Springboot集成阿里云短信的更多相关文章
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
- springboot 使用阿里云短信服务发送验证码
一.申请阿里云短信服务 1.申请签名 2.申请模板 3.创建accesskey(鼠标悬停在右上角头像) 二.代码实现 1.springboot引入maven依赖 <dependency> ...
- CRMEB小程序商城v4.0二次开发对接集成阿里云短信
作者:廖飞 - CRMEB小程序商城研发项目组长 前言 cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明. ...
- spring boot集成阿里云短信发送接收短信回复功能
1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...
- 使用springBoot完成阿里云短信验证
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- Springboot下实现阿里云短信验证功能(含代码)
Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...
- ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...
- 阿里云短信服务bug
接入阿里云短信服务,在springboot中写测试方法,执行到 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou ...
- 阿里云短信验证_基于阿里云OpenAPI实现
阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单 ...
随机推荐
- 基于二进制安装Cloudera Manager集群
一.环境准备 参考链接:https://www.cnblogs.com/zhangzhide/p/11108472.html 二.安装jdk(三台主机都要做) 下载jdk安装包并解压:tar xvf ...
- 2022-07-10 第五小组 pan小堂 css学习笔记
css学习笔记 什么是 CSS? CSS 指的是层叠样式表* (Cascading Style Sheets) CSS 描述了如何在屏幕.纸张或其他媒体上显示 HTML 元素 CSS 节省了大量工作. ...
- 机器学习(公式推导与代码实现)--sklearn机器学习库
一.scikit-learn概述 1.sklearn模型 sklearn全称是scikit-learn,它是一个基于Python的机器学习类库,主要建立在NumPy.Pandas.SciPy和Ma ...
- C#静态类、静态成员、静态方法
一.作用 静态类和非静态类重要的区别是在于静态类不能被实例化,也就是说不能使用 new 关键字创建静态类类型的变量,防止程序员写代码来实例化该静态类或者在类的内部声明任何实例字段或方法. 用于存放不 ...
- ViewPlane类定义
这个类主要是记录了所有跟视图窗口有关的数据,用于显示. 类声明: #pragma once #ifndef __VIEWPLANE_HEADER__ #define __VIEWPLANE_HEADE ...
- 羽夏看Linux内核——中断与分页相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- 常见docker命令(二)-容器生命周期相关
docker run 命令主要参数-d 后台运行,返回容器id-i 以交互模式运行,通常与-t连用-t 为容器重新分配一个伪输入终端,通常与-i连用-P(大写) 随机端口映射,容器内部端口随机映射到主 ...
- as 和 which 引导非限制性定语从句的区别
定语从句关系代词作用表格:as 和 which 都可以指代整个句子.as 引导非限制性定语从句可以放在主句之前.主句之后.主句之中:which 引导非限制性定语从句只能放在先行词之后. (一)As i ...
- CM311-1a(S905L3系列)玩转桌面
那安装了ambian后,玩转桌面(安装GUI桌面环境)有没有可能呢?那肯定啊!那桌面有什么用?当然有用,多一种玩法,可以写写代码,上网冲浪,学习linux语法什么的.而且单主机只要40左右,想想看可以 ...
- 技术管理进阶——技术Leader需要数据思维
原创不易,求分享.求一键三连 假设我长得很漂亮,拥有众多追求者,但是初出闺房的我对这世界上的男人毫无认知,那么该如何选择呢?这真是一个问题! 妈妈说,愿意为我花钱的男人未必爱我,但不愿意为我花钱的男人 ...