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实现
阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单 ...
随机推荐
- php命名空间粗解
// 创建命名空间Articlenamespace Article;class Comment { } // 创建命名空间MessageBoardnamespace MessageBoard;clas ...
- MySQL 常见索引类型介绍
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 主要索引类型有如下几种: 1.主键索引 2.唯一索引 3.普通索引 4.空间索引 5.全文索引 假设有如下一张 ...
- Apache DolphinScheduler 使用文档(4/8):软件部署
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 4. 软件部署 4.1 为 dolphinschedu ...
- CF708C Centroids(树形DP)
发现变重心就是往重心上割,所以\(\text{up and down}\),一遍统计子树最大\(size\),一遍最优割子树,\(down\),\(up\)出信息,最后\(DFS\)出可行解 #inc ...
- LuoguP2523 [HAOI2011]Problem c(概率DP)
傻逼概率\(DP\),熊大坐这,熊二坐这,两熊体积从右往左挤,挤到\(FFF\)没座位了就不合理了 否则就向左歇斯底里爬,每个\(FFF\)编号就组合一下,完闭 #include <iostre ...
- postgresql用户与权限管理
pg使用角色的概念管理数据库访问权限,角色是一系列相关权限的集合.为了管理方便,通常把一系列先关的权限赋予给一个角色,如果哪个用户需要这些权限,就把这些角色赋予给响应的用户. 由于用户也拥有一系列的相 ...
- Excel 查找函数(一):LOOKUP
序号 员工姓名 部门 职务 1 苏霞 法务部 法律顾问 2 包志林 财务部 财务总监 3 林娥云 安监部 部长 4 石少卿 质检部 质检员 5 于炳福 生产部 生产部 6 蒋琼志 仓储部 保管员 7 ...
- [CSharpTips]判断两条线段是否相交
判断两条线段是否相交 主要用到了通过向量积的正负判断两个向量位置关系 向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向:若结果大于0,表示向量b在向量a的逆时针方向:若等于 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下.而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以 ...
- 日常问题: SQL优化
日常开发中,除了开辟新项目,业务需求开发,一般还要做负责系统的日常运维.比如线上告警了,出bug了,必须及时修复.这天,运维反馈mysql cpu告警了,然后抓了该时间节点的慢sql日志,要开发分析解 ...