短信调用阿里云通信接口

wen java案例 1

本文目录导读:

短信调用阿里云通信接口

  1. 准备工作
  2. 各语言示例
  3. 注意事项

我来帮您整理阿里云通信(原阿里大于)的短信接口调用方法。

准备工作

开通服务

  • 登录阿里云官网
  • 开通"短信服务"
  • 申请短信签名和短信模板
  • 获取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 签名场景非法 审核签名

最佳实践

  1. 频率限制:单手机号每天不超过10条
  2. 重试机制:失败后间隔1分钟重试,最多3次安全**:不要包含特殊字符和链接
  3. 性能优化:使用连接池,批量发送建议每次100条

需要我提供更详细的错误处理或批量发送示例吗?

抱歉,评论功能暂时关闭!