maxtrnn / 短信发送验证码

Created Fri, 13 Sep 2024 12:09:00 +0800 Modified Thu, 24 Sep 2026 07:39:59 +0000
1283 Words

本篇文章关于发送短信验证码的教程

2024年9月13日20:10:34

2024年9月15日02:13:32 写到大半夜,c


2024年10月12日10:36:47

官方文档

[scode type=“green”]基本信息 本接口主要用于向单个手机号发送短信,也支持向多个手机号(单次最多支持 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[/scode]


[scode type=“green”]// This file is auto-generated, don’t edit it. Thanks. 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 + " 正在发送中...");
            }

        }
    }
}

}[/scode]