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

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.kler.cn/a/548027.html

相关文章:

  • 深度优化:如何用结构化提示词提升DeepSeek的响应质量
  • Ubuntu 上安装 Java 1.8
  • Unity3D 移动端 CPU 性能调优详解
  • SpringBoot3.3.0集成Knife4j4.5.0实战
  • nginx反向代理tomcat
  • linux概念详解
  • 前端构建工具
  • 聊聊 IP 地址和端口号的区别
  • 1219:马走日
  • 深入解析A2DP v1.4协议:蓝牙高质量音频传输的技术与实现
  • 上海正控ZK880 变频器基本操作
  • MongoDB 基本操作
  • 鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)
  • 宏基传奇swift edge偶尔开机BIOS重置
  • Linux网络 | 多路转接Poll
  • NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)
  • 深度学习-114-大语言模型应用之提示词指南实例DeepSeek使用手册(三)
  • docker搭建redis-cluster
  • FPGA简介|结构、组成和应用
  • MYSQL批量UPDATE的两种方式