短信验证码服务

news2024/11/25 19:32:32

使用的是 阿里云 阿里云官网

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);//生成随机数,最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数,最大为999999
            if(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
     */
    @Override
    public 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, param
        SMSUtils.sendMessage("阿里云短信测试",
                "SMS_154123456",phone,code);

            //需要将生成的验证码 保存到??token中
            session.setAttribute(phone, code);
          return R.success("手机验证码短信发送成功");
        }
        return  R.error("手机验证码短信发送失败");
    }
}

在这里插入图片描述
点 上图的 蓝色按钮 调用API发送短信测试一下

![在这里插入图片描述](https://img-blog.csdnimg.cn/548e1be618f84829ba53180d97e1ad24.png

输入 之前你绑定的 测试手机号 ,点发起调用。

应该没反应,要买短信套餐,是免费的100条短信

在这里插入图片描述
再回到 蓝色按钮 调用API发送短信测试一下,收到短信测试成功
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/959482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDS 29 认证服务

UDS协议定义了一套标准的诊断服务&#xff0c;包括会话控制、诊断请求、诊断响应和ECU编程等功能。通过UDS协议&#xff0c;诊断工具可以向ECU发送特定的请求&#xff0c;获取ECU的状态信息和故障码&#xff0c;诊断和解决故障问题。UDS是ISO 14229标准定义的一种通信协议&…

python错误:AttributeError: module ‘pydot‘ has no attribute ‘find_graphviz‘

1.安装pydot-ng 由于pydot里面已经没有这个find_graphviz()方法了&#xff0c;选择安装pydot-ng activate python虚拟环境 pip install pydot-ng2安装graphviz 到graphviz官网上下载exe并点击安装&#xff0c;勾选添加到全局变量。 或者记住安装位置选择手动添加到path变…

Javascript动态添加表格行

1.Javascript如何动态添加表格行 图一 图二 1.首先要找到添加按钮代码&#xff0c;设置id选择器 <button type"button" id"insertRow" class"btn btn-danger" style"background-color: #ca6307;border: none">新增一项&l…

【VTK】 vtkMapper

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文主要分享VTK中关于vtkMapper的相关知识和使用方法,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO </

工时管理:如何创建和管理工时表

工时管理是人力资源和业务管理的重要组成部分&#xff0c;对于项目管理也是不可或缺的。无论是哪种类型的工作&#xff0c;如果有团队或员工&#xff0c;那么你就需要工时表来跟踪时间和费用。 什么是工时表&#xff1f; 工时表是一种物理或电子文档&#xff0c;雇主用它来跟…

OCR多语言识别模型构建资料收集

OCR多语言识别模型构建 构建多语言识别模型方案 合合&#xff0c;百度&#xff0c;腾讯&#xff0c;阿里这四家的不错 调研多家&#xff0c;发现有两种方案&#xff0c;但是大多数厂商都是将多语言放在一个字典里&#xff0c;构建1w~2W的字典&#xff0c;训练一个可识别多种语…

【监控平台 - zabbix】

目录 一、环境搭建 1. zabbix程序结构 2. zabbix-agent支持的协议 3. zabbix监控环境搭建 3.1 安装方式 3.2 配置zabbix官方yum源 3.3 安装服务端与客户端 3.4 安装zabbix-web 3.4.1 cd /etc/yum.repos.d/ 3.4.2 安装依赖源 3.4.3 安装本部件 3.4.4 安装存储数据库…

时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测

时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测 目录 时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限…

Effective STL 1.仔细选择你的容器

Effective STL 1.仔细选择你的容器 文章目录 Effective STL 1.仔细选择你的容器迭代器容器分类连续内存容器和基于节点的容器的区别 如何选择容器结语>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 标准序列容器 vector、string、deque 和 list 标准…

【技巧】如何在Excel表格中添加水印?

想要在Excel表格中添加水印展示&#xff0c;但是Excel并没有像word文档一样的直接添加水印的功能&#xff0c;怎么办&#xff1f; 今天小编来分享一个方法&#xff0c;也能实现Excel表格的添加水印~ 1、 打开Excel表格&#xff0c;依次点击菜单栏的“插入” → “文本框” →…

小件固定资产怎么管理好

对于小件固定资产的管理&#xff0c;可以考虑以下几个方面&#xff1a;  建立资产档案&#xff1a;对所有小件固定资产进行登记、编号、分类、评估等工作&#xff0c;建立详细的资产档案。  定期盘点&#xff1a;定期对小件固定资产进行盘点&#xff0c;确保资产账面与实际…

【2022】贝壳找房秋招C++工程师笔试卷1 牛妹的字符串

牛妹的字符串 牛妹拿到了一个只由小写字母组成的字符串s&#xff0c;接下来将字符串执行k次操作&#xff0c;每次操作都会把s中ASCII码最小的字母从s中删除&#xff0c;请返回k次操作之后的字符串s。 参考优秀的网友1&#xff1a;26个小写字母 放在数组里正好由大到小排序。 …

聚合多个电商API接口平台

API接口测试&#xff08;点击免费测试&#xff09; 随着数字化商业时代的到来&#xff0c;API接口已成为电商资源连接利器&#xff0c;也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示&#xff0c;全球互联网企业近3/4的企业持续投入数字化转型&#xff0c…

SpingBoot 过滤器和拦截器有什么区别?

1. 运行顺序不同&#xff08;如图&#xff09;&#xff1a; 过滤器是在 Servlet 容器接收到请求之后&#xff0c;但在 Servlet 被调用之前运行的&#xff1b;而拦截器则是在 Servlet 被调用之后&#xff0c;但在响应被发送到客户 端之前运行的。 2. 配置方式不同&#xff1a; …

划分字母区间【贪心算法】

划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。…

跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展

云数据中心里&#xff0c;为什么需要DCI互通&#xff1f; 云化数据中心&#xff0c;网络资源通过虚拟化技术形成资源池&#xff0c;实现业务与物理网络解耦&#xff0c;通过网络虚拟化&#xff0c;物理网络资源可以被分成多个虚拟网络资源&#xff0c;从而提高网络资源的使用效…

轻松教你实现多设备使用WhatsApp!

小S之前发过几篇关于WhatsApp的使用技巧还有注意事项的文章&#xff0c;发现大家对WhatsApp这个软件还是非常关注的。那么小S今天就再跟大家说一下WhatsApp。 WhatsApp去年更新推出了多设备使用的功能&#xff0c;通过跟主要手机关联&#xff0c;可以在网页、桌面设备、Androi…

代码随想录算法训练营第38天 | ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

文章目录 前言一、理论基础二、509. 斐波那契数三、70. 爬楼梯四、746. 使用最小花费爬楼梯总结 前言 动态规划 一、理论基础 1.基础 2.背包问题 3.打家劫舍 4.股票问题 5.子序列问题 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;…

Java使用pdfbox将pdf转图片

前言 目前比较主流的两种转pdf的方式&#xff0c;就是pdfbox和icepdf&#xff0c;两种我都尝试了下&#xff0c;icepdf解析出来有时候会出现中文显示不出来&#xff0c;网上的解决方式又特别麻烦&#xff0c;不是安装字体&#xff0c;就是重写底层类&#xff0c;所以我选择了p…

Segment Routing原理

以上内容均属原创&#xff0c;如有不详或错误&#xff0c;敬请指出。本文作者&#xff1a; 坏坏 本文链接&#xff1a; http://t.csdn.cn/2fUE5 版权声明&#xff1a; 本博客所有文章除特别声明外&#xff0c;如需转载&#xff0c;请联系作者注明出处并附带本文链接&#xf…