通過API發(fā)送短信
短信服務(wù)提供短信發(fā)送、發(fā)送狀態(tài)查詢等API接口,您可以通過調(diào)用API接口申請簽名和模板,并給目標用戶發(fā)送短信。
您可以根據(jù)業(yè)務(wù)需要和自身情況選擇合適的方式調(diào)用短信服務(wù)API:
通過阿里云OpenAPI 開發(fā)者門戶
適用于習(xí)慣交互式操作界面的場景,或者初次使用阿里云產(chǎn)品的開發(fā)者用戶。您可以在OpenAPI開發(fā)者門戶中調(diào)試和獲取SDK請求示例。
適用于SDK編碼場景,支持多種編程語言,包括Java、Go、C#、.Net、PHP、Node.js/TypeScript、Python。使用OpenAPI自動化集成短信服務(wù),可以提升您使用短信服務(wù)的開發(fā)效率。
本文將以SDK的方式引導(dǎo)您使用短信服務(wù)。您可以先通過OpenAPI 開發(fā)者門戶,查看、體驗短信服務(wù)API后,閱讀本文并開始進行短信服務(wù)的API開發(fā)工作。
準備工作
準備事項 | 說明 | 相關(guān)文檔 |
實名認證的類型包括個人認證和企業(yè)認證。
說明 個人認證和企業(yè)認證可使用的功能不完全相同。發(fā)送推廣短信、國際/港澳臺短信必須為企業(yè)認證。 | ||
服務(wù)開通 | 登錄短信服務(wù)控制臺,開通短信服務(wù)。 | |
資質(zhì)申請 | 根據(jù)運營商實名發(fā)送短信的要求,請登錄短信服務(wù)控制臺,完成資質(zhì)申請。 | |
用戶權(quán)限 | 說明 阿里云主賬號擁有較高權(quán)限,建議您通過RAM用戶進行API調(diào)用和日常運維。 請確保您所調(diào)用API的RAM用戶已有短信服務(wù)相關(guān)權(quán)限:
如果您需要新建自定義權(quán)限,請參見授權(quán)信息。 | |
AccessKey ID | 您可以通過RAM控制臺,單擊RAM用戶名稱查看。 | |
AccessKey Secret | 創(chuàng)建后不支持查看,若本地?zé)o備份,建議重新創(chuàng)建一對AccessKey使用。 |
環(huán)境與參數(shù)配置
本文以Java語言為例,進行后續(xù)操作。更多語言及其SDK安裝方式,請參見安裝與使用教程。
請檢查您的Java版本是否高于Java 8。Java環(huán)境配置的方法,請參見在Windows搭建Java開發(fā)環(huán)境。
請通過配置Maven依賴,完成SDK的安裝。
<dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> <version>3.1.0</version> </dependency>
請配置環(huán)境變量,通過環(huán)境變量讀取訪問密鑰(AccessKey)。環(huán)境變量配置方法,請參見在Linux、macOS和Windows系統(tǒng)配置環(huán)境變量。
說明為避免在代碼中硬編碼AccessKey而造成泄露,請通過配置環(huán)境變量的方式,來獲取AccessKey。
接口調(diào)用流程
申請短信簽名:使用CreateSmsSign接口。
簽名信息需遵守短信簽名規(guī)范。
申請短信模板:使用CreateSmsTemplate接口。
國內(nèi)短信模板與國際/港澳臺短信模板不通用。
等待審核:申請的簽名和模板,均審核通過后才可以發(fā)送短信。您可使用GetSmsSign、GetSmsTemplate接口查看簽名和模板的審核狀態(tài)。
發(fā)送短信:使用SendSms接口,或使用SendBatchSms接口批量發(fā)送短信。
發(fā)送短信前確保您賬戶余額充足。更多詳情,請參見計費概述。
查看短信發(fā)送詳情:您可使用接口或回執(zhí)消息查看短信發(fā)送詳情。
使用QuerySendDetails接口。
配置回執(zhí)消息:短信發(fā)送后,通過配置輕量消息隊列(原 MNS)消費模式和HTTP批量推送模式,可以接收短信發(fā)送狀態(tài)的結(jié)果和用戶回復(fù)的短信內(nèi)容,幫助您了解短信的發(fā)送成功率,并為其他業(yè)務(wù)提供支持。
更多接口信息,請參見API概覽。
代碼示例
使用SDK發(fā)送短信(調(diào)用SendSms接口)的代碼示例如下,請根據(jù)注釋完成參數(shù)填寫。
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,請確保代碼運行環(huán)境設(shè)置了環(huán)境變量。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 配置 AccessKey Secret,請確保代碼運行環(huán)境設(shè)置了環(huán)境變量。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// System.getenv()方法表示獲取系統(tǒng)環(huán)境變量,請配置環(huán)境變量后,在此填入環(huán)境變量名稱,不要直接填入AccessKey信息。
// 配置 Endpoint
config.endpoint = "dysmsapi.aliyuncs.com";
return new Client(config);
}
public static void main(String[] args) throws Exception {
// 初始化請求客戶端
Client client = Sample.createClient();
// 構(gòu)造請求對象,請?zhí)钊胝埱髤?shù)值
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setPhoneNumbers("1390000****")
.setSignName("阿里云")
.setTemplateCode("SMS_15305****")
.setTemplateParam("{\"name\":\"張三\",\"number\":\"1390000****\"}");
// 獲取響應(yīng)對象
SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
// 響應(yīng)包含服務(wù)端響應(yīng)的 body 和 headers
System.out.println(toJSONString(sendSmsResponse));
}
}
您可以訪問 OpenAPI 門戶,查看各語言 SDK 請求完整示例。