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

源代码仓库地址:https://gitee.com/gaogzhen/coin-exchange

Springboot集成阿里云短信的更多相关文章

  1. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  2. springboot 使用阿里云短信服务发送验证码

    一.申请阿里云短信服务 1.申请签名 2.申请模板 3.创建accesskey(鼠标悬停在右上角头像) 二.代码实现 1.springboot引入maven依赖 <dependency> ...

  3. CRMEB小程序商城v4.0二次开发对接集成阿里云短信

    作者:廖飞 - CRMEB小程序商城研发项目组长 前言 cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明. ...

  4. spring boot集成阿里云短信发送接收短信回复功能

    1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...

  5. 使用springBoot完成阿里云短信验证

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  6. Springboot下实现阿里云短信验证功能(含代码)

    Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...

  7. ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成

    在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...

  8. 阿里云短信服务bug

    接入阿里云短信服务,在springboot中写测试方法,执行到 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou ...

  9. 阿里云短信验证_基于阿里云OpenAPI实现

    阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单 ...

随机推荐

  1. 2511-Druid监控功能的深入使用与配置-如何记录监控数据(基于logback)

    Druid的监控很强大,但可惜的是监控数据是存在内存中的,需求就是定时把监控数据记录下来,以日志文件的形式或者数据库入库. 记录两种方式: 数据库入库 logback形式记录 原理(重点) 如果仅仅想 ...

  2. 论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement

    论文地址:单耳语音增强的时频注意 引用格式:Zhang Q, Song Q, Ni Z, et al. Time-Frequency Attention for Monaural Speech Enh ...

  3. 大数据管理系统架构Hadoop

    Hadoop 起源于Google Lab开发的Google File System (GFS)存储系统和MapReduce数据处理框架.2008年,Hadoop成了Apache上的顶级项目,发展到今天 ...

  4. Luogu2986 [USACO10MAR]伟大的奶牛聚集 (树形DP)

    有点权的重心,拆掉点dfs不就是了吗 //#include <iostream> #include <cstdio> #include <cstring> //#i ...

  5. 线程重用问题--ThreadLocal数据错乱

    前言 复现Java业务开发常见错误100例--1 项目完整代码:Github地址 知识点回顾: ThreadLocal的定义和使用: ThreadLocal概念以及使用场景 配置文件的读取: 获取配置 ...

  6. nmtui 字符界面图形模式配置

    一.通过nmtui配置网络参数 Linux系统配置网络参数的方式有很多种,其中最简单最直接的方式就是直接修改网卡配置文件,但这种方式也很容易出错,比如说IPADDR.NETMASK.GATEWAY等参 ...

  7. ASP.NET CORE在docker中的健康检查(healthcheck)

    在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错误的发生,同时,合理 ...

  8. 操作系统学习笔记5 | 用户级线程 && 内核级线程

    在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...

  9. 一些有用的数学知识(Updating)

    文章目录 拉格朗日插值公式 微分中值定理 费马引理 拉格朗日中值定理 柯西中值定理 洛必达法则 连分数(NOI2021 D2T2 考点) 定义 结论 定理1 定理2 定理3 定理4 定理5 欧拉公式 ...

  10. CSS基础第一篇:图片插入<img>,文本空格

    好家伙,这波是被迫回归基础 <img src="" alt=""> img代表"图像",它是图像在页面上显示.src代表&quo ...