java实现阿里云短信服务发送验证码
由于做项目的时候遇到了接第三方短信服务,所以记录一下。
一.新建一个maven项目并导入相关依赖
<!--手机发送短信验证码-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
二 .短信控制台配置
1.进入阿里云官网进行注册登录 https://www.aliyun.com/?utm_content=se_1000301881
2.点击右侧头像 ,点击AccessKey管理,点击继续使用Accesskey,然后创建自己的AccessKey。代码里会用到
3.搜索短信控制台进入短信服务页面 https://dysms.console.aliyun.com/dysms.htm#/overview 点击 ‘国内信息’
4.进入签名管理创建自己的签名
5.进入模板管理创建相关模板,这里的${code}是和代码中的code对接的。
三。相关代码 (对标红地方做相关配置)
public class StaticPeram {
/**
* 手机验证部分配置
*/
// 设置超时时间-可自行调整
final static String defaultConnectTimeout = "sun.net.client.defaultConnectTimeout";
final static String defaultReadTimeout = "sun.net.client.defaultReadTimeout";
final static String Timeout = "10000";
// 初始化ascClient需要的几个参数
final static String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
final static String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
// 替换成你的AK (产品密)
final static String accessKeyId = "。。。。。。。。。。。";// 你的accessKeyId,填你自己的 上文配置所得 自行配置
final static String accessKeySecret = "。。。。。。。。。。。。。。";// 你的accessKeySecret,填你自己的 上文配置所得 自行配置
// 必填:短信签名-可在短信控制台中找到
final static String SignName = "XX社区网站";// 阿里云配置你自己的短信签名填入
// 必填:短信模板-可在短信控制台中找到
final static String TemplateCode = "SMS_........."; // 阿里云配置你自己的短信模板填入 }
public class PhoneCode { private static String code ;/**
* 阿里云短信服务配置
* @param mobile
* @return
*/
public static String getPhonemsg(String mobile) { /**
* 进行正则关系校验
*/
System.out.println(mobile);
if (mobile == null || mobile == "") {
System.out.println("手机号为空");
return "";
}
/**
* 短信验证---阿里大于工具
*/ // 设置超时时间-可自行调整
System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);
System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);
// 初始化ascClient需要的几个参数
final String product = StaticPeram.product;// 短信API产品名称(短信产品名固定,无需修改)
final String domain = StaticPeram.domain;// 短信API产品域名(接口地址固定,无需修改)
// 替换成你的AK
final String accessKeyId = StaticPeram.accessKeyId;// 你的accessKeyId,参考本文档步骤2
final String accessKeySecret = StaticPeram.accessKeySecret;// 你的accessKeySecret,参考本文档步骤2
// 初始化ascClient,暂时不支持多region
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
accessKeyId, accessKeySecret);
try {
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
domain);
} catch (ClientException e1) {
e1.printStackTrace();
} //获取验证码
code = vcode(); IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象
SendSmsRequest request = new SendSmsRequest();
// 使用post提交
request.setMethod(MethodType.POST);
// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.setPhoneNumbers(mobile);
// 必填:短信签名-可在短信控制台中找到
request.setSignName(StaticPeram.SignName);
// 必填:短信模板-可在短信控制台中找到
request.setTemplateCode(StaticPeram.TemplateCode);
// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
request.setTemplateParam("{ \"code\":\""+code+"\"}"); //此处的code和短信模板中的${code}对应
// 可选-上行短信扩展码(无特殊需求用户请忽略此字段)
// request.setSmsUpExtendCode("90997");
// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
// 请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse;
try {
sendSmsResponse = acsClient.getAcsResponse(request);
if (sendSmsResponse.getCode() != null
&& sendSmsResponse.getCode().equals("OK")) {
// 请求成功
System.out.println("获取验证码成功!!!");
} else {
//如果验证码出错,会输出错误码告诉你具体原因
System.out.println(sendSmsResponse.getCode());
System.out.println("获取验证码失败...");
}
} catch (ServerException e) {
e.printStackTrace();
return "由于系统维护,暂时无法注册!!!";
} catch (ClientException e) {
e.printStackTrace();
return "由于系统维护,暂时无法注册!!!";
}
return "true";
} /**
* 生成6位随机数验证码
* @return
*/
public static String vcode(){
String vcode = "";
for (int i = 0; i < 6; i++) {
vcode = vcode + (int)(Math.random() * 9);
}
return vcode;
}
}
四。测试一下
public class Test{ public static void main(String[] args) { String phone = "11111111111"; //此处可输入你的手机号码进行测试
getPhonemsg(phone); }
}
然后就收到验证码了。记得在阿里云账户充一块钱,不然会报错。官方的错误分析文档写的非常好,推荐大家看看!
java实现阿里云短信服务发送验证码的更多相关文章
- springboot 使用阿里云短信服务发送验证码
一.申请阿里云短信服务 1.申请签名 2.申请模板 3.创建accesskey(鼠标悬停在右上角头像) 二.代码实现 1.springboot引入maven依赖 <dependency> ...
- Jave Web阿里云短信服务发送验证码
首先得在阿里云根据流程开通短信服务,申请签名和模版,具体看文档 因为这是个web项目,用到了thymeleaf模板,所以在pom.xml中加入如下依赖 <dependency> <g ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
- 浏览器端获取短信验证码java实现——阿里云短信服务
需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...
- 阿里云短信服务发送短信验证码(JAVA开发此功能)
开发此功能需注册阿里云账号,并开通短信服务(免费开通) 充值后,不会影响业务的正常使用!(因为发送验证类短信:1-10万范围的短信是0.045元/条).开发测试使用,充2块钱测试足够了 可参考阿里云官 ...
- Java调用阿里云短信接口发送手机验证码
前五步可参考阿里云服务文档:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.2b152c42DoJ7 ...
- springboot 项目使用阿里云短信服务发送手机验证码
1.注册阿里云账户进行账号实名认证 2.申请短信签名和模板 3.创建access_key和access_secret 4.然后就是代码编写 一.找到产品与服务里面的云通信模块,然后找到短信服务,开通短 ...
- php 阿里云短信服务及阿里大鱼实现短信验证码的发送
一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...
- flask+阿里云短信服务实现注册发送手机验证码
效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...
随机推荐
- 程序中打开IE浏览器并访问指定地址
最简单的方法 Process.Start("iexplore.exe"); //直接打开IE浏览器(打开默认首页) Process.Start(" ...
- Study in JI During the Summer Vacation
15/07/2019-21/07/2019 Task List: 1.uow homework including vocabulary and listening 2.ASL's dictation ...
- Python基础知识汇总
1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的属性,为可执行,在用 ./ 执行 ...
- java什么是方法的重载(Overload)
概念: 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型或参数顺序不同即可. 存在的原因: 屏蔽了一个对象的同一类方法由于参数不同所造成的差异. 特点: 与返回值 ...
- java List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList替代. ArrayList:线程不安全,查询速度快. LinkedList:链表结构,增删速度快.取出List集合中元素的方式: get(int ...
- git提交时如何忽略一些文件
起因 在使用git对软件进行版本管理的时候我们总有一些不需要提交到版本库里的文件和文件夹,或者在管理一个实际应用的开源项目的时候,不可以把带有数据库信息的文件上传到开源平台当中,这个时候我们就需要让g ...
- Redux action 状态
action 不同的状态,设置不同的action.type [就是一个名字],返回对应的数据 不同的状态返回不同的 接口数据
- JDK自带的native2ascii工具介绍
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...
- jquery自己写的带左右箭头自动播放幻灯插件,简化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spark MLlib 示例代码阅读
阅读前提:有一定的机器学习基础, 本文重点面向的是应用,至于机器学习的相关复杂理论和优化理论,还是多多看论文,初学者推荐Ng的公开课 /* * Licensed to the Apache Softw ...