在應用開發中,常常需要通過簡訊向使用者發送驗證碼、通知或推廣資訊。例如,使用者在註冊時發送手機驗證碼,或在訂單狀態變更時發送通知。本文旨在為您提供一個快速、安全、可靠的SDK整合方式,以API方式調用阿里雲簡訊服務,實現自動化簡訊發送。
方案架構
調用簡訊服務API的整體流程涉及到開發人員應用、阿里雲SDK、身份與許可權管理(RAM)以及簡訊服務本身。
流程的核心邏輯:開發人員將阿里雲 SDK 整合至應用中,並通過 RAM 為應用程式指派具有簡訊服務許可權的訪問憑證。應用使用該憑證調用阿里雲簡訊服務的API發送請求,阿里雲服務端完成鑒權與合規校正後,將訊息交由簡訊網關處理,並通過電訊廠商網路最終將簡訊送達目標使用者手機。

以傳送簡訊(SendMessageToGlobe)介面為例,引導您完成簡訊服務API調用。您將瞭解到:
配置憑證
建立有簡訊服務系統管理權限的RAM使用者,並建立AccessKey。
說明 阿里雲主帳號擁有較高許可權,強烈建議您通過RAM使用者進行API調用和日常營運。
建立RAM使用者並授權
建立RAM使用者並建立存取金鑰(AccessKey)
訪問建立RAM使用者,設定使用者帳號資訊,並選擇访问方式為使用永久 AccessKey 訪問,單擊確定,通過安全驗證後即可完成RAM使用者的建立。RAM使用者建立成功後會顯示AccessKey ID和AccessKey Secret,請及時保管。
為RAM使用者授權
訪問RAM使用者列表,找到您所建立的RAM使用者,單擊操作列的添加許可權。通過文字框搜尋,選擇AliyunDysmsFullAccess,單擊確認新增授權,完成授權操作。
使用RAM使用者AccessKey配置環境變數。本文以環境變數名ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET為例,進行後續操作。
說明 為避免在代碼中寫入程式碼AccessKey而造成泄露,強烈建議您通過配置環境變數的方式擷取AccessKey。
環境變數配置步驟
Windows系統
在Windows系統中,您可以通過系統屬性、CMD或PowerShell配置環境變數。
系統屬性
在Windows系統案頭中按Win+Q鍵,在搜尋方塊中搜尋編輯系統內容變數,單擊開啟系統屬性介面。
在系統屬性視窗,單擊環境變數,然後在系統變數地區下單擊建立,變數名填入ALIBABA_CLOUD_ACCESS_KEY_ID,變數值填入您的AccessKey ID。設定ALIBABA_CLOUD_ACCESS_KEY_SECRET的操作相同。

依次單擊三個視窗的確定,關閉系統屬性配置頁面,完成環境變數配置。
開啟CMD(命令提示字元)視窗或Windows PowerShell視窗,執行如下命令檢查環境變數是否生效。
CMD
添加永久性環境變數
如果您希望API Key環境變數在目前使用者的所有新會話中生效,可以按如下操作。
在CMD中運行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
setx ALIBABA_CLOUD_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
開啟一個新的CMD視窗。
在新的CMD視窗運行以下命令,檢查環境變數是否生效。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
添加臨時性環境變數
如果您僅希望在當前會話中使用該環境變數,可以在CMD中運行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
set ALIBABA_CLOUD_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET
您可以在當前會話運行以下命令檢查環境變數是否生效。
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
PowerShell
添加永久性環境變數
如果您希望API Key環境變數在目前使用者的所有新會話中生效,可以按如下操作。
在PowerShell中運行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
[Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
[Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
開啟一個新的PowerShell視窗。
在新的PowerShell視窗運行以下命令,檢查環境變數是否生效。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
添加臨時性環境變數
如果您僅希望在當前會話中使用該環境變數,可以在PowerShell中運行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "YOUR_ACCESS_KEY_SECRET"
您可以在當前會話運行以下命令檢查環境變數是否生效。
echo $env:ALIBABA_CLOUD_ACCESS_KEY_ID
echo $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET
Linux系統
添加永久性環境變數
如果您希望API Key環境變數在目前使用者的所有新會話中生效,可以添加永久性環境變數。
執行以下命令來將環境變數設定追加到~/.bashrc 檔案中。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
也可以手動修改~/.bashrc 檔案。
手動修改
執行以下命令,開啟~/.bashrc 檔案。
nano ~/.bashrc
在設定檔中添加以下內容。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。
執行以下命令,使變更生效。
source ~/.bashrc
重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。建議您使用SDK前重啟IDE。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
添加臨時性環境變數
如果您僅希望在當前會話中使用該環境變數,可以添加臨時性環境變數。
執行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
執行以下命令,驗證該環境變數是否生效。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
macOS系統
添加永久性環境變數
如果您希望API Key環境變數在目前使用者的所有新會話中生效,可以添加永久性環境變數。
在終端中執行以下命令,查看預設Shell類型。
echo $SHELL
根據預設Shell類型進行操作。
Zsh
執行以下命令來將環境變數設定追加到 ~/.zshrc 檔案中。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
也可以手動修改~/.zshrc 檔案。
手動修改
執行以下命令,開啟Shell設定檔。
nano ~/.zshrc
在設定檔中添加以下內容。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。
執行以下命令,使變更生效。
source ~/.zshrc
重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
Bash
執行以下命令來將環境變數設定追加到 ~/.bash_profile 檔案中。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
也可以手動修改~/.bash_profile 檔案。
手動修改
執行以下命令,開啟Shell設定檔。
nano ~/.bash_profile
在設定檔中添加以下內容。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
在nano編輯器中,按Ctrl + X,接著按Y,再按Enter以儲存並關閉檔案。
執行以下命令,使變更生效。
source ~/.bash_profile
重新開啟一個終端視窗,運行以下命令檢查環境變數是否生效。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
添加臨時性環境變數
如果您僅希望在當前會話中使用該環境變數,可以添加臨時性環境變數。
以下命令適用於 Zsh 和 Bash。
執行以下命令。
# 用您的 AccessKey ID 代替 YOUR_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
# 用您的 AccessKey Secret 代替 YOUR_ACCESS_KEY_SECRET
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESS_KEY_SECRET"
執行以下命令,驗證該環境變數是否生效。
echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
修改系統內容變數後,請重啟或重新整理您的編譯運行環境,包括IDE、命令列介面、其他傳統型應用程式及後台服務,以確保最新的系統內容變數成功載入。
安裝SDK
本文以Java語言為例,進行後續操作。如果您需要使用其他程式設計語言,請參見SDK參考。
已安裝Java 8或以上版本。
配置Java環境
您可以通過在終端運行以下命令,來檢查您的Java環境:
java -version
# 如果使用maven管理和構建java專案,還需確保maven已正確安裝到您的開發環境中
mvn --version
以Windows的CMD為例:

為使用簡訊服務SDK,您的Java需要在Java 8或以上版本。您可以查看列印資訊中的第一行確認Java版本,例如列印資訊:openjdk version "16.0.1" 2021-04-20表明當前Java版本為Java 16。如果您當前計算環境沒有Java、或版本低於Java 8,請前往Java下載進行下載與安裝。
您可以通過配置Maven依賴來安裝SDK。請配置以下資訊並將 the-latest-version 替換為最新版本號碼。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20180501</artifactId>
<!-- 請將 'the-latest-version' 替換為最新版本號碼:https://mvnrepository.com/artifact/com.aliyun/dysmsapi20180501 -->
<version>the-latest-version</version>
</dependency>
Maven配置步驟
開啟您的Maven專案的pom.xml檔案。
在<dependencies>標籤內添加上述依賴資訊。
儲存pom.xml檔案。
右鍵專案名稱,選擇Maven->Reload project,更新專案依賴,Maven會自動下載並添加簡訊服務SDK到您的專案中。

使用SDK
1. 初始化用戶端
阿里雲SDK支援多種訪問憑據用於初始化用戶端,例如AccessKey和STS Token等,更多方式請參見管理訪問憑據。本文以AccessKey初始化用戶端為例,進行後續操作。
package com.aliyun.sample;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20180501.Client;
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"));
// System.getenv()方法表示擷取系統內容變數,不要直接在getenv()中填入AccessKey資訊。
// 配置 Endpoint。
config.endpoint = "dysmsapi.ap-southeast-1.aliyuncs.com";
return new Client(config);
}
}
2. 構建請求對象
構造API請求並根據您的業務需要傳入參數。
說明 請求對象命名規則:{API名稱}Request ,例如SendMessageToGlobe介面的請求對象為SendMessageToGlobeRequest。
SendMessageToGlobeRequest sendSmsRequest = new SendMessageToGlobeRequest()
.setTo("<YOUR_VALUE>")
.setMessage("<YOUR_VALUE>");
3. 發起請求
使用SendMessageToGlobe介面完成API請求。
說明 返回對象命名規則:{API名稱}Response ,例如SendMessageToGlobe介面的返回對象為SendMessageToGlobeResponse。
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));
}
}
運行後您將會看到對應的輸出結果:
{
"headers": {
"date": "Tue, 24 Oct 2023 07:47:17 GMT",
"content-type": "application/json;charset=utf-8",
"content-length": "263",
"connection": "keep-alive",
"keep-alive": "timeout=25",
"access-control-allow-origin": "*",
"access-control-expose-headers": "*",
"x-acs-request-id": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"x-acs-trace-id": "29c11fe4c778b74774d5f5602f0e7975",
"etag": "2a+mcDRTDkXqx9VF7b6U57Q3"
},
"statusCode": 200,
"body": {
"ResponseCode": "OK",
"NumberDetail": {
"Region": "Taiwan",
"Country": "Taiwan, Province of China",
"Carrier": "FarEasTone"
},
"RequestId": "97B1D7B6-F2F6-3A50-97BC-A90B43EC962F",
"Segments": "1",
"ResponseDescription": "OK",
"To": "88691567****",
"MessageId": "191921698133637273"
}
}