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 条评论
暂无评论