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. 推荐一款国产的高性价比profinet分布式IO模块

    国产profinet分布式IO模块,兼容西门子PLC,可以平替西门子小型分布式IO模块,最大支持挂在32个IO,支持512个变量数据采集!采用高速背板通讯协议,轮询时间少于1MS.

  2. Windows环境安装Hadoop环境

    1,下载Hadoop,解压 2,配置Hadoop环境变量 右键此电脑--属性 高级系统设置 环境变量 新建一个HADOOP_HOME 添加到path 3,cmd窗口查看安装情况:hadoop vers ...

  3. Odoo14 ir.actions.act_window

    xml声明 1 <record id="res_company_user_action" model="ir.actions.act_window"> ...

  4. Docker部署kafka|Go操作实践

    前言 写作本文的背景是由于字节的暑期青训营中,某个项目要求编写一个简易的流处理引擎(flink),开发语言不限,推荐Java,本着好奇心的驱使,我打算使用Go语言进行部分尝试. 既然是流处理引擎,那么 ...

  5. you need to load the kernel first

    背景:在用第三方软件备份win10系统时,提示you need to load the kernel first 1.进BIOS把硬盘AHCI 模式调整成 SATA. 2.检查硬盘数据线是否插紧.主板 ...

  6. 5.23 NOI 模拟

    $5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...

  7. selenium webDriver的运用

    声明实例运行浏览器 配置浏览器驱动后,可以通过简单的2行代码就可以驱动浏览器(配置这里不加赘述) from selenium import webdriver driver = webdriver.C ...

  8. 【AGC】引导用户购买提升用户留存率

    借助AGC的云数据库.云托管.应用内消息.App Linking等服务,您可以给不同价值用户设置不同的优惠套餐活动,引导用户持续购买,增强用户黏性.判断用户价值,发送营销短信,引导用户参与营销活动,提 ...

  9. 软件装在D盘,实测有效

    C盘容量小,希望把所有软件都装到D盘,试过很多次,没什么作用.今天装MS全家桶的时候看到了个帖子,实测有效,Visio.Word.Excel.PowerPoint都装到了D盘 原贴链接为:http:/ ...

  10. 虚拟化之mdev-vfio笔记

    [root@master mdev]# vi Makefile # SPDX-License-Identifier: GPL-2.0-only mdev-y := mdev_core.o mdev_s ...