腾讯云短信的使用

公共配置:


# ######## 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

视图函数中调用

 # 生成随机验证码短信发送
        import random
        random_code = random.randint(1000, 9999)
        print('短信验证码为:', random_code)

        # result = sms_code(phone, random_code)  # 方法一
        # result = send_sms_single(phone, settings.TENCENT_SMS_TEMPLATE['login'], [random_code, ])    # 方法二
        # if not result:
        #     return Response({'status': False, 'message': '短信发送失败'})
posted @ 2022-10-24 21:03  凫弥  阅读(225)  评论(0编辑  收藏  举报