通过API发送短信

短信服务提供短信发送、发送状态查询等API接口,您可以通过调用API接口申请签名和模板,并给目标用户发送短信。

您可以根据业务需要和自身情况选择合适的方式调用短信服务API:

  • 通过阿里云OpenAPI 开发者门户

    适用于习惯交互式操作界面的场景,或者初次使用阿里云产品的开发者用户。您可以在OpenAPI开发者门户中调试和获取SDK请求示例。

  • 通过短信服务SDK

    适用于SDK编码场景,支持多种编程语言,包括Java、Go、C#、.Net、PHP、Node.js/TypeScript、Python。使用OpenAPI自动化集成短信服务,可以提升您使用短信服务的开发效率。

本文将以SDK的方式引导您使用短信服务。您可以先通过OpenAPI 开发者门户,查看、体验短信服务API后,阅读本文并开始进行短信服务的API开发工作。

准备工作

准备事项

说明

相关文档

账号注册实名认证

实名认证的类型包括个人认证企业认证

  • 个人认证表示账号持有者是个人,以个人身份使用短信服务

  • 企业认证表示账号持有者是企业或政府部门,以企业身份使用短信服务。

说明

个人认证和企业认证可使用的功能不完全相同。发送推广短信、国际/港澳台短信必须为企业认证

使用须知

服务开通

登录短信服务控制台,开通短信服务。

资质申请

根据运营商实名发送短信的要求,请登录短信服务控制台,完成资质申请。

申请资质

用户权限

说明

阿里云主账号拥有较高权限,建议您通过RAM用户进行API调用和日常运维。

请确保您所调用API的RAM用户已有短信服务相关权限:

  • AliyunDysmsFullAccess:管理短信服务的权限。

如果您需要新建自定义权限,请参见授权信息

创建RAM用户

为RAM用户授权

AccessKey ID

您可以通过RAM控制台,单击RAM用户名称查看。

创建AccessKey

AccessKey Secret

创建后不支持查看,若本地无备份,建议重新创建一对AccessKey使用。

环境与参数配置

本文以Java语言为例,进行后续操作。更多语言及其SDK安装方式,请参见安装与使用教程

  1. 请检查您的Java版本是否高于Java 8。Java环境配置的方法,请参见在Windows搭建Java开发环境

  2. 请通过配置Maven依赖,完成SDK的安装。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>dysmsapi20170525</artifactId>
      <version>3.1.0</version>
    </dependency>
  3. 请配置环境变量,通过环境变量读取访问密钥(AccessKey)。环境变量配置方法,请参见在Linux、macOS和Windows系统配置环境变量

    说明

    为避免在代码中硬编码AccessKey而造成泄露,请通过配置环境变量的方式,来获取AccessKey。

接口调用流程

image
  1. 申请短信签名:使用CreateSmsSign接口。

    签名信息需遵守短信签名规范

  2. 申请短信模板:使用CreateSmsTemplate接口。

    国内短信模板与国际/港澳台短信模板不通用。

  3. 等待审核:申请的签名和模板,均审核通过后才可以发送短信。您可使用GetSmsSignGetSmsTemplate接口查看签名和模板的审核状态。

  4. 发送短信:使用SendSms接口,或使用SendBatchSms接口批量发送短信。

    发送短信前确保您账户余额充足。更多详情,请参见计费概述

  5. 查看短信发送详情:您可使用接口或回执消息查看短信发送详情。

更多接口信息,请参见API概览

代码示例

使用SDK发送短信(调用SendSms接口)的代码示例如下,请根据注释完成参数填写。

package com.aliyun.sample;

import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import static com.aliyun.teautil.Common.toJSONString;

public class Sample {
    public static Client createClient() throws Exception {
        Config config = new Config()
                // 配置 AccessKey ID,请确保代码运行环境设置了环境变量。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 配置 AccessKey Secret,请确保代码运行环境设置了环境变量。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
                // System.getenv()方法表示获取系统环境变量,请配置环境变量后,在此填入环境变量名称,不要直接填入AccessKey信息。
        
        // 配置 Endpoint
        config.endpoint = "dysmsapi.aliyuncs.com";

        return new Client(config);
    }

    public static void main(String[] args) throws Exception {
        // 初始化请求客户端
        Client client = Sample.createClient();

        // 构造请求对象,请填入请求参数值
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers("1390000****")
                .setSignName("阿里云")
                .setTemplateCode("SMS_15305****")
                .setTemplateParam("{\"name\":\"张三\",\"number\":\"1390000****\"}");

        // 获取响应对象
        SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);

        // 响应包含服务端响应的 body 和 headers
        System.out.println(toJSONString(sendSmsResponse));
    }
}

您可以访问 OpenAPI 门户,查看各语言 SDK 请求完整示例。

常见问题

视频教程