使用阿里云发送短信验证码

📅 发布时间:2026/7/4 1:00:34 👁️ 浏览次数:
使用阿里云发送短信验证码
1.登录阿里云2.购买完成之后创建用户复制你的AccessKeyID你的AccessKeySecret3.控制台配置短信发送所需的信息https://dypns.console.aliyun.com/smsServiceOverview咱们只能使用号码认证服务不能使用短信服务短信服务是需要企业资质的号码认证服务不需要个人就可以使用剩下就是调试了4.代码实现下面是所需依赖dependencygroupIdcom.aliyun/groupIdartifactIdalibabacloud-dypnsapi20170525/artifactIdversion2.0.0/version/dependency工具类SmsUtil// SmsUtil.java - 修改后的工具类 package com.microservices.user.utils;importcom.aliyun.auth.credentials.Credential;importcom.aliyun.auth.credentials.provider.StaticCredentialProvider;importcom.aliyun.sdk.service.dypnsapi20170525.AsyncClient;importcom.aliyun.sdk.service.dypnsapi20170525.models.*;importcom.google.gson.Gson;importdarabonba.core.client.ClientOverrideConfiguration;importjava.util.concurrent.CompletableFuture;public class SmsUtil{private static final String REGIONap-southeast-1;private static final String ENDPOINTdypnsapi.aliyuncs.com;private static final String SIGN_NAME速通互联验证码;private static final String TEMPLATE_CODE100001;// 直接硬编码或从配置文件读取生产环境建议放配置文件 private static final String ACCESS_KEY_IDLTAI5t9zS855QDTUz3NHXcsz;private static final String ACCESS_KEY_SECRETwaeJdK8khiUeSNOMknECPgWcf07kmL;private static AsyncClient client;static{// 使用静态凭证不依赖本地文件 Credential credentialCredential.builder().accessKeyId(ACCESS_KEY_ID).accessKeySecret(ACCESS_KEY_SECRET).build();StaticCredentialProvider providerStaticCredentialProvider.create(credential);clientAsyncClient.builder().region(REGION).credentialsProvider(provider).overrideConfiguration(ClientOverrideConfiguration.create().setEndpointOverride(ENDPOINT)).build();}public static String sendVerifyCode(String phoneNumber, String code, int minutes){try{SendSmsVerifyCodeRequest requestSendSmsVerifyCodeRequest.builder().signName(SIGN_NAME).templateCode(TEMPLATE_CODE).templateParam(String.format({\code\:\%s\,\min\:\%d\}, code, minutes)).phoneNumber(phoneNumber).build();CompletableFutureSendSmsVerifyCodeResponseresponseclient.sendSmsVerifyCode(request);SendSmsVerifyCodeResponse respresponse.get();returnnew Gson().toJson(resp);}catch(Exception e){throw new RuntimeException(短信发送失败: e.getMessage(), e);}}public static String sendVerifyCode(String phoneNumber, String code){returnsendVerifyCode(phoneNumber, code,5);}}controllerpackage com.microservices.user.controller;importcom.microservices.user.utils.SmsUtil;importorg.springframework.web.bind.annotation.*;importjava.util.Random;RestController RequestMapping(/api/sms)public class SmsController{// GET /api/sms/send?phone15911122645自动生成4位验证码默认5分钟 // POST /api/sms/send?phonexxxcode1234minutes3自定义验证码和有效期 /** * 发送验证码 * GET /api/sms/send?phone15911122645*/ GetMapping(/send)public String sendCode(RequestParam String phone){String codegenerateCode();returnSmsUtil.sendVerifyCode(phone, code);}/** * 发送验证码自定义参数 * POST /api/sms/send */ PostMapping(/send)public String sendCode(RequestParam String phone, RequestParam String code, RequestParam(defaultValue5)int minutes){returnSmsUtil.sendVerifyCode(phone, code, minutes);}// 生成4位随机验证码 private StringgenerateCode(){returnString.format(%04d, new Random().nextInt(10000));}}