Java实现短信验证码--(完整教程)

2018年04月24日 13:03:12 北山_ 阅读数 19189更多

分类专栏: Java 阿里云

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_32196629/article/details/80062926

我们在实现登录注册的时候,常常用到了短信验证码校验,下面给大家简单介绍阿里云的短信服务平台。

相关jar包:

aliyun-java-sdk-core-3.2.2.jar(点此下载)

aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar(点此下载)

用Maven导入jar包:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>3.2.8</version> 注:如提示报错,先升级基础包版,无法解决可联系技术支持
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  9. <version>1.1.0</version>
  10. </dependency>

1、登录阿里云官网(https://www.aliyun.com/),进入之后打开控制台,左上角点击产品与服务,然后选择短信服务,如图:

2.创建AccessKey,(Access Key ID -- Access Key Secret)如图:

3.进行 短信签名 和 短信模板 设定,如图:

4.基本配置完成后,我们就需要写代码了

StaticParam.java (为了方便配置和明确易懂,我把配置参数放到这个类中)

  1. package com.beishan.util;
  2. public class StaticPeram {
  3. /**
  4. * 手机验证部分配置
  5. */
  6. // 设置超时时间-可自行调整
  7. final static String defaultConnectTimeout = "sun.net.client.defaultConnectTimeout";
  8. final static String defaultReadTimeout = "sun.net.client.defaultReadTimeout";
  9. final static String Timeout = "10000";
  10. // 初始化ascClient需要的几个参数
  11. final static String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
  12. final static String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
  13. // 替换成你的AK (产品密)
  14. final static String accessKeyId = "accessKeyId";// 你的accessKeyId,填你自己的 上文配置所得 自行配置
  15. final static String accessKeySecret = "accessKeySecret";// 你的accessKeySecret,填你自己的 上文配置所得 自行配置
  16. // 必填:短信签名-可在短信控制台中找到
  17. final static String SignName = "签名";    // 阿里云配置你自己的短信签名填入
  18. // 必填:短信模板-可在短信控制台中找到
  19. final static String TemplateCode = "SMS_91945080"; // 阿里云配置你自己的短信模板填入
  20. }

PhoneCode.java(工具类,基本可以直接使用,里面加入了main方法,可以直接在main方法中设置你的手机号码进行测试)

  1. package com.beishan.util;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.IAcsClient;
  4. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
  5. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  6. import com.aliyuncs.exceptions.ClientException;
  7. import com.aliyuncs.exceptions.ServerException;
  8. import com.aliyuncs.http.MethodType;
  9. import com.aliyuncs.profile.DefaultProfile;
  10. import com.aliyuncs.profile.IClientProfile;
  11. public class PhoneCode {
  12. private static String code ;
  13. public static void main(String[] args) {
  14. String phone = "手机号码"; //此处可输入你的手机号码进行测试
  15. getPhonemsg(phone);
  16. }
  17. /**
  18. * 阿里云短信服务配置
  19. * @param mobile
  20. * @return
  21. */
  22. public static String getPhonemsg(String mobile) {
  23. /**
  24. * 进行正则关系校验
  25. */
  26. System.out.println(mobile);
  27. if (mobile == null || mobile == "") {
  28. System.out.println("手机号为空");
  29. return "";
  30. }
  31. /**
  32. * 短信验证---阿里大于工具
  33. */
  34. // 设置超时时间-可自行调整
  35. System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);
  36. System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);
  37. // 初始化ascClient需要的几个参数
  38. final String product = StaticPeram.product;// 短信API产品名称(短信产品名固定,无需修改)
  39. final String domain = StaticPeram.domain;// 短信API产品域名(接口地址固定,无需修改)
  40. // 替换成你的AK
  41. final String accessKeyId = StaticPeram.accessKeyId;// 你的accessKeyId,参考本文档步骤2
  42. final String accessKeySecret = StaticPeram.accessKeySecret;// 你的accessKeySecret,参考本文档步骤2
  43. // 初始化ascClient,暂时不支持多region
  44. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
  45. accessKeyId, accessKeySecret);
  46. try {
  47. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
  48. domain);
  49. } catch (ClientException e1) {
  50. e1.printStackTrace();
  51. }
  52. //获取验证码
  53. code = vcode();
  54. IAcsClient acsClient = new DefaultAcsClient(profile);
  55. // 组装请求对象
  56. SendSmsRequest request = new SendSmsRequest();
  57. // 使用post提交
  58. request.setMethod(MethodType.POST);
  59. // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
  60. request.setPhoneNumbers(mobile);
  61. // 必填:短信签名-可在短信控制台中找到
  62. request.setSignName(StaticPeram.SignName);
  63. // 必填:短信模板-可在短信控制台中找到
  64. request.setTemplateCode(StaticPeram.TemplateCode);
  65. // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  66. // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
  67. request.setTemplateParam("{ \"number\":\""+code+"\"}");
  68. // 可选-上行短信扩展码(无特殊需求用户请忽略此字段)
  69. // request.setSmsUpExtendCode("90997");
  70. // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  71. request.setOutId("yourOutId");
  72. // 请求失败这里会抛ClientException异常
  73. SendSmsResponse sendSmsResponse;
  74. try {
  75. sendSmsResponse = acsClient.getAcsResponse(request);
  76. if (sendSmsResponse.getCode() != null
  77. && sendSmsResponse.getCode().equals("OK")) {
  78. // 请求成功
  79. System.out.println("获取验证码成功!!!");
  80. } else {                               
  81. //如果验证码出错,会输出错误码告诉你具体原因
  82. System.out.println(sendSmsResponse.getCode());
  83. System.out.println("获取验证码失败...");
  84. }
  85. } catch (ServerException e) {
  86. e.printStackTrace();
  87. return "由于系统维护,暂时无法注册!!!";
  88. } catch (ClientException e) {
  89. e.printStackTrace();
  90. return "由于系统维护,暂时无法注册!!!";
  91. }
  92. return "true";
  93. }
  94. /**
  95. * 生成6位随机数验证码
  96. * @return
  97. */
  98. public static String vcode(){
  99. String vcode = "";
  100. for (int i = 0; i < 6; i++) {
  101. vcode = vcode + (int)(Math.random() * 9);
  102. }
  103. return vcode;
  104. }
  105. }

注:如果获取验证码失败:sendSmsResponse.getCode() 会返回一个错误码告诉你失败的原因,如:返回isv.AMOUNT_NOT_ENOUGH 为:账户余额不足。希望大家都能成功实现。

更多帮助请查看:

短信发送API(SendSms)---JAVA:https://help.aliyun.com/document_detail/55284.html

如有不足请大家多多指点,转载请注明出处,谢谢。


http://www.taodudu.cc/news/show-4376903.html

相关文章:

  • Spring5的IOC容器
  • 2020-12-20随笔
  • java实现简单扫码登录功能(模仿微信网页版扫码)
  • 微信小程序滑动scroll-view
  • 3、防御迷阵(二分+bfs)
  • [JavaSE基础笔记]Day10 石头迷阵实现
  • 《石头迷阵》游戏业务数据设计、游戏功能制作、游戏界面绘制
  • 单词迷阵游戏就是从一个10x10的字母矩阵中找出目标单词,查找方向可以从左往右、从右往左、从上往下或者从下往上。例如下面的迷阵中包含quot等单词。
  • Android APP安全之APK完整性校验
  • windows11 显示文件后缀名
  • Windows11显示文件后缀名
  • win10怎么显示文件后缀名
  • html5显示文件后缀,如何显示文件后缀名称
  • 基于C#实现的在线聊天室的桌面系统软件
  • 总结与自省之秋招
  • 互联网开发岗实习及秋招总结
  • 2023届双非硕士四个月秋招历程总结
  • 秋招经验分享
  • 2023秋招记录
  • C++秋招经验贴
  • KUKA KRC4 控制器截图
  • 看完全都会了!源码解读及如何保证线程安全?BAT大厂面试总结
  • 图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
  • Learning Skeletal Articulations with Neural Blend Shapes(使用神经混合形状学习骨骼关节)SIGGRAPH 2021顶刊解析
  • 混合高斯模型原理
  • 计算机图形学绪论:感知、光、颜色和数学
  • AutoDL论文解读(五):可微分方法的NAS
  • 混合高斯建模
  • OpenCV混合高斯模型前景分离
  • 第五讲 Matlab/Simulink入门——混合系统仿真实例

Java实现短信验证码--(完整教程)相关推荐

  1. JAVA怎么对接第三方短信平台?短信验证码完整API文档

    验证码短信平台的应用场景,一般包括用户注册.登陆账号.忘记密码.登录异常.支付确认等. 一.用户注册 通常我们会在注册时会用到短信验证码,即用户在网站或软件上注册账号时,企业需要通过验证码确认用户身份 ...

  2. java发送短信验证码带倒计时

    分享一个完整的java发送短信验证码的完整实例,这是一个官方的使用demo,带有60秒倒计时功能. 效果: 我使用的是榛子云短信平台 , 官网地址:http://sms_developer.zhenz ...

  3. java 登陆短信验证码_Java实现短信验证码

    原标题:Java实现短信验证码 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 短信验证码 短信验证码都是调 ...

  4. Java 发送短信验证码

    Java 发送短信验证码给手机 发送短信验证码其实很简单,就是调用一下第三方的短信API接口,填写参数,发送请求,第三方平台会将信息发送给对方手机当中 介绍 我个人测试所使用的第三方API是" ...

  5. 使用Java实现短信验证码

    对于短信验证码的实现,作为新手肯定都觉得很难,但实际上短信验证码其实就是调用别人写好的接口,操作简单,觉得难可能是没有接触过或者逻辑上还没有理通,才会产生一种无从下手的感觉.由于阿里云和腾讯云等已经不 ...

  6. Java配置短信验证码功能实现录

    Java配置短信验证码功能实现录 1.准备: 1.注册登录腾讯云(搜索短信,进入相应控制页面) 2.有一个对应的Spring项目 2.腾讯云相关操作: 1.进入腾讯云→国内短信→签名管理 2.创建签名 ...

  7. Java调用腾讯云短信API实现发送短信验证码完整。(详细,内附工具类)

    此先声明,本博文并不是为了推销腾讯云短信产品. 只是因为腾讯云短信SDK的使用指南讲的不是很详细,觉得肯定有很多人像我一样被搞的一头雾水.所以专门发一篇关于使用短信接口的博文,为了记录,也为了帮助和我 ...

  8. java web短信验证码_在Web项目中手机短信验证码实现的全过程记录

    前言 最近在做远程智能水表管理系统这个过程有一个功能是在注册页面可以使用手机注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下.下面话不多说了,来一起看看详细的介绍吧. 短信验证码实 ...

  9. Java实现短信验证码最佳实践

    1.背景 2.实现 3.运行效果: 4.源码 5.总结 1.背景 年初,从外地转移阵地到西安,转眼已两个多月.很久不写业务代码了,到了新公司,条件恶劣到前所未有,从需求,设计,架构,实现,实施,测试, ...

最新文章

  1. 道路检测 | SNE-RoadSeg论文阅读
  2. Linux优化不知如何下手?那你的看看这篇文章了
  3. 北京沙龙报名 | 关于Dubbo开源的那些事儿
  4. 微信公众号开发笔记1-获取Access Token
  5. Sentinel如何通过限流实现服务的高可用性
  6. 【bzoj1604】[Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 旋转坐标系+并查集+Treap/STL-set...
  7. MITRE 发布 2020 CWE Top 25 榜单
  8. Java历史版本官方下载地址(Java 6、Java 7)
  9. 2021五一建模a题完整论文
  10. python视频培训班
  11. App测试工具大全,收藏这篇就够了
  12. 菏泽智伴机器人_菏泽智伴机器人怎么代理
  13. 微信公众号网页开发逻辑梳理
  14. 服务器自动关闭远程打印服务,实现远程打印的方法:无线网络打印服务器
  15. Server 2008 R2 事件查看器实现日志分析
  16. java.sql.SQLException: The connection property ‘zeroDateTimeBehavior‘ acceptable values are: ‘CONVER
  17. 阿里云计算acp认证报考条件及需要具备的知识
  18. Android学习之——APP番茄工作法——小结(2)
  19. 微信小程序之时间计算器
  20. 一文带你了解typeScript

热门文章

  1. 1-9九个数字组成一个九位数 如果从左边起取出1个数字,需要能被1整除,取出两个数字组成的数能被2整除,取出三个数字组成的数能被3整除,依次类推
  2. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)
  3. GNS3-1.3.10的安装及配置
  4. Gson系列1 --- Gson 序列化与反序列化 -- 数组 / 集合序列化
  5. PIVOT和UNPIVOT使用详解
  6. C语言——register
  7. 一文读懂C++虚继承的内存模型
  8. ABP VNext学习日记5
  9. 【软件测试】软件测试的方法
  10. Activiti集成Activiti Modeler