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

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

        相关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.  
  3. public class StaticPeram {

  4. /**

  5. * 手机验证部分配置

  6. */

  7. // 设置超时时间-可自行调整

  8. final static String defaultConnectTimeout = "sun.net.client.defaultConnectTimeout";

  9. final static String defaultReadTimeout = "sun.net.client.defaultReadTimeout";

  10. final static String Timeout = "10000";

  11. // 初始化ascClient需要的几个参数

  12. final static String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)

  13. final static String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)

  14. // 替换成你的AK (产品密)

  15. final static String accessKeyId = "accessKeyId";// 你的accessKeyId,填你自己的 上文配置所得 自行配置

  16. final static String accessKeySecret = "accessKeySecret";// 你的accessKeySecret,填你自己的 上文配置所得 自行配置

  17. // 必填:短信签名-可在短信控制台中找到

  18. final static String SignName = "签名";    // 阿里云配置你自己的短信签名填入

  19. // 必填:短信模板-可在短信控制台中找到

  20. final static String TemplateCode = "SMS_91945080"; // 阿里云配置你自己的短信模板填入

  21.  
  22. }

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

 
  1. package com.beishan.util;

  2.  
  3. import com.aliyuncs.DefaultAcsClient;

  4. import com.aliyuncs.IAcsClient;

  5. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;

  6. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;

  7. import com.aliyuncs.exceptions.ClientException;

  8. import com.aliyuncs.exceptions.ServerException;

  9. import com.aliyuncs.http.MethodType;

  10. import com.aliyuncs.profile.DefaultProfile;

  11. import com.aliyuncs.profile.IClientProfile;

  12.  
  13. public class PhoneCode {

  14.  
  15. private static String code ;

  16.  
  17. public static void main(String[] args) {

  18. String phone = "手机号码"; //此处可输入你的手机号码进行测试

  19. getPhonemsg(phone);

  20.  
  21. }

  22.  
  23. /**

  24. * 阿里云短信服务配置

  25. * @param mobile

  26. * @return

  27. */

  28. public static String getPhonemsg(String mobile) {

  29.  
  30. /**

  31. * 进行正则关系校验

  32. */

  33. System.out.println(mobile);

  34. if (mobile == null || mobile == "") {

  35. System.out.println("手机号为空");

  36. return "";

  37. }

  38. /**

  39. * 短信验证---阿里大于工具

  40. */

  41.  
  42. // 设置超时时间-可自行调整

  43. System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);

  44. System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);

  45. // 初始化ascClient需要的几个参数

  46. final String product = StaticPeram.product;// 短信API产品名称(短信产品名固定,无需修改)

  47. final String domain = StaticPeram.domain;// 短信API产品域名(接口地址固定,无需修改)

  48. // 替换成你的AK

  49. final String accessKeyId = StaticPeram.accessKeyId;// 你的accessKeyId,参考本文档步骤2

  50. final String accessKeySecret = StaticPeram.accessKeySecret;// 你的accessKeySecret,参考本文档步骤2

  51. // 初始化ascClient,暂时不支持多region

  52. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",

  53. accessKeyId, accessKeySecret);

  54. try {

  55. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,

  56. domain);

  57. } catch (ClientException e1) {

  58. e1.printStackTrace();

  59. }

  60.  
  61. //获取验证码

  62. code = vcode();

  63.  
  64. IAcsClient acsClient = new DefaultAcsClient(profile);

  65. // 组装请求对象

  66. SendSmsRequest request = new SendSmsRequest();

  67. // 使用post提交

  68. request.setMethod(MethodType.POST);

  69. // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式

  70. request.setPhoneNumbers(mobile);

  71. // 必填:短信签名-可在短信控制台中找到

  72. request.setSignName(StaticPeram.SignName);

  73. // 必填:短信模板-可在短信控制台中找到

  74. request.setTemplateCode(StaticPeram.TemplateCode);

  75. // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为

  76. // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败

  77. request.setTemplateParam("{ \"number\":\""+code+"\"}");

  78. // 可选-上行短信扩展码(无特殊需求用户请忽略此字段)

  79. // request.setSmsUpExtendCode("90997");

  80. // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者

  81. request.setOutId("yourOutId");

  82. // 请求失败这里会抛ClientException异常

  83. SendSmsResponse sendSmsResponse;

  84. try {

  85. sendSmsResponse = acsClient.getAcsResponse(request);

  86. if (sendSmsResponse.getCode() != null

  87. && sendSmsResponse.getCode().equals("OK")) {

  88. // 请求成功

  89. System.out.println("获取验证码成功!!!");

  90. } else {                               

  91.                                 //如果验证码出错,会输出错误码告诉你具体原因

  92.                                 System.out.println(sendSmsResponse.getCode());

  93.                                 System.out.println("获取验证码失败...");

  94. }

  95. } catch (ServerException e) {

  96. e.printStackTrace();

  97. return "由于系统维护,暂时无法注册!!!";

  98. } catch (ClientException e) {

  99. e.printStackTrace();

  100. return "由于系统维护,暂时无法注册!!!";

  101. }

  102. return "true";

  103. }

  104.  
  105. /**

  106. * 生成6位随机数验证码

  107. * @return

  108. */

  109. public static String vcode(){

  110. String vcode = "";

  111. for (int i = 0; i < 6; i++) {

  112. vcode = vcode + (int)(Math.random() * 9);

  113. }

  114. return vcode;

  115. }

  116. }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云短信验证码Java代码示例如下: ``` import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20160927.SendSmsRequest; import com.aliyuncs.sms.model.v20160927.SendSmsResponse; public class AliyunSmsUtil { public static void sendSms(String phoneNumbers, String signName, String templateCode, String templateParam) { // 设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); // 初始化ascClient需要的几个参数 final String product = "Dysmsapi"; final String domain = "dysmsapi.aliyuncs.com"; // 替换成你的AK (产品密) final String accessKeyId = "yourAccessKeyId";// 你的accessKeyId,参考本文档步骤2 final String accessKeySecret = "yourAccessKeySecret";// 你的accessKeySecret,参考本文档步骤2 // 初始化ascClient,暂时不支持多region(请勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); } catch (ClientException e) { e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 必填:待发送手机号 request.setPhoneNumbers(phoneNumbers); // 必填:短信签名-可在短信控制台中找到 request.setSignName(signName); // 必填:短信模板-可在短信控制台中找到 request.setTemplateCode(templateCode); // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(templateParam); // 发送请求 try { SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // 请求成功 System.out.println("短信发送成功!"); } else { System.out.println("短信发送失败:" + sendSmsResponse.getMessage()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值