使用阿里云发送短信

使用阿里云短信服务有两种方式
在这里插入图片描述
API 发送和 控制台发送,控制台发送到话有太多限制,这里我们使用API 通过 调用服务端代码进行发送。

整体结构如下:
在这里插入图片描述

导入依赖

<!--阿里云短信发送-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.0.0</version>
        </dependency>

外放接口

    /**
     * 发送手机验证码
     */
    @ApiOperation(value = "发送手机验证码", notes = "发送手机验证码")
    @PostMapping("/sendSMS")
    public ApiResult sendSMS(@RequestParam("phone") String phone) {
        //六位数随机数
        long rand = (long)(Math.random()*900000+100000);
        String mCode = String.valueOf(rand);
        boolean mS = SengSmsUtils.sendSMS(phone,mCode);
        //返回数据
        SmsReturnVO smsReturnVO = new SmsReturnVO();
        smsReturnVO.setSendSuccess(true);
        smsReturnVO.setMCode(MD5Utils.toMD5(mCode));
        if (!mS){
            smsReturnVO.setSendSuccess(false);
        }
        return ApiResult.ok(smsReturnVO);
    }

MD5加密

/**
 * Md5加密,加密规则与客户端一致*/
public class MD5Utils {

    public static String toMD5(String s){
        String mStr = "头部特殊字符" + s + "尾部特殊字符";
        try {
            mStr = DigestUtils.md5DigestAsHex(mStr.getBytes(StandardCharsets.UTF_8));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mStr;
    }

}

发送工具类

/**
 * 发送短信通知
 * 多发
 *List<String> mobiles = new ArrayList<>();
 *mobiles.add("15*******13");
 *mobiles.add("13*******27");
 *mobiles.add("17*******56");
 *String s= getSplitString(mobiles);
 */
public class SengSmsUtils {

    // 签名
    private static final String signName = "签名管理-签名名称";
    // 模板
    private static final String templateCode = "模板管理-模板CODE";
    // 阿里云短信配置信息
    private static final String accessKeyId = "AccessKey管理-创建AccessKey";
    private static final String accessKeySecret = "创建后会显示";
    private static final String REGION_ID = "cn-hangzhou"; //固定不用改
    private static final String PRODUCT = "Dysmsapi"; //固定不用改
    private static final String DOMAIN = "dysmsapi.aliyuncs.com"; //固定不用改


    public static boolean sendSMS(String mobile,String mCode) {
        try {
            IClientProfile profile = DefaultProfile.getProfile(REGION_ID, accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint(REGION_ID, REGION_ID, PRODUCT, DOMAIN);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            SendSmsRequest request = new SendSmsRequest();
            request.setMethod(MethodType.POST);
            // 手机号可以单个也可以多个(多个用逗号隔开,如:15*******13,13*******27,17*******56)
            request.setPhoneNumbers(mobile);
            request.setSignName(signName);
            request.setTemplateCode(templateCode);
            request.setTemplateParam("{\"code\":"+"'"+mCode+"'"+"}");
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if ((sendSmsResponse.getCode() != null) && (sendSmsResponse.getCode().equals("OK"))) {
                return true;
            } else {
                return false;
            }
        } catch (ClientException e) {
            return false;
        }
    }

    /**
     * 获取逗号分隔的拼接字符串
     */
    public static String getSplitString(List<String> str) {
        StringBuilder newS = new StringBuilder();
        if (str != null && str.size() > 0) {
            for (String s : str) {
                newS.append(s).append(",");
            }
        }
        if (newS.length() > 0){
            newS.deleteCharAt(newS.length() - 1);// 删除最后一个多余的逗号
        }

        return newS.toString();
    }
}

接口返回数据

/**
 * 发送验证码返回数据类*/
@Data
public class SmsReturnVO {

    //是否发送成功
    private Boolean sendSuccess;

    //发送成功携带验证码
    private String mCode;

}
此时,调用接口后,会将加密后的验证码返回给接口调用端,接口调用端 在输入框数据验证码后进行MD5 加密,与服务端给的对比即可 (加密规则要与服务端对应)

补充,在发送工具类中的参数在阿里云中如何查看

签名管理-签名名称

在这里插入图片描述

模板管理-模板CODE

在这里插入图片描述

AccessKey管理-创建AccessKey

在这里插入图片描述
在这里插入图片描述

完结,撒花

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg for android编译全过程与遇到的问题

编译前准备 编译环境&#xff1a;Ubuntu16&#xff0c;可自行下载VMWare最新版并百度永久许可证或在服务器上安装Ubuntu ffmpeg源码&#xff1a;ffmpeg4.2.2 NDK下载&#xff1a;Android NDK r21e 有条件的最好还是在Liunx平台下编译吧&#xff0c;Windows平台下编译坑更多…

板块一 Servlet编程:第三节 HttpServletRequest对象全解与请求转发 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第三节 HttpServletRequest对象全解与请求转发 一、什么是HttpServletRequest二、接收请求的常用方法三、请求乱码问题四、请求转发&#xff1a;forward五、Request作用域getParameter和getAttribute的区别 在上一节中我们已经学习了完整的Servl…

【JavaEE】_线程的状态与转移

目录 1. 线程的状态 1.1 NEW 1.2 RUNNABLE 1.3 BLOCKED 1.4 WAITING 1.5 TIMED_WAITING 1.6 TERMINATED 2. 线程状态的转移 在多线程Thread类相关一文中已经介绍过进程的状态&#xff1a;就绪状态与阻塞状态&#xff1b; 若需详情请查看原文&#xff0c;链接如下&#…

为项目配置spring boot3+jdk17的开发环境

1&#xff0c;项目【灯灯】 https://gitee.com/dromara/lamp-cloud/tree/3.4.0/ 具体项目介绍开源查看项目简介&#xff0c;克隆下来以后发现项目使用的是spring boot3jdk17编译模式&#xff0c;本地我们一般使用spring boot2jdk8&#xff0c;为了使项目能够运行起来 需要为这…

人工智能|机器学习——基于机器学习的舌苔检测

代码下载&#xff1a; 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。在诊断中&#xff0c;中医通过观察人的舌头的舌质、苔…

前端|Day3:CSS基础(黑马笔记)

Day3:CSS基础 目录 Day3:CSS基础一、CSS初体验二、CSS引入方式三、选择器1.标签选择器2.类选择器3.id选择器4.通配符选择器 四、盒子尺寸和背景色五、文字控制属性1.字体大小2.字体样式&#xff08;是否倾斜&#xff09;3.行高单行文字垂直居中 4.字体族5.font复合属性6.文本缩…

安装Joplin Server私有化部署(docker)

安装Joplin Server私有化部署(docker) 前言: 老规矩官方文档链接 1. 首先拥有一个自己的云服务器(如果没有外网访问需求的话就随意吧) 安装docker安装方式 这里Joplin是使用PostgreSQL数据库的形式, 如果没有PostgreSQL库的话, Joplin默认使用的是SQLLite数据库 我这里使用的是…

国外高防服务器需要注意哪些方面

随着互联网的快速发展&#xff0c;网络安全问题日益突出&#xff0c;高防服务器逐渐成为企业和个人用户的首选。然而&#xff0c;在选择和使用国外高防服务器时&#xff0c;需要注意以下几个方面&#xff0c;以确保安全和稳定。 一、防御能力 首先&#xff0c;需要考虑国外高防…

Go应用性能分析实战

Go很适合用来开发高性能网络应用&#xff0c;但仍然需要借助有效的工具进行性能分析&#xff0c;优化代码逻辑。本文介绍了如何通过go test benchmark和pprof进行性能分析&#xff0c;从而实现最优的代码效能。原文: Profiling Go Applications in the Right Way with Examples…

哈希+set+map

哈希表 哈希表定义 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据关键码值(Key value)而直接进行访问的数据结构 它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快查找的速度映射函数叫做散列函数存放记录的数组叫做散…

ChatGPT-用ChatGPT指令,自学任何领域的系统知识

1. 指令位置 Github仓库&#xff1a;Mr Ranedeer AI Tutor 但是需要开通chatgtp plus版本&#xff0c;并且打开代码解释器 2 使用 学习内容 开始学习 AI甚至可以给你思考题&#xff0c;给出的答案还能进行评价 配置 通过配置表修改 深度 学习风格 沟通风格 语气风格 推…

【iOS】系统框架

文章目录 前言四十七、熟悉系统框架四十八、多用块枚举&#xff0c;少用for循环四十九、对自定义其内存管理语义的collection使用无缝桥接五十、构建缓存时选用NSCache而非NSDictionary五十一、精简initialize与load的实现代码五十二、别忘了NSTimer会保留其目标对象 前言 本次…

基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearc+源代码+文档说明

文章目录 项目用到的技术前端使用的技术后端使用的技术项目模块说明项目搭建方式项目开发进度源码下载地址 项目基于springboot2.1.6.RELEASEDubbo2.7.3 来构建微服务。 业务模块划分&#xff0c;尽量贴合互联网公司的架构体系。所以&#xff0c;除了业务本身的复杂度不是很高之…

《Solidity 简易速速上手小册》第4章:智能合约的设计与开发(2024 最新版)

文章目录 4.1 合约结构和布局4.1.1 基础知识解析深入合约布局原则理解组织结构高效布局的重要性 4.1.2 重点案例&#xff1a;构建一个在线商店合约案例 Demo&#xff1a;编写在线商店智能合约案例代码&#xff1a;OnlineStore.sol测试和验证拓展功能 4.1.3 拓展案例 1&#xff…

Django学习笔记-创建第一个django项目

1.创建一个虚拟环境的python项目 2.点击解释器设置 3.安装django包 4.终端选择Command Prompt 5.创建django项目运行django-admin startproject demo01(自命名) 6.修改连接数据库为mysql 7.修改语言(中国汉语)和时区(亚洲上海) 8.修改TEMPLATES 9.创建templates文件夹 10.安…

二、双指针问题

283、移动零&#xff08;简单&#xff09; 题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12]…

深度学习发展的艺术

将人类直觉和相关数学见解结合后&#xff0c;经过大量研究试错后的结晶&#xff0c;产生了一些成功的深度学习模型。 深度学习模型的进展是理论研究与实践经验相结合的产物。科学家和工程师们借鉴了人类大脑神经元工作原理的基本直觉&#xff0c;并将这种生物学灵感转化为数学模…

git pull CONFLICT 哪些是本地内容,哪些是远端仓库内容?

如上图&#xff0c;<<<<<< HEAD 是本地内容&#xff0c;>>>>>>> <remote_branch> 是远端仓库内容

HBase 进阶

参考来源: B站尚硅谷HBase2.x 目录 Master 架构RegionServer 架构写流程MemStore Flush读流程HFile 结构读流程合并读取数据优化 StoreFile CompactionRegion Split预分区&#xff08;自定义分区&#xff09;系统拆分 Master 架构 Master详细架构 1&#xff09;Meta 表格介…

设计模式之委派模式

文章目录 前言正文一、生活中的例子二、Java代码实现2.1 类设计2.2 代码实现2.2.1 Employee2.2.2 ArchitectureDesignEmployer2.2.3 BackEmployer2.2.4 FrontEmployer2.2.5 Leader2.2.6 EmployeeStrongPointEnum2.2.7 Boss 2.3 测试2.3.1 Client2.3.2 测试结果 三、委派模式的优…
最新文章