0


短信验证码的实现(阿里云)

文章目录

前言

背景:目前在很多项目中都出现使用短信验证码来实现注册、登录、购买、支付、转账等功能,发短信功能几乎已经成为项目中不可或缺的技术之一。

一、短信验证码的基本步骤

  1. 选择一个合适的编程语言,例如Python、Java或PHP等。
  2. 寻找能够发送短信的API,例如Twilio、阿里云短信等。
  3. 注册并获取API的账号和认证信息(如API密钥或令牌)。
  4. 根据API文档中所述,构建发送短信验证码的请求。通常需要设置接收者手机的手机号码和短信内容等参数。
  5. 调用API发送请求,并解析API返回的响应结果,以检查短信是否发送成功。

写代码时需要特别注意短信验证码的安全性,例如防止短信轰炸、重复发送或被恶意利用等问题。

二、阿里云短信验证

1.注册阿里云账号

在这里插入图片描述

2.点击右上角的控制台后,搜索短信服务

在这里插入图片描述

3.申请签名

在这里插入图片描述

添加签名

在这里插入图片描述

4.申请模板

短信模板包含短信发送内容、场景、变量信息

在这里插入图片描述
添加模板:

在这里插入图片描述
申请后的模板详情:
在这里插入图片描述
申请签名和申请模板都需要人工审核的,一般1到2个工作日,其实还是挺快的。

5.设置AccessKey

相当于用户名的密码(自己记住和使用)
将鼠标移到右上角的头像,就会弹出以下对话框:
在这里插入图片描述
妥善保管好自己的AccessKey的密码,一旦泄漏出去,别人使用你的短信验证,耗费自己的费用。
在这里插入图片描述

创建自己的用户

在这里插入图片描述
勾选openApI调用,相当于使用编程访问
创建好后,显示AccessKeyID和AccessKey Secrect,将密码保存到自己找的到的地方,方便后续使用。
官方提示:若开通 OpenAPI 调用访问,请及时保存 AccessKey 信息,页面关闭后将无法再次获取信息。

在这里插入图片描述

设置权限

在这里插入图片描述

点击新增授权

在这里插入图片描述
这两个权限是如果你的AccessKey泄漏出去了,别人也只能调用你短信验证的功能,不能使用其他的功能。
如果你不使用了,或者泄漏出去了,你也可以把AccessKey禁用或者删除。

三、导入依赖坐标

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.3</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>2.2.1</version></dependency>

四、调用API

可以在文档帮助中心找相应语言的SDK,可以将代码改造一下,通过Api就可以调用短信验证服务了。
在这里插入图片描述

/**
 * 短信发送工具类
 */publicclassSMSUtils{/**
     * 发送短信
     * @param signName 签名
     * @param templateCode 模板
     * @param phoneNumbers 手机号
     * @param param 参数
     */publicstaticvoidsendMessage(String signName,String templateCode,String phoneNumbers,String param){DefaultProfile profile =DefaultProfile.getProfile("cn-hangzhou","","");//getProfile(地域编码,AccessKeyId,AccessKeySecret)IAcsClient client =newDefaultAcsClient(profile);SendSmsRequest request =newSendSmsRequest();
    request.setSysRegionId("cn-hangzhou");//设置地域编码
    request.setPhoneNumbers(phoneNumbers);
    request.setSignName(signName);
    request.setTemplateCode(templateCode);
    request.setTemplateParam("{\"code\":\""+param+"\"}");try{SendSmsResponse response = client.getAcsResponse(request);System.out.println("短信发送成功");}catch(ClientException e){
        e.printStackTrace();}}}

五、随机生成验证码工具类

/**
 * 随机生成验证码工具类
 */publicclassValidateCodeUtils{/**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */publicstaticIntegergenerateValidateCode(int length){Integer code =null;if(length ==4){
            code =newRandom().nextInt(9999);//生成随机数,最大为9999if(code <1000){
                code = code +1000;//保证随机数为4位数字}}elseif(length ==6){
            code =newRandom().nextInt(999999);//生成随机数,最大为999999if(code <100000){
                code = code +100000;//保证随机数为6位数字}}else{thrownewRuntimeException("只能生成4位或6位数字验证码");}return code;}/**
     * 随机生成指定长度字符串验证码
     * @param length 长度
     * @return
     */publicstaticStringgenerateValidateCode4String(int length){Random rdm =newRandom();String hash1 =Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}}

六、发送请求调用

@PostMapping("/sendMsg")publicR<String>sendMsg(@RequestBodyUser user,HttpSession session){//获取手机号String phone = user.getPhone();if(StringUtils.isNotEmpty(phone)){//生成随机的4位验证码String code =ValidateCodeUtils.generateValidateCode(4).toString();
            log.info("code={}",code);//调用阿里云提供的短信服务api完成发送短信//            SMSUtils.sendMessage("模板签名","模板id",phone,code);//需要将生成的验证码保存到Session
            session.setAttribute(phone,code);returnR.success("手机短信验证码发送成功");}returnR.error("短信发送失败");}

本文转载自: https://blog.csdn.net/m0_51457893/article/details/130441771
版权归原作者 wkbszq257 所有, 如有侵权,请联系我们删除。

“短信验证码的实现(阿里云)”的评论:

还没有评论