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

打印 上一主题 下一主题

主题 1892|帖子 1892|积分 5676

前言

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


  • 选择一个合适的编程语言,例如Python、Java或PHP等。
  • 探求可以或许发送短信的API,例如Twilio、阿里云短信等。
  • 注册并获取API的账号和认证信息(如API密钥或令牌)。
  • 根据API文档中所述,构建发送短信验证码的哀求。通常需要设置接收者手机的手机号码和短信内容等参数。
  • 调用API发送哀求,并解析API返回的相应结果,以检查短信是否发送乐成。
写代码时需要特别留意短信验证码的安全性,例如防止短信轰炸、重复发送或被恶意使用等问题。
二、阿里云短信验证

   1.注册阿里云账号
  

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

   3.申请签名
  

添加签名

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

添加模板:

申请后的模板详情:

申请签名和申请模板都需要人工审核的,一样寻常1到2个工作日,其实照旧挺快的。
   5.设置AccessKey
  相当于用户名的密码(自己记住和使用)
将鼠标移到右上角的头像,就会弹出以下对话框:

妥善保管好自己的AccessKey的密码,一旦泄漏出去,别人使用你的短信验证,耗费自己的费用。

创建自己的用户

勾选openApI调用,相当于使用编程访问
创建好后,体现AccessKeyID和AccessKey Secrect,将密码生存到自己找的到的地方,方便后续使用。
官方提示:若开通 OpenAPI 调用访问,请实时生存 AccessKey 信息,页面关闭后将无法再次获取信息。

设置权限

点击新增授权

这两个权限是如果你的AccessKey泄漏出去了,别人也只能调用你短信验证的功能,不能使用其他的功能。
如果你不使用了,或者泄漏出去了,你也可以把AccessKey禁用或者删除。
三、导入依赖坐标

  1. <dependency>
  2.         <groupId>com.aliyun</groupId>
  3.         <artifactId>aliyun-java-sdk-core</artifactId>
  4.         <version>4.6.3</version>
  5. </dependency>
  6. <dependency>
  7.         <groupId>com.aliyun</groupId>
  8.         <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  9.         <version>2.2.1</version>
  10. </dependency>
复制代码
四、调用API

可以在文档资助中央找相应语言的SDK,可以将代码改造一下,通过Api就可以调用短信验证服务了。

  1. /**
  2. * 短信发送工具类
  3. */
  4. public class SMSUtils {
  5.         /**
  6.          * 发送短信
  7.          * @param signName 签名
  8.          * @param templateCode 模板
  9.          * @param phoneNumbers 手机号
  10.          * @param param 参数
  11.          */
  12. public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
  13.         DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
  14.         //getProfile(地域编码,AccessKeyId,AccessKeySecret)
  15.         IAcsClient client = new DefaultAcsClient(profile);
  16.         SendSmsRequest request = new SendSmsRequest();
  17.         request.setSysRegionId("cn-hangzhou");//设置地域编码
  18.         request.setPhoneNumbers(phoneNumbers);
  19.         request.setSignName(signName);
  20.         request.setTemplateCode(templateCode);
  21.         request.setTemplateParam("{"code":""+param+""}");
  22.         try {
  23.          SendSmsResponse response = client.getAcsResponse(request);
  24.          System.out.println("短信发送成功");
  25.         }catch (ClientException e) {
  26.                 e.printStackTrace();
  27.            }
  28.         }
  29. }
复制代码
五、随机生成验证码工具类

  1. /**
  2. * 随机生成验证码工具类
  3. */
  4. public class ValidateCodeUtils {
  5.     /**
  6.      * 随机生成验证码
  7.      * @param length 长度为4位或者6位
  8.      * @return
  9.      */
  10.     public static Integer generateValidateCode(int length){
  11.         Integer code =null;
  12.         if(length == 4){
  13.             code = new Random().nextInt(9999);//生成随机数,最大为9999
  14.             if(code < 1000){
  15.                 code = code + 1000;//保证随机数为4位数字
  16.             }
  17.         }else if(length == 6){
  18.             code = new Random().nextInt(999999);//生成随机数,最大为999999
  19.             if(code < 100000){
  20.                 code = code + 100000;//保证随机数为6位数字
  21.             }
  22.         }else{
  23.             throw new RuntimeException("只能生成4位或6位数字验证码");
  24.         }
  25.         return code;
  26.     }
  27.     /**
  28.      * 随机生成指定长度字符串验证码
  29.      * @param length 长度
  30.      * @return
  31.      */
  32.     public static String generateValidateCode4String(int length){
  33.         Random rdm = new Random();
  34.         String hash1 = Integer.toHexString(rdm.nextInt());
  35.         String capstr = hash1.substring(0, length);
  36.         return capstr;
  37.     }
  38. }
复制代码
六、发送哀求调用

  1.   @PostMapping("/sendMsg")
  2.     public R<String> sendMsg(@RequestBody User user, HttpSession session){
  3.         //获取手机号
  4.         String phone = user.getPhone();
  5.         if (StringUtils.isNotEmpty(phone)){
  6.             //生成随机的4位验证码
  7.          String code = ValidateCodeUtils.generateValidateCode(4).toString();
  8.             log.info("code={}",code);
  9.             //调用阿里云提供的短信服务api完成发送短信
  10. //            SMSUtils.sendMessage("模板签名","模板id",phone,code);
  11.             //需要将生成的验证码保存到Session
  12.             session.setAttribute(phone,code);
  13.             return R.success("手机短信验证码发送成功");
  14.         }
  15.         return R.error("短信发送失败");
  16.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表