您的位置:首页 > 编程语言 > Java开发

SpringBoot使用阿里大于短信接口

2017-07-27 17:24 766 查看
1.下载 阿里大于 java SDK

下载地址 https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55284.2.6.iRVRZy

2.获得 短信签名和短信模板,Access
Key ID,Access Key Secret(登录阿里云里获得)





3.导入jar到maven



pom.xml:

<dependency>
<groupId>my-jar</groupId>   <!--  自己随便取-->
<artifactId>my-jar</artifactId> <!-- 自己随便取-->
<version>1.0</version><!-- 自己随便取-->
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/aliyun-java-sdk-core-3.2.3.jar</systemPath>
</dependency>

<dependency>
<groupId>my-jar-api</groupId>   <!--  自己随便取-->
<artifactId>my-jar-api</artifactId> <!-- 自己随便取-->
<version>1.0</version><!-- 自己随便取-->
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar</systemPath>
</dependency>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin>


这样就能把本地jar包导入maven项目了。

4.编程(基本与官方demo一致,自行修改)

@PostMapping("sendLoginMessage")
@ResponseBody
public boolean sendSMSMessage(@RequestParam("mobile")String mobile, HttpServletRequest request){
//设置超时时间-可自行调整
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
final String accessKeyId = "XXXXXXX";//你的accessKeyId,参考本文档步骤2
final String accessKeySecret = "XXXXXXXXXXXXXXXXXXX";//你的accessKeySecret,参考本文档步骤2
//初始化ascClient,暂时不支持多region
try{

IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
SendSmsRequest smsRequest = new SendSmsRequest();
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
smsRequest.setPhoneNumbers(mobile);
//必填:短信签名-可在短信控制台中找到
smsRequest.setSignName("XXXXX");
//必填:短信模板-可在短信控制台中找到
smsRequest.setTemplateCode("SMS_XXXXXXXX");

int ran = (int)(Math.random()*(9999-1000+1))+1000;//产生1000-9999的随机数
String code = String.valueOf(ran);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
smsRequest.setTemplateParam("{\"code\":"+code+"}");

//把短信验证码存入session
session = request.getSession();
ValidateCode validateCode = new ValidateCode();
validateCode.setMobile(mobile);
validateCode.setCode(code);
session.setAttribute(mobile,validateCode);

//可选-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.setOutId("yourOutId");
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(smsRequest);
System.out.println(sendSmsResponse.getCode());
System.out.println(sendSmsResponse.getBizId());
System.out.println(sendSmsResponse.getMessage());
System.out.println(sendSmsResponse.getRequestId());
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//请求成功
System.out.print("success");
return true;
}
}catch (ClientException e){
return false;
}
System.out.print("fail");
return false;
}

5.获取session里的验证码与用户输入的比较

@PostMapping("validateCode")
@ResponseBody
public boolean validateCode(@RequestParam("mobile")String mobile, @RequestParam("code")String code,HttpServletResponse response){
if (Utils.isNull(mobile) || Utils.isNull(code)){
return false;
}
ValidateCode validateCode = (ValidateCode) session.getAttribute(mobile);
//System.out.println("sessioncode"+validateCode.getCode());
//System.out.println(code);
if(validateCode.getCode().equals(code)){
//代码
}
return false;
}


附上几张图:





log:



登录成功:



好了,到这里就完了。

我是一个菜鸟。欢迎大家进博客群313145288,一起来讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 阿里 短信