万事第一步:

    1. <!-- 阿里云-短信服务SMS -->
    2. <dependency>
    3. <groupId>com.aliyun</groupId>
    4. <artifactId>dysmsapi20170525</artifactId>
    5. <version>2.0.8</version>
    6. </dependency>

    第二步:
    创建短信验证工具类(阿里云有实例):

    1. package com.mhy.projectdemo.utils;
    2. //⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    3. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡖⠒⠒⠤⢄⠀⠀
    4. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
    5. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
    6. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
    7. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
    8. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
    9. // ⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
    10. // ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
    11. // ⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀:⠃⠀⠀⡗⠀⠀⠀⠀⠀
    12. // ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
    13. // ⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
    14. // ⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
    15. // ⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
    16. // ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
    17. // ⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
    18. // ⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
    19. // ⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
    20. // ⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
    21. // ⠀⠙⣌⠳ 小马无忧 ⡏⠀⠀⠈⠳⡌⣦⠀⠀⠀
    22. // ⠀⠀⠈⢳⣈⣻ ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
    23. // ⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
    24. // ⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
    25. // ⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
    26. // ⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
    27. // ⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
    28. // ⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
    29. // ⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
    30. // ⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
    31. // ⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
    32. // ⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
    33. // ⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽⠀
    34. import com.aliyun.dysmsapi20170525.Client;
    35. import com.aliyun.tea.*;
    36. import com.aliyun.dysmsapi20170525.*;
    37. import com.aliyun.dysmsapi20170525.models.*;
    38. import com.aliyun.teaopenapi.*;
    39. import com.aliyun.teaopenapi.models.*;
    40. import com.mhy.projectdemo.config.SystemConfig;
    41. /**
    42. * @author Feri
    43. * @date 2021/12/31 10:06
    44. * @description:TODO
    45. */
    46. public class AliSmsUtils {
    47. private static Client client;
    48. //完成初始化
    49. static {
    50. Config config = new Config()
    51. // 您的AccessKey ID
    52. .setAccessKeyId(SystemConfig.ALI_KEY)
    53. // 您的AccessKey Secret
    54. .setAccessKeySecret(SystemConfig.ALI_SEC);
    55. // 访问的域名
    56. config.endpoint = "dysmsapi.aliyuncs.com";
    57. try {
    58. client=new Client(config);
    59. } catch (Exception e) {
    60. e.printStackTrace();
    61. }
    62. }
    63. /**
    64. * 发送验证码
    65. * @param code 验证码
    66. * @param phone 手机号
    67. * @param temcode 模板code*/
    68. public static boolean sendCode(String temcode,String phone,int code){
    69. //1.准备请求参数
    70. SendSmsRequest sendSmsRequest = new SendSmsRequest()
    71. .setPhoneNumbers(phone)
    72. .setSignName("来自邢朋辉的短信")
    73. .setTemplateCode(temcode)
    74. .setTemplateParam("{\"code\":"+code+"}");
    75. try {
    76. //2.发送短信,获取响应结果
    77. SendSmsResponse response=client.sendSms(sendSmsRequest);
    78. //3.返回结果
    79. return response.getBody().code.equals("OK");
    80. } catch (Exception e) {
    81. e.printStackTrace();
    82. }
    83. return false;
    84. }
    85. }

    image.png
    第三步:
    写系统配置变量(可以不写,不写上面的秘钥记得改,写了就改这文件里面的就行)

    1. public class SystemConfig {
    2. //阿里云账号的key和密钥
    3. public static final String ALI_KEY="LTAI5tKz7sP4xaaRsTuxoTjx";
    4. public static final String ALI_SEC= "mFCyf0QxVmB6kGAacAxdtMqmQwcRIx";
    5. //阿里云短信模板
    6. public static final String ALI_SMS_RCODE="SMS_114390520";//注册
    7. public static final String ALI_SMS_LCODE="SMS_115250125";//登录
    8. public static final String ALI_SMS_FCODE="SMS_181545700";//密码找回
    9. //验证码的长度
    10. public static final int CODE_LEN=6;
    11. }

    第四步:
    定义一个生成验证码的工具类

    1. package com.feri.sq.utils;
    2. import java.util.Random;
    3. /**
    4. * @author Feri
    5. * @date 2021/12/31 10:20
    6. * @description:TODO
    7. */
    8. public class NumUtils {
    9. /**
    10. * 随机生成指定位数的数字
    11. *@len验证码的长度
    12. */
    13. public static int createNum(int len){
    14. Random random=new Random();
    15. //假设len=4 (int)(Math.pow(10,len)-Math.pow(10,len-1))就是10000-1000
    16. //pow就是科学计数法形式的数字
    17. //nextInt方法是从0开始后面括号里的是他的界限
    18. return random.nextInt((int)(Math.pow(10,len)-Math.pow(10,len-1)))
    19. +(int)Math.pow(10,len-1);
    20. }
    21. }

    第五步:
    测试(在test下)

    1. package com.mhy.projectdemo;
    2. import com.mhy.projectdemo.config.SystemConfig;
    3. import com.mhy.projectdemo.utils.AliSmsUtils;
    4. import com.mhy.projectdemo.utils.NumUtils;
    5. import org.junit.jupiter.api.Test;
    6. public class SmsTest {
    7. @Test
    8. public void t1(){
    9. int code= NumUtils.createNum(6);
    10. System.err.println(code);
    11. AliSmsUtils.sendCode(SystemConfig.ALI_SMS_RCODE,"15839961509",code);
    12. }
    13. }