准备工作如下:

  • 我们需要在阿里云上开通短信服务,这里可以买资源包,也可以自己充值;
  • 创建短信验证签名,签名需要阿里后台审核,一般2小时左右;
  • 创建短信模板;
  • 在用户头像下菜单,(在AccessKey管理里面创建用户,给他短信的权限获取里面的账户和key) 创建阿里云的授权用户;

我们需要的数据:

名称 释义
accessKeyId 创建用户的id
accessKeySecret 创建用户的秘钥
signName 短信签名名称
templateCode 短信模板的id

在工程中导入阿里短信的包,这里注意我是用的升级版的SDK 2017-05-25 参考链接点击进入
按照文档要求导入jar包:

<dependency><groupId>com.aliyun</groupId><artifactId>tea-openapi</artifactId><version>0.0.19</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.6</version>
</dependency>

我们先看看官方文档示例代码: 点击跳转示例

这是官方示例代码:

package com.aliyun.sample;import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;public class Sample {/*** 使用AK&SK初始化账号Client* @param accessKeyId* @param accessKeySecret* @return Client* @throws Exception*/public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {Config config = new Config()// 您的AccessKey ID.setAccessKeyId(accessKeyId)// 您的AccessKey Secret.setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint = "dysmsapi.aliyuncs.com";return new com.aliyun.dysmsapi20170525.Client(config);}public static void main(String[] args_) throws Exception {java.util.List<String> args = java.util.Arrays.asList(args_);com.aliyun.dysmsapi20170525.Client client = Sample.createClient("accessKeyId", "accessKeySecret");SendSmsRequest sendSmsRequest = new SendSmsRequest().setPhoneNumbers("17607146571").setSignName("code").setTemplateCode("sms_12675377891").setTemplateParam("{'code':'123456'}");// 复制代码运行请自行打印 API 的返回值client.sendSms(sendSmsRequest);}
}

我们要做的就是将官方的代码做些更改,更贴合实际的业务开发场景:

  • 我们先在配置文件中定义我们要发短信的固定参数,在yml中进行如下配置;
dysms:accessKeyId: LTAIWjSAN0910892accessKeySecret: pYtZUs4CCZ57hww19277637OICJSNsignName: 大威天龙  #短信签名templateCode: SMS_168581995 #这个模板可以有多个,可以根据项目需求定义枚举

这里注意项目中可能会有很多的短信模板,这些可以配置多个,另外短信签名是有可能是中文,用properties配置文件时可能会乱码(这个跟spring的默认加载编码有关系),为了方便推荐使用yml文件配置;

  • 我们写个配置文件类,初始化一下这个Client
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Auther: MR.rp* @Date: 2021/8/3 14:31* @Description:*/@Configuration
public class DysmsConfig {@Value(value = "${dysms.accessKeyId}")private  String   accessKeyId;@Value(value = "${dysms.accessKeySecret}")private  String  accessKeySecret;@Beanpublic com.aliyun.dysmsapi20170525.Client careateClient() throws Exception {Config config = new Config().setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint = "dysmsapi.aliyuncs.com";return new com.aliyun.dysmsapi20170525.Client(config);}
}
  • 编写短信调用工具类
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;/*** @Auther: MR.rp* @Date: 2021/8/3 14:37* @Description:*/@Component
@Slf4j
public  class DysmsUtil {private static Client client;private static  String  signName; //签名public static  String  templateCode;// 短信验证码模板id@Value("${dysms.templateCode}")public void setMsgCode(String templateCode) {DysmsUtil.templateCode= templateCode;}@Autowiredpublic DysmsUtil(Client client){this.client = client;}@Value("${dysms.signName}")public void setSIGN(String signName) {DysmsUtil.signName= signName;}/*** 单条手机发送信息* @param phoneNums* @param smsModelId* @param template*/public static void  sendMsg(String phoneNums, String templateCode, String  template){//这里为了测试只写单条手机号码的校验是否合法,在开发中如果是多个手机号可以先自己校验再传参if(!phoneNums.matches("^1(3\\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$"))log.warn("============ 手机号:"+phoneNums+"不合法,发送失败 ======");return;}SendSmsRequest sendSmsRequest = new SendSmsRequest().setPhoneNumbers(phoneNums).setSignName(signName)  //短信签名名称.setTemplateCode(templateCode) //短信模板ID.setTemplateParam(template); //变量值try {SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);SendSmsResponseBody  sendBody = sendSmsResponse.getBody();if(sendBody.getMessage().equals("OK")){log.info("========== 给:"+phoneNums+"发送短信["+template+"]成功!!! ==========");}//下面是查询信息的结果集,因为短信本身会有一定的延迟,所有在查询的时候可能会查不到或者让线程睡眠几秒再查询,这里只是贴出查询代码供大家参考String datetime = new SimpleDateFormat("yyyyMMdd").format(new Date());String bizId = sendBody.bizId;QuerySendDetailsRequest querySendDetailsRequest = new QuerySendDetailsRequest().setPhoneNumber(phoneNums).setSendDate(datetime).setBizId(bizId).setPageSize(10L)  //分页.setCurrentPage(1L);QuerySendDetailsResponseBody body = client.querySendDetails(querySendDetailsRequest).getBody();ObjectMapper objectMapper = new ObjectMapper();String msg = objectMapper.writeValueAsString(body);log.info("返回的body信息:"+msg);String message = objectMapper.writeValueAsString(sendBody);log.info("发送返回信息详情:"+message);} catch (Exception e) {e.printStackTrace();log.error(e.getMessage(),e);}}/*** 获取短信验证码* @return 验证码*/public static String getCode() {String code = null;code = (int) ((Math.random() * 9 + 1) * 100000) + "";log.info("验证码为["+code+"]");return code;}
}

我们在业务中调用测试一下:

    @GetMapping("/getCode")@ApiOperation(value = "获取验证码",notes = "获取验证码")@Transactionalpublic ServerResponseVO  getCode(@RequestParam("userTel")@ApiParam("手机号") String userTel,HttpSession session){boolean matches = userTel.matches("^1(3\\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\\d|9[0-35-9])\\d{8}$");if(!matches){return  ServerResponseVO.error("手机号码有误");}String code = DysmsUtil.getCode();
//        session.setAttribute(userTel,code);
//        session.setMaxInactiveInterval(300);redisTemplate.opsForValue().set(userTel,code,300, TimeUnit.SECONDS);// redis存储String  jsonCode  = "{'code':'"+code+"'}";DysmsUtil.sendMsg(userTel,DysmsUtil.msgCode,jsonCode);log.info("手机号:"+userTel +"获取验证码成功:["+code+"]" );return  ServerResponseVO.success("获取验证码成功");}

看下日志:

怎么样,很简单吧?

  • 在多种短信签名的情况下我们可以多配置几个短信的配置名称,在工具类中注入就可以了,你也可以定义为枚举,当调用时传入当前的枚举或注入的属性,就可以实现发送对应的短信了,这里也要注意传入占位参数时,官方支持的是json格式的哦,笔者之前在这里踩到了,一直发送不成功;

有兴趣小伙伴可以自己测试一下哦

Spring boot简单的接入阿里短信接口相关推荐

  1. Spring、mybatis整合,阿里短信接口

    mybatis-spring整合 一.MyBatis与Spring的集成 在学习mybatis配置时,对于mybatis-config配置的时候我们发现,大致是需要配置三个方面:setting.dat ...

  2. 语音通知怎么发?如何接入语音短信接口

    语音通知,我想大家都很熟悉,平时,我们多多少少都收到过语音短信.语音电话通知是一种强提醒的消息推送方式,接通的用户能100%注意到消息的内容,可以广泛适用于服务器监控预警.订单提醒.开课提醒.外卖订单 ...

  3. tp6框架结合阿里短信接口发送短信并记录redis

    tp6框架结合阿里短信接口发送短信并记录redis 1> 开通阿里云短信服务 2> 安装redis服务 3>config配置文件 创建sms.php 文件,配置阿里云短信信息 ret ...

  4. 医院管理php,医院管理系统接入php短信接口的应用

    现在大大小小的医院都已经有了自己的医院管理系统,更有不少医院系统对接了php短信接口,实现了在很多场景下的短信发送功能,大大提升了患者的使用体验.那么医院管理系统接入php短信接口的应用都有哪些呢? ...

  5. 106短信简单描述与验证码短信接口介绍

    如何调用 106短信验证码 接口地址 怎么样找短信公司要106短信验证码接口测试费用 一.什么是106端口短信: 106短信通道是指仅中国移动.中国联通提供的网关短信平台,实现与客户指定号码进行短信批 ...

  6. Spring Boot 整合 腾讯云短信(模板模式)

    参考项目: RuoYi-Vue-Plus 添加依赖 <dependency><groupId>com.tencentcloudapi</groupId><ar ...

  7. 阿里云短信接口开发实践(Java)

    随着互联网的兴起,各行各业的需求都在不断的增加.随着业务的扩大,企业给用户发送短信验证码的业务,也是如火如荼.在这里,calvin给各位开发者推荐阿里云短信平台.原因有二:1.接入较简单,开发成本低 ...

  8. 2023-01-16 阿里SMS短信接口使用

    用户注册-使用阿里短信接口和Redis 文章目录 用户注册-使用阿里短信接口和Redis 步骤 1.导入依赖 2.redis属性配置文件 3.spring集成redis配置文件 4.短信接口属性配置文 ...

  9. thinkphp5+阿里短信发送验证码

    一.申请阿里短信接口,开通服务,申请AccessKey ID和Access Key Secret 二.申请短信发送模板 三.在thinkphp5中的config文件中添加一下配置 //短信配置'SMS ...

最新文章

  1. (续)我对09毕业生说两句
  2. bootstrap-fileupload-上传文件控件
  3. 网站无法响应HTTP/1.1
  4. html mvc 分页 保存,Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
  5. TextWatcher() 的用法
  6. Java 实现Https访问工具类 跳过ssl证书验证
  7. leetcode最长递增子序列问题
  8. 使用Redis的有序集合实现排行榜功能
  9. 《与爱因斯坦月球漫步——美国记忆力冠军教你记忆一切》读书摘抄[美]乔舒亚.福尔
  10. ATAT-mcsqs- 运行后出现报错:段错误(吐核/core dumped)
  11. 安装vc2005运行库错误1935c处理
  12. idea设置主题风格
  13. ERROR: could not access file $libdir/postgis-2.3: No such file or director解决方法
  14. Linux 一条命令删除某端口被占用的进程
  15. LaTeX 算法代码排版 --latex2e范例总结
  16. LaTex粗略的学习笔记(表格)
  17. 银行相关术语及其翻译
  18. 同轴电缆抗干扰措施(二)
  19. [数据分析] RFM分析方法
  20. 抖音上一封你的信H5网站源码,可对接支付和106短信

热门文章

  1. 【Android】如何使用ADB进行调试
  2. scratch如何让球随便移动
  3. ESP8266-Arduino编程实例-MAX6675冷端补偿K热电偶数字转换器驱动
  4. 2017年下半年自媒体的发展趋势如何?这几种那种你比较了解?...
  5. 3、Linux权限管理
  6. 本地字体库的引入方法
  7. P1247ybtoj【数学基础】5章1题【取火柴游戏】
  8. Oracle returning 详解
  9. 为什么数组的下标从 0 开始?
  10. 解决 Github 加载 ipynb 文件缓慢/失败