100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java使用阿里云短信API发送验证码

Java使用阿里云短信API发送验证码

时间:2023-10-19 14:19:13

相关推荐

Java使用阿里云短信API发送验证码

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

第二步:获取AccessKey

设置权限

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

第三步:创建签名和模版

以下为官方解释:

模板可以选择常用模板

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

记得购买短信套餐!!!

以下为代码实现:

import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.dysmsapi.model.v0525.SendSmsRequest;import com.aliyuncs.dysmsapi.model.v0525.SendSmsResponse;import com.aliyuncs.http.MethodType;import com.aliyuncs.profile.DefaultProfile;import com.aliyuncs.profile.IClientProfile;/*** 阿里发送短信接口* * @author **/public class Aliyun_SMSYUtil {/*** * @param accessKeyIdAccessKey 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(".client.defaultConnectTimeout", "10000");System.setProperty(".client.defaultReadTimeout", "10000");// 初始化ascClient需要的几个参数final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)final String domain = "";// 短信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

博客地址:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。