Springboot实现阿里云通信短信服务有关短信验证码的发送功能

前言

短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。

现在市面上的短信服务平台有很多。大家在选择的时候未免会有些不好抉择。本人建议选择短信服务商应遵循以下几点:

  1. 服务商知名度高,业务流量大。(这样的平台可信度高)
  2. 服务稳定,不能经常宕机。(保证自身业务的流畅运行)
  3. 文档全面详细。(没文档怎么玩?)

最近的一个项目中,注册和修改密码时需要用到短信验证码校验手机号的功能。本人也是对比几家后,直接选择阿里云通信的短信服务。(本身项目服务器也是部署在阿里云上,但之前并不知道阿里云有短信服务,早知道阿里有的话就不会浪费时间找其他平台了)。废话不多说,下面直接开始短信验证服务教程。

准备

1.登录阿里云,开通阿里云通信短信服务。

2.申请accessKey

选择右上角accessKeys,创建一个access key

3.进入控制台,申请短信签名。这个作用就是用于短信前面“【】”里面的名称。输入时不需要带“【】”

注意申请规范,要不然审核不会过。符合规范的话一般一个小时左右就能通过了。

我这里的签名是“喝酒不骑马”

4.申请短信模版

模板类型选择验证码。注意,选择验证码后,模板替代变量只支持验证码作为变量,且变量替换值<=6位数字或字母。

我的模板如下图

1.下载SDK包

https://help.aliyun.com/document_detail/55284.html

下载后,我们需要使用

aliyun-java-sdk-core-3.2.2.jar

aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar

aliyun-sdk-mns-1.1.8.jar

这三个包

SpringBoot + Maven下的jar包配置

1.在工程的resources目录下新建一个lib文件夹,将jar包复制进去。

2.由于maven库中没有上述几个jar包的依赖,所以需要将本地lib目录下的jar包导入到maven中。并在pom.xml文件中填下如下依赖。

<dependency>
 <groupId>aliyun-message-sdk-core</groupId>
 <artifactId>aliyun-message-sdk-core</artifactId>
 <version>3.2.3</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-core-3.2.2.jar</systemPath>
</dependency>
<dependency>
 <groupId>aliyun-message-sdk-mns</groupId>
 <artifactId>aliyun-message-sdk-mns</artifactId>
 <version>1.1.8</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-sdk-mns-1.1.8.jar</systemPath>
</dependency>
<dependency>
 <groupId>aliyun-java-sdk-dysmsapi</groupId>
 <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
 <version>1.0.0</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar</systemPath>
</dependency>

注意, <groupId>、<artifactId>、<version>随意填写。<scope>system</scope>必须要加,这表示导入本地的jar包。

${project.basedir}为项目的根路径。

建立AliyunMessageUtil工具类

public class AliyunMessageUtil {
 private static final String product = "Dysmsapi";
 //产品域名,开发者无需替换
 private static final String domain = "dysmsapi.aliyuncs.com";
 // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
 private static final String accessKeyId = "这里替换你的accessKeyId";
 private static final String accessKeySecret = "这里替换你的accessKeySecret";
 public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException {
  //可自助调整超时时间
  System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  //初始化acsClient,暂不支持region化
  IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  IAcsClient acsClient = new DefaultAcsClient(profile);
  //组装请求对象-具体描述见控制台-文档部分内容
  SendSmsRequest request = new SendSmsRequest();
  //必填:待发送手机号
  request.setPhoneNumbers(paramMap.get("phoneNumber"));
  //必填:短信签名-可在短信控制台中找到
  request.setSignName(paramMap.get("msgSign"));
  //必填:短信模板-可在短信控制台中找到
  request.setTemplateCode(paramMap.get("templateCode"));
  //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为$[code]"时,此处的值为
  request.setTemplateParam(paramMap.get("jsonContent"));
  //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//  request.setSmsUpExtendCode(paramMap.get("extendCode"));
  //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//  request.setOutId(paramMap.get("outId"));
  //hint 此处可能会抛出异常,注意catch
  SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  return sendSmsResponse;
 }
}

sendSms(Map<String, String> paramMap)方法是我封装的方法。传入的参数是paramMap,其中包含以下属性:

phoneNumber:接受者手机号

msgSign:短信签名名称。在控制台的短信签名里能找到。

templateCode:短信模版的code。见控制台中的模版code。

jsonContent:需要替换的变量的JSON字符串。对于验证码来说,String jsonContent = "{\"number\":\"" + randomNum + "\"}";即可。其中randomNum是随机生成的6位验证码。

extendCode:上行短信模板的验证码,不需要的话可以忽略

outId:扩展字段,不需要则可以忽略

调用demo

public String sendMsg() throws LgdServiceException, ClientException {
 String phoneNumber = "18888888888";
 String randomNum = createRandomNum(6);
 String jsonContent = "{\"number\":\"" + randomNum + "\"}";
 Map<String, String> paramMap = new HashMap<>();
 paramMap.put("phoneNumber", phoneNumber);
 paramMap.put("msgSign", "喝酒不骑马");
 paramMap.put("templateCode", "xxxxxxxx");
 paramMap.put("jsonContent", jsonContent);
 SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap);
 if(!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {
  if(sendSmsResponse.getCode() == null) {
   //这里可以抛出自定义异常
  }
  if(!sendSmsResponse.getCode().equals("OK")) {
    //这里可以抛出自定义异常
  }
 }
}
/**
 * 生成随机数
 * @param num 位数
 * @return
 */
public static String createRandomNum(int num){
 String randomNumStr = "";
 for(int i = 0; i < num;i ++){
  int randomNum = (int)(Math.random() * 10);
  randomNumStr += randomNum;
 }
 return randomNumStr;
}

总结

短信效果如图所示

对于验证码的校验,可参见我的另一篇博文SpringBoot实现短信验证码校验.

以上所述是小编给大家介绍的Springboot实现阿里云通信短信服务有关短信验证码的发送功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 阿里云PHP SMS短信服务验证码发送方法

    开通SMS服务 首先去这个网站开通阿里云的SMS短信服务:https://www.aliyun.com/product/sms?spm=5176.8142029.388261.295.vU5T5g 创建签名.模板 要使用短信服务器需要先创建签名和模板,并提交给阿里云审核通过才可以正常使用短信服务. 创建签名 创建签名的时候注意一下签名名称,其他的话就不累赘了. 记住签名名称 现在请记住你创建的签名名称,一会在代码中需要使用. 创建模板 创建模板也很简单,阿里云已经把要如何填写写的很清楚了. 查看

  • nodejs接入阿里大鱼短信验证码的方法

    之前做过nodejs接入阿里大鱼短信验证码的方法,最近需要回顾,就顺便发到随笔上了 1. 阿里云上申请accessKey 如果已经申请过了,则可以直接使用.否则,首先点击右上角个人信息下拉菜单中的accessKeys进行申请. 2. 阿里云上开通短信服务 阿里大于的短信验证码服务已经并入阿里云中,通过阿里云的控制台->产品与服务->短信服务(在D字头中)进入. 按照阿里云提示的步骤操作,申请短信签名和短信模板,等待审核通过.记录下模板的id. 3. 使用apis-aliyun发送验证码 ```

  • 阿里大于短信验证码node koa2的实现代码(最新)

    今天给大家分享一下最新版阿里大于的短信验证码在node koa2的实现,还是有很多坑需要注意. 首先需要在阿里云注册账号,并获取阿里云访问秘钥,在控制台完成模板与签名的申请获得调用接口的必备参数.具体方法参见短信发送api 步骤一:安装npm包 npm install @alicloud/sms-sdk --save 步骤二:代码实现.常见一个sendmsg.js的controller /** * 引用sdk */ const SMSClient = require('@alicloud/sms

  • Node.js环境下Koa2添加travis ci持续集成工具的方法

    前言 因为最近使用koa2做项目测试开发,所以想整合下travis ci,网上资料也比较少,于是自己就整了个,做个记录.分享出来供大家参考学习,下面来看看详细的介绍吧. 方法如下: 先来看下travis.yml的配置 language: node_js node_js: - "6" before_script: - ./node_modules/.bin/knex migrate:latest --knexfile='./app/knexfile.js' script: - npm r

  • nodejs6下使用koa2框架实例

    koa2里面使用ES7的语法,如async.await所以需要运行在node7.6之后:但在node7.6之前也可以利用babel是的koa2可以运行. 首先项目中安装babel,和babel的几个模块: npm install babel babel-register babel-preset-env --save 然后在入口文件中引入'babel-register'模块 require('babel-register'); 而后引入业务代码: require('./server.js');

  • node koa2实现上传图片并且同步上传到七牛云存储

    因为升级到新的node版本,之前的通过很多上传图片的方式都已经不适用了,所以自己就写了一个对于 koa2上传图片的小demo,记录一下心得. 废话不多说,下面直接上代码,里面都有注释. const Koa = require('koa'); const route = require('koa-route'); const serve = require('koa-static'); const inspect = require('util').inspect const path = req

  • Springboot实现阿里云通信短信服务有关短信验证码的发送功能

    前言 短信验证码是通过发送验证码到手机的一种有效的验证码系统.主要用于验证用户手机的合法性及敏感操作的身份验证. 现在市面上的短信服务平台有很多.大家在选择的时候未免会有些不好抉择.本人建议选择短信服务商应遵循以下几点: 服务商知名度高,业务流量大.(这样的平台可信度高) 服务稳定,不能经常宕机.(保证自身业务的流畅运行) 文档全面详细.(没文档怎么玩?) 最近的一个项目中,注册和修改密码时需要用到短信验证码校验手机号的功能.本人也是对比几家后,直接选择阿里云通信的短信服务.(本身项目服务器也是

  • SpringBoot整合阿里云OSS对象存储服务的实现

    今天来整合一下SpringBoot和阿里云OSS对象存储服务. 一.配置OSS服务 先在阿里云开通对象存储服务,拿到AccessKeyId.AccessKeySecret. 创建你的bucket(存储空间),相当于一个一个的文件夹目录.按业务需求分类存储你的文件,图片,音频,app包等等.创建bucket是要选择该bucket的权限,私有,公共读,公共读写,按需求选择.创建bucket时对应的endpoint要记住,上传文件需要用到. 可以配置bucket的生命周期,比如说某些文件有过期时间的,

  • SpringBoot整合阿里云OSS对象存储服务实现文件上传

    1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文档,这个获取值本身就不难. 重点:记下你的AccessKey ID.AccessKey Secret以及你刚才创建的Buacket名字BucketName. 2. 配置: 在pom里引入oss要用的依赖 <dependency> <groupId>com.aliyun.oss</

  • SpringBoot整合阿里云短信服务的方法

    目录 一.新建短信微服务 1.在service模块下创建子模块service-msm 3.配置application.properties 4.创建启动类 二.阿里云短信服务 三.编写发送短信接口 1.在service-msm的pom中引入依赖 2.编写controller,根据手机号发送短信 3.编写service 一.新建短信微服务 1.在service模块下创建子模块service-msm 2.创建controller和service代码 3.配置application.propertie

  • SpringBoot整合阿里云开通短信服务详解

    准备工作 开通短信服务 如果开通不成功,就只能借下别人已经开通好的短信,如果不想重复,可在其下创建一个新的模板管理 这里只是介绍如何使用 导入依赖 com.aliyun aliyun-java-sdk-core 4.5.1 com.aliyun aliyun-java-sdk-dysmsapi 1.1.0 com.alibaba fastjson 1.2.62 发送验证码到手机上,验证码生成工具类(内容较为固定,也可根据需求改) package com.xsha.msmservice.utils

  • 关于springboot集成阿里云短信的问题

    目录 1.获取签名与模板 2.编写模板与签名的枚举类 3.配置类 4.测试类 ​ 1.获取签名与模板 进入阿里云平台,进入短信服务模块,在以下位置添加签名和模板(格式一定按照要求填写 审批的比较严格) 2.编写模板与签名的枚举类 在上文获取模板与签名成功后,并作为常量放在枚举类中. public enum DySmsEnum { /** * 本类此处需要修改(短信模板编码,签名,参数) */ LOGIN_TEMPLATE_CODE("SMS_187570276", "自定义软

  • SpringBoot实现阿里云短信接口对接的示例代码

    前言 公司最近项目需要一个手机验证码的功能,任务确定后,倍感亚历山大,以为和第三方对接的都好麻烦,查阿里的API.网上大神写的博客,各种查之后才发现,简单的一塌糊涂,这里想说个问题,不知道其他的攻城狮们是不是和我一样的心里,刚接触个没做过的任务时,会一脸懵里的着急,无从下手的感觉,后来会了,就觉得简单的一*,在这里我说一下自己的体会,遇到任何难点,先理思路.任务拆分.逐个查资料,其实一套下来,就不会那种一脸懵逼的干着急... 所需条件 1.阿里云账户 2.开通云通讯中的短信服务 3.申请短信签名

  • SpringBoot实现阿里云短信发送的示例代码

    阿里云accessID和secret请自行进入阿里云申请 sms.template.code 请进入阿里云,进行短信服务进行魔板添加 开源代码地址在文章末尾 话不多说,直接上代码: application.properties: server.port=8002 #server.servlet.context-path=/ spring.datasource.url=jdbc:mysql://localhost:3306/ssm_message?useUnicode=true&character

  • springboot整合阿里云oss上传的方法示例

    OSS申请和配置 1. 注册登录 输入网址:https://www.aliyun.com/product/oss 如果没有账号点击免费注册,然后登录. 2.开通以及配置 点击立即开通 进入管理控制台 第一次使用会出现引导,按引导点击"我知道了",然后点击创建Bucket. 如果没有存储包或流量包点击购买. 点击确定,返回主页面,出现该页面,点击我知道了 将EndPoint记录下来,方便后期添加到我们项目的配置文件中 创建 AccessKeyID 和 AccessKeySecret 点击

  • Springboot集成阿里云OSS上传文件系统教程

    第一步:开通阿里云OSS服务,创建Bucket,获取id和密钥 第二步:根据官方文档编写上传代码 1.新建maven项目 添加依赖: <!-- 阿里云oss依赖 --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> </dependency> <!-- 日期工具栏依赖 --> <

随机推荐