当前位置: 首页 > news >正文

Java短信验证功能简单使用

注册登录阿里云官网:https://www.aliyun.com/

搜索短信服务
在这里插入图片描述

自己一步步申请就可以了
在这里插入图片描述

开发文档:
https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?version=2017-05-25&language=java-tea&tab=primer-doc

1.引入依赖

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dysmsapi20170525</artifactId>
  <version>3.1.1</version>
</dependency>

2.短信代码

package com.mc.sms.utils;

import com.aliyun.tea.*;
import java.util.Random;

/**
 * 此处有两个方法
 * 1.生成随机六位数的验证码
 * 2.发送验证码
 * @author 灯塔
 * @date: 2024/09/26  18:19
 * @version 1.0.0
 */
public class SendCodeUtils {

    private static String ALIBABA_CLOUD_ACCESS_KEY_ID = "你的AccessKey";

    private static String ALIBABA_CLOUD_ACCESS_KEY_SECRET = "你的 AccessKey Secret";

    private static String SignName = "签名名称";

    private static String TemplateCode = "模板code";

    /**
     * 生成随机的六位验证码
     * @return String
     */
    public static String generateVerificationCode() {
        // 设置验证码长度为6
        int length = 6;
        // 验证码字符集
        String digits = "0123456789";
        Random random = new Random();
        StringBuilder sb = new StringBuilder();

        // 生成六位数验证码
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(digits.length());
            sb.append(digits.charAt(index));
        }
        return sb.toString();
    }

    /**
     * 使用AK&amp;SK初始化账号Client
     * @return
     * @type com.aliyun.dysmsapi20170525.Client
     * @throws Exception
     */
    public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID)
                .setAccessKeySecret(ALIBABA_CLOUD_ACCESS_KEY_SECRET);
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }

    /**
     *
     * @param phoneNumber
     * @param verificationCode
     * @return String
     * @throws Exception
     */
    public static String verify(String phoneNumber, String verificationCode) throws Exception {
        com.aliyun.dysmsapi20170525.Client client = SendCodeUtils.createClient();
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setPhoneNumbers(phoneNumber)
                .setSignName(SignName)
                .setTemplateCode(TemplateCode)
                .setTemplateParam("{\"code\":\"" + verificationCode + "\"}");
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());
            return verificationCode;
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
            return null;
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
            return null;
        }
    }
}

3.测试

@RestController
@RequestMapping("/sms")
public class SmsController {
    @RequestMapping("/sendSms")
    public R SendSMS() throws Exception {
        String code = SendCodeUtils.generateVerificationCode();
        String phoneNumber = "18618372228";
        String verify = SendCodeUtils.verify(phoneNumber, code);
        System.out.println(verify);
        return R.ok().data(verify);
    }
}
http://www.dtcms.com/a/20147.html

相关文章:

  • vscode/cursor+godot C#中使用socketIO
  • SpringMVC新版本踩坑[已解决]
  • AUGUST的深度学习笔记(四,现代循环神经网络与注意力机制)
  • $符(前端)
  • 神经网络常见激活函数 9-CELU函数
  • CAS单点登录(第7版)10.多因素身份验证
  • 02.01、移除重复节点
  • Python关于类的一个坑点
  • 【Film Shot】Shot transition detection
  • Dify:修改环境变量并通过 Docker Compose 复用现有容器
  • 新建github操作
  • 【前端进阶】「全面优化前端开发流程」:利用规范化与自动化工具实现高效构建、部署与团队协作
  • Retrieval-Augmented Generation for LargeLanguage Models: A Survey
  • 用C语言解决逻辑推理问题:找出谋杀案凶手
  • C++游戏开发
  • 关于DispatchTime和DispatchWallTime
  • SQL sever数据导入导出实验
  • 【kafka系列】消费者
  • ubuntu /dev/ttyUSB1重命名为/dev/ttyUSB0。
  • CentOS 7.8 安装MongoDB 7教程
  • 【ROS2综合案例】乌龟跟随
  • 【信息学奥赛一本通 C++题解】1281:最长上升子序列
  • 反转链表2(92)
  • ThreadLocalRandom原理剖析
  • Spring Cloud — 深入了解Eureka、Ribbon及Feign
  • 2.【线性代数】——矩阵消元
  • C++:高度平衡二叉搜索树(AVLTree) [数据结构]
  • 【Cocos TypeScript 零基础 15.1】
  • 如何在Spring Boot中配置分布式配置中心
  • 2025-02-13 学习记录--C/C++-PTA 7-17 爬动的蠕虫