第一步:登录阿里云官网  控制台中找到短信服务然后开通。

第二步:获取AccessKey

设置权限

至此,accessKeyId以及accessKeySecret就已经创建好了。

第三步:创建签名和模版

以下为官方解释:

模板可以选择常用模板

等待审核之后,短信发送所需要的内容就准备好了。

记得购买短信套餐!!!


以下为代码实现:

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;/*** 阿里发送短信接口* * @author www.mojxtang.com**/
public class Aliyun_SMSYUtil {/*** * @param accessKeyId     AccessKey ID* @param accessKeySecret accessKeySecret* @param PhoneNumbers    手机号* @param SignName        短信签名名称* @param TemplateCode    短信模板ID* @param code            随机数* @return*/public static boolean sendSMS(String accessKeyId, String accessKeySecret, String PhoneNumbers, String SignName,String TemplateCode, String msgCode) {boolean flag = false;try {// 设置超时时间-可自行调整System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");// 初始化ascClient需要的几个参数final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)// 替换成你的AK// 初始化ascClient,暂时不支持多region(请勿修改)IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);// 组装请求对象SendSmsRequest request = new SendSmsRequest();// 使用post提交request.setMethod(MethodType.POST);// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”request.setPhoneNumbers(PhoneNumbers);// 必填:短信签名-可在短信控制台中找到request.setSignName(SignName);// 必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版request.setTemplateCode(TemplateCode);// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败// request.setTemplateParam("{\"code\":\"988756\"}");request.setTemplateParam("{\"code\":\"" + msgCode + "\"}");// 请求失败这里会抛ClientException异常SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {// 请求成功System.out.println("=====success====");flag = true;} else {System.out.println("=====fail=======");flag = false;}} catch (Exception e) {e.printStackTrace();}return flag;}
}

至此,调用的接口就完成了。有时候我们需要判断60秒内无法重复发送短信,实现思路如下

1、短信发送成功后将,手机号码+时间戳绑定在一起

2、再次发送的时候判断上次的时间戳于此次的时间戳相差的间隔,如果超过60秒就运行继续调用发送的接口.

// 发送前判断是否可以继续发送
long last = (long) smsDate.get(phone);
long currentTimeSecond = System.currentTimeMillis();
int delter = (int) (currentTimeSecond - last);
if (delter >= 60000) {
f = true;
} else {
f = false;
}

定时删除5分钟后的无效验证码

/*** 删除短信验证码*/
public void delete_SMSCodes() {if (null != smsDate) {if (smsDate.size() > 0) {for (String key : smsDate.keySet()) {// keySet获取map集合key的集合  然后在遍历key即可long last = (long) SMSController.smsDate.get(key);long currentTimeSecond = System.currentTimeMillis();int delter = (int) (currentTimeSecond - last);if (delter >= 300000) {// 删除超过五分钟的验证码// 删除SMSController.smsDate.remove(key);}}}}
}

任务调度

<bean id="TimingTask" class="com.system.listen.TimingTask"></bean><task:scheduled-tasks>   <task:scheduled ref="TimingTask" method="delete_SMSCodes" cron="0/30 * * * * ?"/>
</task:scheduled-tasks>

所需的jar包:aliyun-java

博客地址:http://blog.mojxtang.com

Java使用阿里云短信API发送验证码相关推荐

  1. java实现阿里云短信服务发送验证码

    在写注册接口时,需引入短信第三方接口,故使用了阿里云短信服务,在这里简单描述一下 1.引入依赖 <!--手机发送短信验证码--><dependency><groupId& ...

  2. 调用阿里云短信API发送短信通知

    调用阿里云短信API发送短信通知 昨天领导让我弄一个短信通知功能,原来也没有搞过,刚接过来的时候亚历山大,感觉很难搞.但是看过官方文档之后还是挺简单的.来让我们看一下这个短信接口怎么搞吧. 首先你需要 ...

  3. Java后端阿里云短信平台发送短信

    最近做了关于阿里云平台发送短信的功能,记录下代码方便以后查阅: @Service public class ALiYunSMSServiceImpl implements ALiYunSMSServi ...

  4. 阿里云短信api发送异常

    Uncaught AliyunCoreExceptionServerException: MissingPhoneNumbers PhoneNumbers is mandatory for this ...

  5. Java调用阿里云短信接口,发送短信

    Java调用阿里云短信接口,发送短信 1.短信服务这个很简单,只需要知道accessKeyId(AK).accessKeySecret(SK).短信签名.短信模板即可. 2.域名和产品名称是固定的,使 ...

  6. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  7. java实现阿里云短信验证注册--详细教程

    java实现阿里云短信验证注册–详细教程 .项目中先引入依赖 <!--阿里云短信包--><dependency><groupId>com.aliyun</gr ...

  8. 腾讯云短信服务发送验证码

    腾讯云短信服务发送验证码 1.前言 2.进入短信服务控制台 3.创建签名 4.创建模板 5.短信-应用管理-应用列表 6.创建密钥 7.SpringBoot实现短信验证码发送 7.1 引入依赖 7.2 ...

  9. 如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能

    如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能 验证码相关的10种技术 图像处理技术:生成.识别.验证验证码的图像. 机器学习技术:让计算机自动学习并识别验证码. 文字识别技术:将图像中的 ...

最新文章

  1. 金立M2017续航出色不仅是因为电池大,还有超强快充
  2. android dialog
  3. 如何将Twitter消息导入到SAP CRM和Cloud for Customer去
  4. 最强京东Java面试题(共现场4面)
  5. Time.deltaTime 含义和应用
  6. java Launcher源码_Launcher3源码浅析(5.1)--Launcher.java
  7. 将文本文件内容存储在DataSet中的方法总结
  8. Oracle笔记(九) 表的创建及管理
  9. 怎样用Python自制好看的指数估值图
  10. HTTP 417 错误 – 预期结果失败 (Expectation failed)
  11. 酸奶糖酸比的计算机控制,PAL-BX丨ACID F5 五种水果糖酸度计
  12. packetfence 7.2网络准入部署2
  13. 视频配音怎么制作?手把手教你配音视频制作
  14. 十三个提高远程办公效率的工具
  15. MCE公司:MCE 中国生命科学研究促进奖获奖论文集锦三
  16. 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)
  17. 使用SharePoint管理中心管理服务
  18. china-pub登录问题
  19. isEnable() 和 isDisplayed() 和 isSelected()
  20. Oracle之字符串去重统计

热门文章

  1. verilog 设计一个电子钟
  2. 基于pydpier爬取1药网(转载)
  3. android 字节码指令集,进入Android Dalvik虚拟机之Dalvik指令集
  4. 阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料
  5. linux(centos7)安装chrome并查看版本号并下载chrome驱动
  6. 关于python计算生态的命名、哪个选项的描述是正确的_以下选项是 Python 计算生态检索主站的是( )。_成本管理会计答案_学小易找答案...
  7. Dubbox 基本特性之泛化调用
  8. 两周年软件开发工作有感
  9. Godot特效:刀光(三)着色器及代码部分 方法一
  10. 最新良精商城网店购物系统网站源码 v1.7.1,支持三级分销 PC+移动端+微网站