短信验证码服务
使用的是 阿里云 阿里云官网
1.找到 左上角侧边栏 -云通信 -短信服务

2.在快速学习测试处 ,按照步骤完成快速学习,绑定要测试的手机号,选专用 【测试模板】,自定义模板需要人工审核,要一个工作日

3.右上角 获取 AccessKey 管理,获取

选择子用户,这样即使 AccessKey 泄露,也不会危机自己的阿里云账户

创建用户

进入 -获取 AccessKey ID和AccessKey 密码,只能看一次 ,截图
4.编写短信服务 api
短信服务页面-点右上角问号-点文档打开

选到Java SDK–右边 安装与使用教程

有安装环境和完整代码

环境
<!--阿里云短信服务--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.16</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>2.1.0</version></dependency>
这边贴两个常见工具类
SMSUtils 短信发送工具类
这里面需要修改accessKeyId, accessKeySecret
package com.ruigei.demo.Utils;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;/*** 短信发送工具类*/
public class SMSUtils {/*** 发送短信** @param signName 签名* @param templateCode 模板* @param phoneNumbers 手机号* @param param 参数*/public static void sendMessage(String signName, String templateCode, String phoneNumbers, String param) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","你的 accessKeyId","你的 accessKeySecret");IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setSysRegionId("cn-hangzhou");request.setPhoneNumbers(phoneNumbers);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam("{\"code\":\"" + param + "\"}");try {SendSmsResponse response = client.getAcsResponse(request);System.out.println("短信发送成功");} catch (ClientException e) {e.printStackTrace();}}}
ValidateCodeUtils 随机生成验证码工具类
package com.ruigei.demo.Utils;import java.util.Random;/*** 随机生成验证码工具类*/
public class ValidateCodeUtils {/*** 随机生成验证码* @param length 长度为4位或者6位* @return*/public static Integer generateValidateCode(int length){Integer code =null;if(length == 4){code = new Random().nextInt(9999);//生成随机数,最大为9999if(code < 1000){code = code + 1000;//保证随机数为4位数字}}else if(length == 6){code = new Random().nextInt(999999);//生成随机数,最大为999999if(code < 100000){code = code + 100000;//保证随机数为6位数字}}else{throw new RuntimeException("只能生成4位或6位数字验证码");}return code;}/*** 随机生成指定长度字符串验证码* @param length 长度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}
}
写接口
/*** 获取验证码** @param user* @return*/@Overridepublic R<String> sendMsg(User user, HttpSession session) {//获取手机号String phone = user.getPhone();if (StringUtils.hasText(phone)) {//生成 随机的4位验证码String code = ValidateCodeUtils.generateValidateCode(4).toString();log.info("code={}" + code);//调用阿里云提供的短信服务API 完成发送短信//参数分别是signName, templateCode, phoneNumbers, paramSMSUtils.sendMessage("阿里云短信测试","SMS_154123456",phone,code);//需要将生成的验证码 保存到??token中session.setAttribute(phone, code);return R.success("手机验证码短信发送成功");}return R.error("手机验证码短信发送失败");}
}

点 上图的 蓝色按钮 调用API发送短信测试一下

输入 之前你绑定的 测试手机号 ,点发起调用。
应该没反应,要买短信套餐,是免费的100条短信

再回到 蓝色按钮 调用API发送短信测试一下,收到短信测试成功

相关文章:
短信验证码服务
使用的是 阿里云 阿里云官网 1.找到 左上角侧边栏 -云通信 -短信服务 2.在快速学习测试处 ,按照步骤完成快速学习,绑定要测试的手机号,选专用 【测试模板】,自定义模板需要人工审核,要一个工作日 3.右上角 获取 Acces…...
windows如何更改/禁用系统更新
提示:首先说明这属于将更新时间更改,不过你可以的将更新时间更改为十年一百年 废话不多说开始正文: 1.首先:winR打开运行,输入regedit,进入注册表编辑器 2.进入编辑器后依次点击:HKEY_LOCAL_MACHINE\SOFT…...
Clion 使用ffmpeg 学习1 开发环境配置
Clion 使用ffmpeg 学习1 开发环境配置 一、准备工作1. 准备环境2. 下载FFmpeg 二、操作步骤1. Clion 新建一个C项目2. 修改 CMakeLists.txt3. 修改配置4. 运行测试5. 打印rtsp 流信息的 demo 一、准备工作 在视频处理和多媒体应用程序开发中,FFmpeg 是一个强大的开…...
浏览器连不上 Flink WebUI 8081 端口
安装 flink-1.17.0 后,start-cluster.sh 启动,发现浏览器连不上 Flink WebUI 的8081端口。 问题排查: command R,输入cmd,检查宿主机能否ping通虚拟机,发现能ping通。 检查是否有flink以外的任务占用8081…...
Doris集群安装部署(1.2.4.1 release)
此文阅读需要有Linux和服务器硬件基础!某些内容写的不是特别细,如果常见的linux基础命令tar、uzip、mv、mkdir、系统包的安装等等,以文字带过了,这样可以减少文章篇幅。官方的安装部署方式一定要好好看一下,最好是尝试…...
对HashMap的value做升序、降序
public class MapUtils {// Map的value值降序排序public static <K, V extends Comparable<? super V>> Map<K, V> sortDescend(Map<K, V> map) {List<Map.Entry<K, V>> list new ArrayList<>(map.entrySet());list.sort((o1, o2)…...
算法面试-深度学习基础面试题整理-AIGC相关(2023.9.01开始,持续更新...)
1、stable diffusion和GAN哪个好?为什么 ? Stable diffusion是一种基于随机微分方程的生成方法,它通过逐步增加噪声来扰动原始图像,直到完全随机化。然后,它通过逐步减少噪声来恢复图像,同时使用一个神经网…...
Python、PHP和Java下的反序列化漏洞复现实例
环境准备 这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 python反序列化 p83 CTF夺旗 Python考点SST&反序列化&字符串_正经人_____的博客-CSDN博客 php反序列化 p84 CTF夺旗-PHP弱类型&异或取反&序列化&…...
html的使用
一,HBuilder –1,使用 直接解压就可以用, 创建项目: 直接点击 新建项目,输入项目名和选中项目存放位置,创建. 创建资源: 选中项目,右键,新建… 二,HTML –1,概述 是超文本标记语言,专门用来制作网页的. 超文本: 网页中可以包含各种类型的元素.包括: 文字,数字,符号,图片,音频,…...
docker linux(centos 7) 安装
这是个目录 1:安装1:手动安装(适用于centos7)之一2:手动安装(适用于centos7)之二3:一键安装docker4:二进制安装1:下载二进制包2:解压3:移动文件4:后台运行docker5:测试 dicker命令表999:遇到的问…...
C语言sizeof和strlen的区别?
sizeof和strlen有什么区别? sizeof本质是运算符(sizoof既是关键字也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。 sizeof…...
小文智能GPT助手介绍
如何使用小文交互的GPT助手,让AI更加智能,适用更多场景? 在小文智能最新推出的4.0版本,有一个新功能,叫做GPT助手。GPT助手,顾名思义,即在小文智能的场景中,接入ChatGPT,…...
SpringBoot使用i18n国际化
使用的SpringBoot版本是2.3.5 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version><relativePath/> </parent> 一、简单测试…...
Jmeter的自动化测试实施方案
前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置、本地配置和运行、服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以解…...
nginx优化相关
https://blog.csdn.net/liuxiao723846/article/details/46862381 Nginx反向代理,当后端为Https时的一些细节和原理_nginx反向代理https_赶路人儿的博客-CSDN博客 nginx - 寒星12345678999 - 博客园 (cnblogs.com)...
美客多(mercadolibre)测评下单技术(养号环境搭建详解)
MercadoLibre(美客多)是拉丁美洲的一个网购平台。该公司为其客户提供电子商务交易的购买,出售,支付和收集机制。目前全球第十大电商市场——巴西是MercadoLibre的主要市场,占据近60%的平台营收,接着是阿根廷…...
UE5- c++ websocket客户端写法
# 实现目标 ue5 c 实现socket客户端,读取服务端数据,并进行解析 #实现步骤 {projectName}.Build.cs里增加 "WebSockets","JsonUtilities", "Json"配置信息,最终输出如下: using UnrealBuildTool;…...
C语言——函数的使用
无参无返回值 语法格式如下: // 函数定义 void 函数名() {函数体 }// 函数调用 函数名();函数名是标识符的一种,需要遵循规则函数只需要定义一次,反复调用只定义函数, 不调用函数, 函数永远不会被执行案例需求: 编写一个函数&am…...
DVWA XSS
反射型 low 查看源代码,没有任何过滤 构造 medium 这里是过滤了 high 这里把双写和大小写和JavaScript都过滤了,用事件来绕过<img src0 οnerrοralert(“xss”)> impossible 这里使用htmlspecialchars进行实体转换并且输出的结果还不能使用事件来…...
石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设
一、行业背景 石油化工生产存储企业属于高温、高压、易燃、易爆、有毒的危险行业,其生产装置大型化、密集化、生产工艺复杂、生产过程紧密耦合。随着互联网技术的发展,运用先进的AI、物联网、大数据、云计算等技术手段不断提高石油化工行业的安全监管水…...
PCB布局设计规范与工程实践要点
PCB布局设计思路与工程实践指南1. 布局设计基本原则1.1 结构约束优先原则在PCB布局初期,必须优先考虑机械结构约束条件:定位安装孔、连接器等结构件需严格按照外壳设计文件放置连接器1脚方向必须与结构设计匹配,避免装配错误元件高度不得超过…...
【人物传记】模拟单片集成电路之父-鲍勃·魏德拉
1 鲍勃魏德拉简介 鲍勃魏德拉(Bob Widlar) (1937-1991)模拟集成电路的奠基人,以μA702、μA709等开创性设计定义了模拟芯片的规则,用反叛与幽默改写了硅谷的精神,其创造的电流源、带隙基准等技术至今仍运行在每一块芯…...
RoboMaster装甲板灯条匹配算法实战:从图像预处理到目标框定(附完整C++/OpenCV源码)
1. 项目背景与核心挑战 RoboMaster机甲大师赛中的装甲板识别是自动瞄准系统的关键技术难点。赛场上高速移动的机器人装甲板通常配备LED灯条作为视觉标识,这种设计让计算机视觉算法能够在复杂环境下快速定位目标。但实际开发时会遇到几个头疼的问题:强光干…...
嵌入式ADC过采样驱动文档规范与实践
项目标题缺失有效技术信息,项目摘要仅为编码“PURS_ZI_007”,项目关键词为空,Readme文档内容未提供。根据嵌入式底层技术文档创作规范,所有输出必须严格基于输入的英文原始材料——包括功能描述、API定义、配置项、示例代码及架构…...
OpenClaw技能开发指南:为Qwen3.5-4B-Claude定制专属自动化
OpenClaw技能开发指南:为Qwen3.5-4B-Claude定制专属自动化 1. 为什么需要自定义Skill? 去年我接手了一个重复性极高的数据整理工作——每天要从十几个气象网站抓取数据,手动整理成Excel报表。当我第三次在凌晨两点对着屏幕核对数据时&#…...
Vivado项目文件太多分不清?这份FPGA开发必备的“文件后缀速查手册”请收好
Vivado项目文件管理实战指南:从混乱到有序的FPGA开发进阶 每次打开Vivado项目文件夹,看到满屏的.bat、.dcp、.xci文件是不是感觉像走进了一个迷宫?作为FPGA开发者,我们经常需要在这些看似杂乱的文件海洋中寻找特定的配置或输出结果…...
终极免费方案:3分钟掌握英雄联盟身份伪装完整指南
终极免费方案:3分钟掌握英雄联盟身份伪装完整指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于官方LCUAPI开发的英雄联盟个性化展示工具,通过安全合规的方式实现游戏身份伪装、…...
BlueDot BME280库深度解析:嵌入式多传感器驱动实践
1. BlueDot BME280 库技术解析:面向嵌入式工程师的多传感器驱动实践指南BME280 是博世(Bosch)推出的高精度环境传感器,集成温度、相对湿度与气压三参数测量能力,广泛应用于气象站、IoT终端、无人机姿态补偿及室内环境监…...
程序员成长之路:从技术热爱到工程艺术
1. 程序人生:从技术热爱到工程艺术1.1 技术启蒙与早期实践1987年进入武汉大学计算机系标志着一段技术人生的开始。最初接触的是Motorola 68000处理器系统,配置540KB内存,运行UNIX操作系统。这种八人共享的计算环境成为编程技术的第一课堂。大…...
FPGA小白也能懂:用Verilog在Xilinx Vivado里驱动HC-SR04超声波模块(附完整仿真)
FPGA实战:从零构建超声波测距系统(VerilogVivado全流程解析) 第一次接触FPGA时,最让人头疼的莫过于如何将抽象的硬件描述语言转化为实际可运行的电路。去年我在指导电子设计竞赛时,发现学生们对超声波模块的应用需求很…...
