本篇文章关于发送短信验证码的教程
2024年9月13日20:10:34
2024年9月15日02:13:32
写到大半夜,c
2024年10月12日10:36:47
官方文档
本接口主要用于向单个手机号发送短信,也支持向多个手机号(单次最多支持 1000 个手机号)发送相同签名、相同模板变量的短信,群发存在一定延迟。如果您需要向多个手机号发送不同签名、不同模板变量的短信,请使用 SendBatchSms 接口(单次最多支持 100 个手机号)。
服务接入点(Endpoint):全局接入点域名为dysmsapi.aliyuncs.com。请参见服务接入点 ,根据您的使用地域,选择对应的接入点地址。
快速调用
推荐您通过 SDK 调用 API。 如果您需要了解如何使用 ,请参见首次调用 API。
如果您需要使用控制台发送短信,请参见通过控制台发送短信。
如果您需要自定义封装 API 调用,请参见V3 版本请求体&签名机制。
注意事项
国内短信服务超时时间建议设置为≥1S;发生超时失败的情况时,建议查看回执状态后再判断是否重试。超时和重试的相关设置,请参见超时机制、重试机制。
国内短信、国际短信和多媒体短信,均不支持幂等的能力,请您自行做好幂等控制。
发送短信会根据发送量计费,计费详情请参见计费概述。
QPS 限制
本接口的单用户 QPS 限制为 5000/秒。超过限制,API 调用将会被限流,请合理使用。
请求参数
字段名称 字段详情
PhoneNumbers
string
接收短信的手机号码。手机号码格式:展开详情
示例值:
1390000**
SignName
string
短信签名名称。展开详情
示例值:
阿里云
参考取值来源:
UpdateSmsSign
CreateSmsSign
AddSmsSign
QuerySmsSignList
ModifySmsSign
TemplateCode
string
短信模板 Code。展开详情
示例值:
SMS_15305**
参考取值来源:
AddSmsTemplate
UpdateSmsTemplate
CreateSmsTemplate
ModifySmsTemplate
QuerySmsTemplateList
TemplateParam
string
短信模板变量对应的实际值。支持传入多个参数。展开详情
示例值:
{"name":"张三","number":"1390000**"}
SmsUpExtendCode
string
上行短信扩展码。上行短信指发送给通信服务提供商的短信,用于定制某种服务、完成查询,或是办理某种业务等,需要收费,按运营商普通短信资费进行扣费。展开详情
示例值:
90999
OutId
string
外部流水扩展字段。展开详情
示例值:
abcdefgh
返回参数
字段名称 字段详情
Code
string
请求状态码。展开详情
示例值:
OK
Message
string
状态码的描述。
示例值:
OK
BizId
string
发送回执 ID。展开详情
示例值:
9006197469364984**
RequestId
string
请求 ID。
示例值:
F655A8D5-B967-440B-8683-DAD6FF8DE990
package com.aliyun.sample;
import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;
import com.aliyun.teaconsole.*;
import com.aliyun.darabonba.env.*;
import com.aliyun.teautil.*;
import com.aliyun.darabonbatime.*;
import com.aliyun.darabonbastring.*;
public class Sample {
public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
config.accessKeyId = accessKeyId;
config.accessKeySecret = accessKeySecret;
return new com.aliyun.dysmsapi20170525.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.dysmsapi20170525.Client client = Sample.createClient(com.aliyun.darabonba.env.EnvClient.getEnv("ACCESS_KEY_ID"), com.aliyun.darabonba.env.EnvClient.getEnv("ACCESS_KEY_SECRET"));
// 1.发送短信
SendSmsRequest sendReq = new SendSmsRequest()
.setPhoneNumbers(args.get(0))
.setSignName(args.get(1))
.setTemplateCode(args.get(2))
.setTemplateParam(args.get(3));
SendSmsResponse sendResp = client.sendSms(sendReq);
String code = sendResp.body.code;
if (!com.aliyun.teautil.Common.equalString(code, "OK")) {
com.aliyun.teaconsole.Client.log("错误信息: " + sendResp.body.message + "");
return ;
}
String bizId = sendResp.body.bizId;
// 2. 等待 10 秒后查询结果
com.aliyun.teautil.Common.sleep(10000);
// 3.查询结果
java.util.List<String> phoneNums = com.aliyun.darabonbastring.Client.split(args.get(0), ",", -1);
for (String phoneNum : phoneNums) {
QuerySendDetailsRequest queryReq = new QuerySendDetailsRequest()
.setPhoneNumber(com.aliyun.teautil.Common.assertAsString(phoneNum))
.setBizId(bizId)
.setSendDate(com.aliyun.darabonbatime.Client.format("yyyyMMdd"))
.setPageSize(10L)
.setCurrentPage(1L);
QuerySendDetailsResponse queryResp = client.querySendDetails(queryReq);
java.util.List<QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO> dtos = queryResp.body.smsSendDetailDTOs.smsSendDetailDTO;
// 打印结果
for (QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO dto : dtos) {
if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "3")) {
com.aliyun.teaconsole.Client.log("" + dto.phoneNum + " 发送成功,接收时间: " + dto.receiveDate + "");
} else if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "2")) {
com.aliyun.teaconsole.Client.log("" + dto.phoneNum + " 发送失败");
} else {
com.aliyun.teaconsole.Client.log("" + dto.phoneNum + " 正在发送中...");
}
}
}
}
}