1、入住阿里云
首先,注册阿里云账号或者快捷登陆
其次,实名认证
根据情况选择是企业还是个人用户(以个人用户为例)
然后选择个人支付宝授权认证
最后,根据实际情况填写个人信息
2、开通短信服务
首先,登陆
其次,绑定电子邮箱
绑定成功后,选择开通短信服务
开通成功后,可以看到阿里云免费赠送了100条短信
如果短信不够用,可以购买,不具体叙述。
3、获取AccessKey
首先,将鼠标放到用户头像上
点击accesskeys,出现下面的界面:
点击开始使用子用户Accesskey,进入下面的界面:
点击开通后跳转下面的界面:
再点击下面的accesskeys:
出现下面界面:
选择继续使用Accesskey,点击创建AccessKey,如下图:
成功后,如图:
4、创建签名和模版
(1)创建签名
首先,短信服务->国内消息,如图:
点击添加签名,根据实际情况填写申请信息(例如:签名用途,选择第二个)
注:如何获取ICP备案:https://jingyan.baidu.com/article/925f8cb818d04cc0dce05660.html
(2)添加模板
模板类型可以选择验证码也可以选择短信通知,由于需要测试验证码短信和通知短信,所以可以添加两个模板
添加审核成功后,如图:
5、编程(Java)
public class SmsUtil {
//产品名称:云通信短信API产品,开发者无需替换
static final String product="Dysmsapi";
//产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";
// 此处需要替换成开发者自己的AccessKey(在阿里云访问控制台寻找)
static final String accessKeyId = "yourAccessKeyId";
static final String accessKeySecret = "yourAccessKeySecret";
/**
* 发送验证码短信
* 模板为验证码类型
*
* @phoneNumber
*/
public static boolean sendSms(String phoneNumber,String code) 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("");
//必填:短信模板id-可在短信控制台中找到,是id不是名字,举个例子
request.setTemplateCode("");
//可选:模板中的变量替换JSON串,如模板内容 \为"亲爱的${name},您的验证码为${code}"时,此处的值为--必填,与模板相对应
//request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
request.setTemplateParam("{\"code\":\""+code+"\"}");
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request);
//System.out.println(sendSmsResponse.getCode());
if (sendSmsResponse.getCode().equals("OK")) {
return true;
}
return false;
}
/**
* 发送通知类短信
* 模板为通知类型
*
*/
public static boolean sendSmg(String phoneNumber,String name) 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("");
//必填:短信模板id-可在短信控制台中找到,是id不是名字,举个例子
request.setTemplateCode("");
//可选:模板中的变量替换JSON串,如模板内容 \为"亲爱的${name},您的验证码为${code}"时,此处的值为--必填,与模板相对应
request.setTemplateParam("{\"name\":\""+name+"\"}");
//request.setTemplateParam("{\"code\":\""+getRandomSMSCode(6,true)+"\"}");
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request);
//System.out.println(sendSmsResponse.getCode());
if (sendSmsResponse.getCode().equals("OK")) {
return true;
}
return false;
}
/**
* 随机生成验证码
* 参数numberCode控制验证码类型,true为纯数字,false为数字和字母的混合
*
*/
public static final String getRandomSMSCode(int length, boolean numberCode) {
String randomSMSCode="";
String codeTable = numberCode ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz";
boolean flag = true;
do {
int count = 0;
for (int i = 0; i < length; i++) {
double dblR = Math.random() * codeTable.length();
int intR = (int) Math.floor(dblR);
char c = codeTable.charAt(intR);
if (('0' <= c) && (c <= '9')) {
count++;
}
randomSMSCode += codeTable.charAt(intR);
}
if (count >= 2) {
flag = false;
}
} while (flag);
return randomSMSCode;
}
}
6、发送短信
public class Test {
public static void main(String[] args) throws ClientException {
sendSms("138****0204");
sendSmg("182****9810","张三");
}
@SuppressWarnings("resource")
public static void sendSms(String phoneNumber) throws ClientException {
String randomSMSCode = SmsUtil.getRandomSMSCode(5,true);
if (SmsUtil.sendSms(phoneNumber,randomSMSCode)) {
System.out.println("短信发送成功");
Scanner scanner= new Scanner(System.in);
System.out.println("请输入您收到的验证码:");
String code=scanner.next();
if (randomSMSCode.equals(code)) {
System.out.println("验证成功");
}
}else {
System.out.println("失败");
}
}
public static void sendSmg(String phoneNumber,String name) throws ClientException {
if (SmsUtil.sendSmg(phoneNumber, name)) {
System.out.println("通知短信已经发送");
}else {
System.out.println("发送失败");
}
}
}
实现所需jar包:https://download.csdn.net/download/willy__qi/10684014
阿里云短信服务首次接入完整流程:https://help.aliyun.com/document_detail/59210.html?spm=5176.sms-account.108.5.f51e1cbejQpdYa