全部产品
Search
文档中心

短信服务:首次调用API

更新时间:Dec 10, 2024

您可以通过SDK快速集成,调用API从而使用短信服务。

本文以发送短信(SendMessageToGlobe)接口为例,引导您完成短信服务API调用。您将了解到:

说明
  • 如果您已经熟悉如何调用API,可直接查阅API目录,调用所需接口。

  • 推荐使用SDK集成的方法对API进行调用。如果您希望自定义封装请求对API进行调用,请参见V3版本请求体&签名机制

准备工作

准备事项

说明

相关文档

短信签名

完成签名申请并审核通过后,获取签名名称

签名规范

短信模板

完成模板申请并审核通过后,获取模板Code

模板规范

用户权限

说明

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

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

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

  • AliyunDysmsReadOnlyAccess:只读访问短信服务的权限。

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

创建RAM用户

为RAM用户授权

AccessKey ID

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

创建AccessKey

AccessKey Secret

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

创建RAM用户并授权

  1. 创建RAM用户并创建访问密钥(AccessKey)

    访问创建RAM用户,完成相关名称设置,并选择访问方式使用永久 AccessKey 访问,单击确定,通过安全验证后即可完成RAM用户的创建。RAM用户创建成功后会显示AccessKey IDAccessKey Secret,请及时保管。

  2. 为RAM用户授权

    访问RAM用户列表,找到您所创建的RAM用户,单击操作列的添加权限。通过文本框搜索,选择AliyunDysmsFullAccess,单击确认新增授权,完成授权操作。

配置开发环境

本文以Java语言为例,进行后续操作。如果您需要使用其他编程语言,请参见SDK参考

配置Java环境

为使用SDK进行短信服务API的调用,您的Java版本需高于Java 8。您可以通过在终端运行以下命令,来检查您的Java环境:

java -version

若您尚未完成Java环境的配置或Java版本低于Java 8,请参见在Windows搭建Java开发环境

配置SDK

您可以通过配置Maven依赖来安装SDK。

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dysmsapi20180501</artifactId>
  <version>1.0.10</version>
</dependency>

初始化请求客户端

阿里云SDK支持多种访问凭据用于初始化客户端,例如AccessKey和STS Token等,更多方式请参见管理访问凭据。本文以AccessKey初始化客户端为例,进行后续操作。

配置AccessKey

为避免在代码中硬编码AccessKey而造成泄露,请通过配置环境变量的方式获取AccessKey。环境变量配置方法,请参见在Linux、macOS和Windows系统配置环境变量

本文以环境变量名ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET为例,进行后续操作。通过环境变量获取AccessKey的代码示例如下:

Config config = new Config()
        // 请确保代码运行环境配置了相应环境变量
        .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
        .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
说明

System.getenv()方法表示获取系统环境变量,请配置环境变量后,在此填入环境变量名称。请不要直接填入AccessKey信息。

配置服务接入点

配置服务接入点代码示例如下,请根据您的地域填入相应地址,参见服务接入点

config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";

调用API

构建API请求

构造API请求并根据您的业务需要传入参数。

说明

API请求对象命名规则为{API名称}Request ,例如SendSms接口的请求对象为SendSmsRequest

SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
            .setTo("<YOUR_VALUE>")
            .setMessage("<YOUR_VALUE>");

发送API请求

使用SendMessageToGlobe接口完成API请求。

说明

API返回对象命名规则为{API名称}Response ,例如SendSms接口的返回对象为SendSmsResponse

SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);

代码示例

完整代码示例如下:

package com.aliyun.sample;

import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
import com.aliyun.dysmsapi20180501.models.SendMessageToGlobeRequest;
import com.aliyun.dysmsapi20180501.models.SendMessageToGlobeResponse;
import static com.aliyun.teautil.Common.toJSONString;

public class Sample {
    public static Client createClient() throws Exception {
        Config config = new Config()
                // 配置 AccessKey ID,请确保代码运行环境配置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 配置 AccessKey Secret,请确保代码运行环境配置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));

        // 配置 Endpoint
        config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";

        return new Client(config);
    }

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

        // 构造请求对象,请填入请求参数值
        SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
                .setTo("<YOUR_VALUE>")
                .setMessage("<YOUR_VALUE>");

        // 获取响应对象
        SendMessageToGlobeResponse sendSmsResponse = client.sendMessageToGlobe(sendSmsRequest);

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

常见问题

如何查看AccessKey ID和AccessKey Secret?

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

如何自定义封装HTTP请求,然后使用curl命令或Postman等工具进行API调用?

阿里云SDK已经封装了签名、超时、重试等机制,我们建议您使用SDK进行集成,降低开发成本。如果您需要自行封装请求来进行API测试,请参见V3版本请求体&签名机制

下一步