使用python发送短信:腾讯云SMS服务版

原文档

1、前提条件

  • 已开通短信服务,具体操作请参见 国内短信快速入门

  • 如需发送国内短信,需要先 购买国内短信套餐包

  • 已在访问管理控制台 > API密钥管理 页面获取 SecretID 和 SecretKey。
  • SecretID 用于标识 API 调用者的身份。
  • SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥, SecretKey 需妥善保管,避免泄露
  • 短信的调用地址为sms.tencentcloudapi.com
  • 安装SDK:pip install tencentcloud-sdk-python

2、发送短信

import json

from typing import Dict, Any
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.sms.v20210111 import models
from tencentcloud.sms.v20210111 import sms_client


# 生成短信消息
def generate_message(phone: str, code: Any, template_id: str) -> Dict[str, Any]:
    return {
        'PhoneNumberSet': [f'+86{phone}'],
        'SmsSdkAppId': 'xxx',  # 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666
        'SignName': 'xxxx',  # 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息
        'TemplateId': template_id,
        'TemplateParamSet': [code]
    }


# 发送短信
def send_message(msg: Dict[str, Any], secret_id: str, secret_key: str) -> None:
    cred = credential.Credential(secret_id, secret_key)  # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey
    http_profile = HttpProfile()  # 实例化一个HTTP选项对象,可选的,没有特殊需求可以跳过
    http_profile.endpoint = "sms.tencentcloudapi.com"  # 指定接入地域域名(默认就近接入)
    client_profile = ClientProfile()  # 实例化一个客户端配置对象,可以指定超时时间等配置,非必要。
    client_profile.httpProfile = http_profile
    client = sms_client.SmsClient(cred, "ap-beijing", client_profile)  # 实例化 SMS 的 client 对象
    req = models.SendSmsRequest()  # 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
    req.from_json_string(json.dumps(msg))
    resp = client.SendSms(req)  # 通过 client 对象调用 SendSms 方法发起请求。resp 变量将会保存发送短信请求的响应结果
    back = json.loads(resp.to_json_string())['SendStatusSet'][0]['Code']
    if back != 'Ok':
        message = json.loads(resp.to_json_string())['SendStatusSet'][0]['Message']
        raise Exception(message)


def main() -> None:
    phone = '12345678901'
    code = '123456'  # 嵌入到短信模板中的内容,注意长度,根据模板设定的要求
    secret_id = 'AKID******'  # 用于标识 API 调用者的身份。
    secret_key = '******'  # 用于加密签名字符串和服务器端验证签名字符串的密钥
    template_id = '******'  # 短信模板 ID
    msg = generate_message(phone, code, template_id)
    try:
        send_message(msg, secret_id, secret_key)
    except TencentCloudSDKException as e:
        print(e)
    except Exception as e:
        print(e)


if __name__ == '__main__':
    main()

3、短信字段解释

3.1 SmsSdkAppId

SmsSdkAppId 是腾讯云短信服务中的参数,代表短信 SDK AppID。在使用腾讯云短信服务发送短信时,需要指定 SmsSdkAppId 参数,以标识使用哪个短信 SDK AppID 进行发送。

每个腾讯云账号可以创建多个短信 SDK AppID,每个 SDK AppID 都对应一个独立的应用或项目。通过在短信发送请求中指定相应的 SmsSdkAppId,腾讯云系统可以根据该 AppID 区分不同的短信发送来源,并进行相应的计费和统计。

因此,当您使用腾讯云短信服务发送短信时,需要将您的短信 SDK AppID 作为参数传递给 SDK 或 API,以确保腾讯云系统能够正确地识别和处理您的请求。

3.2 SignName

SignName 是腾讯云短信服务中的参数,用于指定短信签名。短信签名是在发送短信时显示的发送者身份,可以是您的企业名称、品牌名称或其他合法的身份信息。在发送短信之前,您需要在腾讯云控制台或通过 API 接口进行短信签名的申请和审核。

使用 SignName 参数可以确保您发送的短信具有合法的发送者身份,提高短信的可信度和可靠性。此外,短信签名也是腾讯云对短信发送进行审核和限制的重要依据之一。

在发送短信时,您需要将您申请的短信签名作为参数传递给腾讯云的短信服务,以确保短信能够正确地显示发送者身份。

3.3 TemplateId

TemplateId 是腾讯云短信服务中的参数,用于指定短信模板 ID。短信模板是预先设计好的短信内容格式,包括固定文本和可变参数部分。在发送短信时,您可以选择合适的短信模板,并将模板 ID 作为参数传递给腾讯云的短信服务,以指定要使用的短信内容格式。

短信模板通常用于发送相同或类似的短信内容,例如验证码、通知、推广信息等。为了保证短信的内容合法性和安全性,腾讯云对短信模板进行审核和管理,并要求用户在使用短信服务之前先创建和审核短信模板。

在发送短信时,您需要选择合适的短信模板,并将模板 ID 作为参数传递给短信服务,以确保发送的短信内容符合预期并且通过审核。使用短信模板可以简化短信发送的流程,提高短信发送的效率和一致性。

3.4 TemplateParamSet

TemplateParamSet 是腾讯云短信服务中的参数,用于指定短信模板中的参数值。在使用短信模板发送短信时,通常会包含一些可变的内容,例如验证码、订单号、用户名等信息。这些可变内容在每次发送时可能会有所不同,因此需要将其作为参数传递给短信服务,以替换短信模板中对应的占位符。

具体来说,TemplateParamSet 是一个列表,包含了短信模板中的各个参数值。每个参数值对应于短信模板中的一个占位符,并按照模板中的顺序进行排列。在发送短信时,短信服务会将列表中的参数值依次填充到模板中的占位符位置,生成最终的短信内容。

例如,如果您的短信模板包含一个验证码和一个订单号两个参数,您需要将验证码和订单号作为 TemplateParamSet 参数的值传递给短信服务,以便生成包含正确信息的短信内容。

4、TencentCloudSDKException异常

TencentCloudSDKException 是腾讯云 SDK 中定义的一个异常类,用于表示在使用 SDK 过程中可能发生的各种异常情况。当 SDK 在执行 API 请求时出现错误时,会抛出 TencentCloudSDKException 异常,开发者可以通过捕获这个异常来处理错误情况。

TencentCloudSDKException 可能表示的错误包括但不限于:

  • 认证错误:例如提供的密钥对无效或过期。
  • API 请求错误:例如请求参数错误、访问无权限的资源等。
  • 网络错误:例如网络连接超时、无法连接到服务器等。
  • 服务器错误:例如服务器内部错误、服务不可用等。

发表评论

评论列表,共 0 条评论

    暂无评论