本文目录导读:

我来帮您整理阿里云通信(原阿里大于)的短信接口调用方法。
准备工作
开通服务
- 登录阿里云官网
- 开通"短信服务"
- 申请短信签名和短信模板
- 获取AccessKey ID和AccessKey Secret
安装SDK
# Python
pip install alibabacloud_dysmsapi20170525
# Java (Maven)
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.24</version>
</dependency>
# Node.js
npm install @alicloud/sms-sdk
# PHP
composer require alibabacloud/dysmsapi
各语言示例
Python 示例
from alibabacloud_dysmsapi20170525.client import Client
from alibabacloud_dysmsapi20170525 import models
from alibabacloud_tea_openapi import models as open_api_models
# 初始化客户端
def create_client():
config = open_api_models.Config(
access_key_id='your-access-key-id',
access_key_secret='your-access-key-secret'
)
config.endpoint = 'dysmsapi.aliyuncs.com'
return Client(config)
# 发送短信
def send_sms(phone_numbers, template_code, template_param):
client = create_client()
request = models.SendSmsRequest(
phone_numbers=phone_numbers,
sign_name='你的短信签名',
template_code=template_code,
template_param=template_param
)
try:
response = client.send_sms(request)
if response.body.code == 'OK':
print(f"短信发送成功,BizId: {response.body.biz_id}")
else:
print(f"发送失败: {response.body.message}")
return response
except Exception as e:
print(f"错误: {e}")
# 使用示例
if __name__ == '__main__':
# 发送验证码
params = '{"code":"123456"}'
send_sms('13800138000', 'SMS_123456789', params)
Java 示例
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.models.*;
public class SmsSender {
private static Client createClient() throws Exception {
Config config = new Config()
.setAccessKeyId("your-access-key-id")
.setAccessKeySecret("your-access-key-secret");
config.endpoint = "dysmsapi.aliyuncs.com";
return new Client(config);
}
public static void sendSms(String phoneNumber, String templateCode,
String templateParam) {
try {
Client client = createClient();
SendSmsRequest request = new SendSmsRequest()
.setPhoneNumbers(phoneNumber)
.setSignName("你的短信签名")
.setTemplateCode(templateCode)
.setTemplateParam(templateParam);
SendSmsResponse response = client.sendSms(request);
if ("OK".equals(response.getBody().getCode())) {
System.out.println("发送成功: " + response.getBody().getBizId());
} else {
System.out.println("发送失败: " + response.getBody().getMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// 发送验证码
String params = "{\"code\":\"123456\"}";
sendSms("13800138000", "SMS_123456789", params);
}
}
Node.js 示例
const Dysmsapi = require('@alicloud/dysmsapi20170525').default;
const { Config } = require('@alicloud/openapi-client');
// 创建客户端
const client = new Dysmsapi(new Config({
accessKeyId: 'your-access-key-id',
accessKeySecret: 'your-access-key-secret',
endpoint: 'dysmsapi.aliyuncs.com'
}));
// 发送短信
async function sendSms(phoneNumber, templateCode, templateParam) {
try {
const request = {
phoneNumbers: phoneNumber,
signName: '你的短信签名',
templateCode: templateCode,
templateParam: JSON.stringify(templateParam)
};
const response = await client.sendSms(request);
if (response.body.code === 'OK') {
console.log('发送成功:', response.body.bizId);
} else {
console.log('发送失败:', response.body.message);
}
return response;
} catch (error) {
console.error('错误:', error);
}
}
// 使用
sendSms('13800138000', 'SMS_123456789', { code: '123456' });
PHP 示例
<?php
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
// 配置
$config = new \AlibabaCloud\Tea\Config([
'accessKeyId' => 'your-access-key-id',
'accessKeySecret' => 'your-access-key-secret'
]);
$config->endpoint = 'dysmsapi.aliyuncs.com';
$client = new Dysmsapi($config);
// 发送短信
function sendSms($phoneNumber, $templateCode, $templateParam) {
global $client;
$request = new \AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest([
'phoneNumbers' => $phoneNumber,
'signName' => '你的短信签名',
'templateCode' => $templateCode,
'templateParam' => json_encode($templateParam)
]);
try {
$response = $client->sendSms($request);
if ($response->body->code === 'OK') {
echo "发送成功: " . $response->body->bizId;
} else {
echo "发送失败: " . $response->body->message;
}
return $response;
} catch (Exception $e) {
echo "错误: " . $e->getMessage();
}
}
// 使用
sendSms('13800138000', 'SMS_123456789', ['code' => '123456']);
?>
注意事项
模板参数格式
// 单个参数
{"code":"123456"}
// 多个参数
{"name":"张三","product":"阿里云"}
常见错误码
| 错误码 | 说明 | 解决方法 |
|---|---|---|
| OK | 成功 | |
| isv.MOBILE_NUMBER_ILLEGAL | 手机号非法 | 检查手机号格式 |
| isv.BUSINESS_LIMIT_CONTROL | 业务限流 | 降低发送频率 |
| isv.SIGN_NAME_NO_MATCH | 签名不匹配 | 检查签名和模板 |
| isv.SMS_SIGNATURE_SCENE_ILLEGAL | 签名场景非法 | 审核签名 |
最佳实践
- 频率限制:单手机号每天不超过10条
- 重试机制:失败后间隔1分钟重试,最多3次安全**:不要包含特殊字符和链接
- 性能优化:使用连接池,批量发送建议每次100条
需要我提供更详细的错误处理或批量发送示例吗?