通用阿里云的短信验证码(详细)

article/2025/8/19 20:25:54

阿里云手机短信验证码

第一步 登录阿里云开放平台

1、进入阿里云开放平台---->点击控制台

teeX1H.png

2、点击AccessKey管理

temQ4U.png

3、点击之后会弹出提示,选择开始使用子用户

temWUf.png

4、新建一个用户组,然后按要求填写即可

ten0Zq.png

ten2QJ.png

5、创建一个用户,按要求填写内容,勾选编程访问

tenVPO.png

tenqQH.png

6、会得到AccessKey(id,密码)

要将这个账号保存下来!

//用户登录名称 ====================
//AccessKey ID ====================
//AccessKey Secret ============================

第二步,开通阿里云短信服务

1、找到短信控制台面板,点击国内消息

teK8gg.png

2、选择模板管理,点击添加模板

teKRV1.png

以下内容按要求填写即可,申请说明需要有正当理由不然审核可能通不过

teM9MQ.png

点击提交,等待审核

3、步骤同上,点击签名管理,添加签名

注:签名需要填写应用名称、网站名称 例如:(dy学习网站) 个人用户选择适用场景的时候选择验证码,申请说明需要填写正当理由。不然可能审核不通过。

teMOOJ.png

提交后等待审核通过即可。

第三步,编写代码测试

1、新建项目

创建一个Java项目,笔者创建的是SpringBoot项目

2、添加依赖

点击快速学习——> 查看APIDemo,里面会有maven的依赖和官方的Demo

teQ2h6.png

maven依赖:

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.0</version>
</dependency>

3、编写代码

简单测试,结合了redis的使用

controller:

package com.qxx.sendmessage.controller;import com.qxx.sendmessage.service.SendMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;/*** @author 东亚猛男Qxx*/@RestController
@CrossOrigin //跨域的支持
public class Controller {@Autowiredprivate SendMessage sendMessage;@Autowiredprivate RedisTemplate<String,String> template;//RestFul风格请求@GetMapping("/send/{phone}")public String send(@PathVariable("phone") String phone){//先看redis里面该手机号储存的验证码是否失效String code = template.opsForValue().get(phone);if (!StringUtils.isEmpty(code)){return phone+":"+"验证码尚未过期!";}//截取6为字符当作验证码(UUID)code = UUID.randomUUID().toString().substring(0, 5);HashMap<String,Object> map = new HashMap<>();//key必须为codemap.put("code",code);//调用service层的方法 传两个参数:phone,mapBoolean flag = sendMessage.sendMessage(phone,map);if (flag){//存入redis,设置失效时间template.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return phone+":"+"验证码"+code+"发送成功!";}return "发送失败";}
}

service:

package com.qxx.sendmessage.service.impl;import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.qxx.sendmessage.service.SendMessage;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;/*** @author 东亚猛男Qxx*/
@Service
public class SendMessageImpl implements SendMessage {@Overridepublic Boolean sendMessage(String phoneNum,Map<String, Object> map) {System.out.println(JSONObject.toJSONString(map));//连接阿里云,第一个参数不用改变,后两个填写自己的accessKeyId和accessSecretDefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");IAcsClient client = new DefaultAcsClient(profile);//构建请求!CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("dysmsapi.aliyuncs.com"); //不要动request.setSysVersion("2017-05-25"); //不要动request.setSysAction("SendSms");//自定义参数(手机号,验证码,签名,模板)request.putQueryParameter("RegionId", "cn-hangzhou");request.putQueryParameter("PhoneNumbers", phoneNum);request.putQueryParameter("SignName", "签名");request.putQueryParameter("TemplateCode", "模板(SMS-*****)");//构建一个短信的验证码request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));try {CommonResponse response = client.getCommonResponse(request);System.out.println(response.getData());return response.getHttpResponse().isSuccess();} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return false;}
}

4、测试

此处用的是postman工具

redis:

te15TA.png

短信:

te32hq.png

结语:

可以编写可复用的微服务接口,来实现验证码的发送,根据实际情况进行封装


http://chatgpt.dhexx.cn/article/d092uGJI.shtml

相关文章

《设计模式系列》- 代理模式

有情怀&#xff0c;有干货&#xff0c;微信搜索【三太子敖丙】关注这个有一点点东西的程序员。 本文 GitHub https://github.com/JavaFamily 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 设计模式已经跟大家分享很多了常见的模式了&#xff0c;感兴趣的…

Nginx代理tomcat

为什么需要为tomcat配置nginx反向代理&#xff1f; 1.当服务器上同时拥有nginx与tomcat时&#xff0c;tomcat修改8080端口为80会冲突 2.tomcat不更改监听端口8080即可使用nginx的80端口 3.Nginx对于静态的请求速度上要优于Tomcat&#xff0c;Tomcat不擅长做高并发的静态文件请…

GPU虚拟化

GPU 虚拟化技术 须知: 文章内容大程度参考B站王利明老师对《GPU虚拟化技术分享》的主题演讲 视频链接: https://b23.tv/uQKBpcK 1 GPU 和软件架构 GPU可以用于图形渲染&#xff0c;GPU 作为加速图形绘制的芯片时&#xff0c;它主要面向的产品主要是会集中在 PC 和游戏两个市场…

代理模式(四):代理模式效果与适用场景

15.7 代理模式效果与适用场景 代理模式是常用的结构型设计模式之一&#xff0c;它为对象的间接访问提供了一个解决方案&#xff0c;可以对对象的访问进行控制。代理模式类型较多&#xff0c;其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。 15.7.1 模式优点 代理…

Nginx 反向代理、负载均衡、虚拟主机

文章目录 一、反向代理1、代理原理2、正/反向代理的区别&#xff08;1&#xff09;正向代理&#xff08;2&#xff09;反向代理 3、配置Nginx-Proxy&#xff08;1&#xff09;代理模块&#xff08;2&#xff09;代理配置&#xff08;3&#xff09; proxy 代理实例 二、负载均衡…

设计模式之代理模式

定义 代理模式又叫委托模式&#xff0c;是为某个对象提供一个代理对象&#xff0c;并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。 我们使用代理对象来代替对真实对象(real object)的访问&#xff0c;这样就可以在不修改原真实对象的前提下&a…

java设计模式9:Proxy(3)虚拟代理

加载延迟可以提高软件的友好程度。 当一个真实的主题对象的加载需要耗费资源时&#xff0c;一个虚拟代理对象可以代替真实对象接受请求。一旦接到请求&#xff0c;代理对象马上打出一段“正在加载”的信息&#xff0c;并在适当的时候加载真实主题对象&#xff0c;也就是模块或…

设计模式:(代理模式)

1.定义 在代理模式&#xff08;Proxy Pattern&#xff09;中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中&#xff0c;我们创建具有现有对象的对象&#xff0c;以便向外界提供功能接口。 简单来说&#xff1a;代理模式为其他对象提…

Nginx 虚拟主机与反向代理

一、虚拟主机 虚拟主机使用的是特殊的软硬件技术&#xff0c;它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机&#xff0c;每台虚拟主机都可以是一个独立的网站&#xff0c;可以具有独立的域名&#xff0c;具有完整的Intemet服务器功能&#xff08;WWW、FTP、Emai…

【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)

本文出自 http://blog.csdn.net/shuangde800 在上篇中&#xff0c;我们学习了代理模式&#xff0c;并用Java RMI实现了一个最简单的远程代理。 实际上代理模式并不仅仅应用与远程代理&#xff0c;还有很多其他的应用。 比如&#xff1a;虚拟代理。 代理模式可以以很多形式出现…

代理模式(三):远程代理,虚拟代理,缓冲代理

15.4 远程代理 远程代理(Remote Proxy)是一种常用的代理模式&#xff0c;它使得客户端程序可以访问在远程主机上的对象&#xff0c;远程主机可能具有更好的计算性能与处理速度&#xff0c;可以快速响应并处理客户端的请求。远程代理可以将网络的细节隐藏起来&#xff0c;使得客…

虚拟机 全局代理 主机代理_比较虚拟代理与真实代理的性能

云计算的关键基础是虚拟化。 面向云的设计人员&#xff0c;开发人员和管理员需要问自己的一个问题是&#xff1a;“虚拟化组件的性能水平如何与其“真实”物理对应物相提并论&#xff1f;” “如果存在负面差距&#xff0c;我该如何克服呢&#xff1f;” 本文介绍了在虚拟机&a…

设计模式——代理模式(虚拟代理)

代理模式的类型分为: (1)虚拟代理 (2)远程代理 (3)智能指引 (4)保护代理 这一篇主要讲虚拟代理,想要知道其他类型讲解的小伙伴可以去我其他博客翻一翻哦。 首先来理解一波虚拟代理,啥叫虚拟代理? 举个很常见也很通俗的例子,咱们平时抽奖的时候,是不是都想要抽个…

[转载]虚拟代理模式(Virtualnbsp;Proxy)

虚拟代理模式(Virtualnbsp;Proxy) 第25章 虚拟代理模式(Virtual Proxy) 描述&#xff1a; 虚拟代理模式 (Virtual Proxy)是一种节省内存的技术&#xff0c;它建议创建那些占用大量内存或处理复杂的对象时&#xff0c;把创建这类对象推迟到使用它的时候。在特定的应用 中&#x…

代理模式——虚拟代理(二)

代理模式定义 为另一个对象提供一个替身或占位符以控制对这个对象的访问。使用代理模式创建代表对象&#xff0c;让代表对象控制对某对象的访问&#xff0c;被代理的对象可是远程的对象、创建开销大的对象或需要安全控制的对象。 代理分三种&#xff1a; 1.远程代理&#xff…

SQL语法与数据库快速入门(1)

目录 数据库简介数据库分类常用数据库简介使用场景MySql 的安装与配置数据库客户端工具MySql 介绍SQL 简介DDL 数据库操作-创建DDL 数据库操作-查看DDL 数据库操作-修改DDL 数据库操作-删除DDL 数据库表操作简介DDL 数据库表操作-创建DDL 数据库表操作-查看DDL 数据库表操作-修…

SQL语法与数据库快速入门(2)

目录&#xff1a; 多表简介SQL 约束-外键约束多表关系简介多表查询多表查询-内连接查询多表查询-外连接查询子查询简介子查询实战数据库进阶redis 内存数据库mongodb nosql 数据库neo4j 图数据库 1.多表简介 多表及使用场景介绍&#xff1a; 多表顾名思义就是在数据库设计中…

【数据库】MYSQL轻松入门

文章目录 MYSQL入门一、MYSQL概述1. 数据库相关概念1.1 数据库&#xff0c;数据库管理系统与SQL1.2 数据库种类以及主流数据库管理系统排名1.2.1 数据库的种类1.2.2 数据库主流排名 1.3 MySQL数据库安装1.3.1 下载1.3.2 修改密码 1.4 数据模型 二、SQL2.1 通用语法与注释2.2 SQ…

Java连接mysql数据库的五分钟快速入门教程

总体流程&#xff1a;数据库->Java 总体步骤&#xff1a; 1.创建数据库并新建表 2.创建一个Java项目&#xff0c;在项目下新建文件夹lib&#xff0c;类型为Directory 3.将下载好mysql-connector-java-8.0.27.jar放到lib目录下 4.将lib下的依赖添加到Java项目中 5.编写代码连…

数据库快速入门教程--视频

数据库快速入门教程--视频 下载地址&#xff1a;http://v.51work6.com/courseInfoRedirect.do?actioncourseInfo&courseId240579本课程是这个课程体系的核心之一&#xff0c;为软件开发人员所需数据库知识的学习教材&#xff0c;而不是培训一个DBA&#xff08;数据库管理员…