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. c语言中的gets和fgets的使用差别

    gets和fgets的差别 2022年6月30日 #include<stdio.h> #include<string.h> #define STLEN 8 int main(i ...

  2. .NET 跨平台应用开发动手教程 |用 Uno Platform 构建一个 Kanban-style Todo App

    作者:Steven Giesel 翻译:Alan Wang 校对:李卫涵 – 微软 MVP 排版:Rani Sun 有什么比参考包含分步说明和代码示例的动手教程更好的学习新技术的方式呢?当你完成或 f ...

  3. Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_160 众神殿内,依次坐着Editplus.Atom.Sublime.Vscode.JetBrains家族.Comodo等等一众编辑 ...

  4. 出票系统:根据淡旺季的月份和年龄,打印票价[课后练习] 出票系统:根据淡旺季的月份和年龄,打印票价[课后练习] 4 10旺季: 4 10旺季: 成人(18-60) : 60 成人(18-60):60 儿童(<18) :半价 儿童(<18):半价 老人(>60) :1/3 老人(>60):1/3 淡季: 淡季: 成人: 40 成人:40 其他: 20 其他:20

    用if适合新手练习 package LianXiTi;import java.util.Scanner;public class first2 {// 出票系统:根据淡旺季的月份和年龄,打印票价[课后 ...

  5. 梳理清楚springAOP,轻松面向切面编程

    不知道大家有没有这样的感觉,平时经常说aop,但是对aop中的一些概念还是模糊,总感觉很飘渺,今天来梳理下关于aop的知识. 一.概念 我们知道现在开发都是spring,讲的最多的也是springAO ...

  6. Oracle-DDL,DML理解以及应用

    SQL语句:虽然SQL语句不区分大小写,但是字符串的值时区分大小写的.SQL是结构化查询语句,操作数据库需要向数据库发送SQL语句,数据库会理解SQL语句中含义并执行SQL语句分为:DDL(数据定义语 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. 定制化JDK升级引发的离奇事件

    1.背景 由于Oracle对外宣称Oracle JDK停止免费用于商用.公司法务部门评估之后担心后续会惹上光司,于是就开始了JDK升级-将所有服务Oracle修改为OpenJDK.上周开始微服务JDK ...

  9. String与StringBuilder相互转换以及获取字符串中第一个中文汉字

    String与StringBuilder相互转换 1. StringBuilder转为String StringBuilder sb = new StringBuilder(); sb.append( ...

  10. Html飞机大战(四):状态的切换(界面加载类的编辑)

    好家伙,接着写   既然我们涉及到状态了,那么我们也会涉及到状态的切换   那么我们怎样切换状态呢? 想象一下,如果我玩的游戏暂停了,那么我们肯定是通过点击或者按下某个按键来让游戏继续   这里我们选 ...