公共配置:
# ######## sms ########
# 腾讯云短信应用的 app_id
TENCENT_SMS_APP_ID = 6666666666
# 腾讯云短信应用的 app_key
TENCENT_SMS_APP_KEY = "6666666666666666666666"
# 腾讯云短信签名内容
TENCENT_SMS_SIGN = "Python之路"
# 腾讯云短信模版
TENCENT_SMS_TEMPLATE = {
'register': 1568327,
'login': 1568328
}
TENCENT_SECRETID = 'MySecretID'
TENCENT_SECRETKEY = 'MysecretKEY'
TENCENT_REGION = 'ap-guangzhou'
方法一:
点击查看代码
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
# 导入对应产品模块的client models。
from tencentcloud.sms.v20210111 import sms_client, models
from django.conf import settings
# 导入可选配置类
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
def sms_code(phone, random_code, template_id='1568328'):
"""
1.注册腾讯云,开通腾讯云短信。
2.创建应用
SDK AppID = 1400302209
3.申请签名(个人:公众号)
ID 名称
260514 Python之路
4.申请模板
ID 名称
516680 miniprogram
5.申请腾讯云API https://console.cloud.tencent.com/cam/capi
SecretId:
SecretKey:
6.调用相关接口去发送短信 https://cloud.tencent.com/document/product/382/38778
SDK,写好的工具。
"""
try:
# 必要步骤:
# 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
# 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
# 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
# 以免泄露密钥对危及你的财产安全。
# SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi
cred = credential.Credential(settings.TENCENT_SECRETID, settings.TENCENT_SECRETKEY)
client = sms_client.SmsClient(cred, settings.TENCENT_REGION)
# 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
# 你可以直接查询SDK源码确定SendSmsRequest有哪些属性可以设置
# 属性可能是基本类型,也可能引用了另一个数据结构
# 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明
req = models.SendSmsRequest()
# 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666
# 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
req.SmsSdkAppId = str(settings.TENCENT_SMS_APP_ID)
# 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名
# 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
req.SignName = settings.TENCENT_SMS_SIGN
# 模板 ID: 必须填写已审核通过的模板 ID
# 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
req.TemplateId = template_id
# 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,,若无模板参数,则设置为空
req.TemplateParamSet = [str(random_code), ]
# 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
# 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号
CHINA = '+86'
phone = '{}{}'.format(CHINA, phone)
req.PhoneNumberSet = [phone, ]
resp = client.SendSms(req)
# 输出json格式的字符串回包
# print(resp.to_json_string(indent=2))
if resp.SendStatusSet[0].Code == "Ok":
return True
except TencentCloudSDKException as err:
print(err)
方法二:
点击查看代码
import ssl
# ssl._create_default_https_context = ssl._create_unverified_context # SSL报错需解开
from qcloudsms_py import SmsMultiSender, SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
from django.conf import settings
def send_sms_single(phone_num, template_id, template_param_list):
"""
单条发送短信
:param phone_num: 手机号
:param template_id: 腾讯云短信模板ID
:param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
:return:
"""
appid = settings.TENCENT_SMS_APP_ID
appkey = settings.TENCENT_SMS_APP_KEY
sms_sign = settings.TENCENT_SMS_SIGN
sender = SmsSingleSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
except HTTPError as e:
response = {'result': 1000, 'errmsg': "网络异常发送失败"}
return response
def send_sms_multi(phone_num_list, template_id, param_list):
"""
批量发送短信
:param phone_num_list:手机号列表
:param template_id:腾讯云短信模板ID
:param param_list:短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
:return:
"""
appid = 112142311
appkey = "8cc5b87123y423423412387930004"
sms_sign = "Python之路"
sender = SmsMultiSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_num_list, template_id, param_list, sign=sms_sign)
except HTTPError as e:
response = {'result': 1000, 'errmsg': "网络异常发送失败"}
return response