这些都只是简单实现下短信验证,通过传一个手机号参数,发送一个4位数的验证码。梳理下阿里云 短信服务 的流程,没有什么高深的东西。。。
1.进入阿里云官网,选择短信服务
2.开通短信服务
3.进入短信服务的控制台
4.点击左侧 国内消息
5.添加签名(需审核)
6.添加模板(需审核)
7.申请accesskeys
8.创建accesskeys
这里直接使用主账号创建accesskey
9.新建 SpringBoot 项目
只是为了测试,所以只选了 Spring Web 依赖
10.阿里云短信服务所需依赖
<!-- 阿里云短信服务所需 -->
<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>
11.引入 阿里短信服务工具类
package com.hsb.ali.duanxin.util;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sms {
//产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
//产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";
// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static final String accessKeyId = "你的accesskeyid ";
static final String accessKeySecret = "你的accesskeyid 对应的secret";
public static SendSmsResponse sendSms(String phonenumber,String securitycode) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持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();
//必填:待发送手机号
request.setPhoneNumbers(phonenumber);
//必填:短信签名-可在短信控制台中找到
request.setSignName("你的签名名字");
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode("你的模板code");
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"" +securitycode+ "\"}");
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
return sendSmsResponse;
}
public static QuerySendDetailsResponse querySendDetails(String bizId,String phonenumber) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
QuerySendDetailsRequest request = new QuerySendDetailsRequest();
//必填-号码
request.setPhoneNumber(phonenumber);
//可选-流水号
request.setBizId(bizId);
//必填-发送日期 支持30天内记录查询,格式yyyyMMdd
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
request.setSendDate(ft.format(new Date()));
//必填-页大小
request.setPageSize(10L);
//必填-当前页码从1开始计数
request.setCurrentPage(1L);
//hint 此处可能会抛出异常,注意catch
QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
return querySendDetailsResponse;
}
public static String setNewcode() {
Integer newcode = (int) (Math.random() * 9999) + 100;
return newcode + "";
}
}
上面这个文档是从同学哪里kiang来的,不知道是从哪个demo找来的…
12.阿里短信服务工具类 需要改的东西
12.1 包名
修改:
改成这个类的包名
12.2 accesskey 账号
修改:
改成自己的accesskey账号 accesskey:在这里可以查看
12.3 签名 和 模板code
修改:
签名:第五步申请的签名 名字 模板:第六步申请的短信模板,复制模板CODE
12.4 json数据(发送短信时需要传递的参数)
修改:
变量:拼接成创建短信模板时对应的json变量 默认模板变量格式:
12.5 验证码格式
13. controller层
此处需要处理一个异常,注意 捕获或抛出
14.访问请求路径(拼接个参数)