本教程详细介绍如何使用Alibaba Cloud SDK for Java发送短信验证码。
前提条件
在使用本教程前,请确保已完成以下操作:
- 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
- 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见阿里云开发工具包(SDK)。
<dependencies> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.3</version> </dependency> </dependencies>
代码示例
本文操作示例主要以代码形式体现,具体代码如下:
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.Map;
/**
* 发送短信
*/
public class SendSmsDemo {
// 设置公共请求参数,初始化Client。
private DefaultProfile profile = DefaultProfile.getProfile(
"your-regionId",// API支持的地域ID,如短信API的值为:cn-hangzhou。
"your-accessKeyId",// 您的AccessKey ID。
"your-accessKeySecret");// 您的AccessKey Secret。
private IAcsClient client = new DefaultAcsClient(profile);
private static void log_print(String functionName, Object result) {
Gson gson = new Gson();
System.out.println("-------------------------------" + functionName + "-------------------------------");
System.out.println(gson.toJson(result));
}
/**
* 添加短信模板
*/
private String addSmsTemplate() throws ClientException {
CommonRequest addSmsTemplateRequest = new CommonRequest();
addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com");
addSmsTemplateRequest.setSysAction("AddSmsTemplate");
addSmsTemplateRequest.setSysVersion("2017-05-25");
// 短信类型。0:验证码;1:短信通知;2:推广短信;3:国际/港澳台消息
addSmsTemplateRequest.putQueryParameter("TemplateType", "0");
// 模板名称,长度为1~30个字符
addSmsTemplateRequest.putQueryParameter("TemplateName", "测试短信模板");
// 模板内容,长度为1~500个字符
addSmsTemplateRequest.putQueryParameter("TemplateContent", "您正在申请手机注册,验证码为:${code},5分钟内有效!");
// 短信模板申请说明
addSmsTemplateRequest.putQueryParameter("Remark", "测试");
CommonResponse addSmsTemplateResponse = client.getCommonResponse(addSmsTemplateRequest);
String data = addSmsTemplateResponse.getData();
// 消除返回文本中的反转义字符
String sData = data.replaceAll("'\'", "");
log_print("addSmsTemplate", sData);
Gson gson = new Gson();
// 将字符串转换为Map类型,取TemplateCode字段值
Map map = gson.fromJson(sData, Map.class);
Object templateCode = map.get("TemplateCode");
return templateCode.toString();
}
/**
* 发送短信
*/
private String sendSms(String templateCode) throws ClientException {
CommonRequest request = new CommonRequest();
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
// 接收短信的手机号码
request.putQueryParameter("PhoneNumbers", "156xxxxxxxx");
// 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。
request.putQueryParameter("SignName", "阿里云通信");
// 短信模板ID
request.putQueryParameter("TemplateCode", templateCode);
// 短信模板变量对应的实际值,JSON格式。
request.putQueryParameter("TemplateParam", "{\"code\":\"8888\"}");
CommonResponse commonResponse = client.getCommonResponse(request);
String data = commonResponse.getData();
String sData = data.replaceAll("'\'", "");
log_print("sendSms", sData);
Gson gson = new Gson();
Map map = gson.fromJson(sData, Map.class);
Object bizId = map.get("BizId");
return bizId.toString();
}
/**
* 查询发送详情
*/
private void querySendDetails(String bizId) throws ClientException {
CommonRequest request = new CommonRequest();
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("QuerySendDetails");
// 接收短信的手机号码
request.putQueryParameter("PhoneNumber", "156xxxxxxxx");
// 短信发送日期,支持查询最近30天的记录。格式为yyyyMMdd,例如20191010。
request.putQueryParameter("SendDate", "20191010");
// 分页记录数量
request.putQueryParameter("PageSize", "10");
// 分页当前页码
request.putQueryParameter("CurrentPage", "1");
// 发送回执ID,即发送流水号。
request.putQueryParameter("BizId", bizId);
CommonResponse response = client.getCommonResponse(request);
log_print("querySendDetails", response.getData());
}
public static void main(String[] args) {
SendSmsDemo sendSmsDemo = new SendSmsDemo();
try {
// 创建短信模板
String templateCode = sendSmsDemo.addSmsTemplate();
// 使用刚创建的短信模板发送短信
String bizId = sendSmsDemo.sendSms(templateCode);
// 根据短信发送流水号查询短信发送情况
sendSmsDemo.querySendDetails(bizId);
} catch (ClientException e) {
e.printStackTrace();
}
}
}
运行结果
正确运行结果类似如下:
-------------------------------addSmsTemplate-------------------------------
{
"Message": "OK",
"RequestId": "F82F6D84-31B2-4EF9-A39B-CA3B11F020CF",
"TemplateCode": "SMS_175205062",
"Code": "OK"
}
-------------------------------sendSms-------------------------------
{
"Message":"OK",
"RequestId":"2184201F-BFB3-446B-B1F2-C746B7BF0657",
"BizId":"1977032459972955880",
"Code":"OK"
}
-------------------------------querySendDetails-------------------------------
{
"TotalCount": 1,
"Message": "OK",
"RequestId": "4D10A1F1-F8AB-49E9-B5DA-EE6C7E68F0B0",
"SmsSendDetailDTOs": {
"SmsSendDetailDTO": [
{
"SendDate": "2019-10-10 10:05:56",
"SendStatus": 3,
"ReceiveDate": "2019-10-10 10:06:11",
"ErrCode": "DELIVERED",
"Content": "【阿里云通信】您正在申请手机注册,验证码为:8888,5分钟内有效!",
"PhoneNum": "156xxxxxxxx"
}
]
},
"Code": "OK"
}