使用腾讯云发送短信

使用腾讯云发送短信

第一次注册使用白送你200条,美滋滋python

在腾讯云平台申请

点点点操做就完事了,要想发送短信,必需要申请签名和模板。签名类型能够使用网站,公众号,小程序,appredis

填好信息,上传指定的截图凭据便可。网站建立签名须要上传域名备案里面的备案号等信息django

接下来须要建立短信内容模板,按照提示写就行。模板里面能够挖坑,接下来能够在坑里面填验证码,过时时间一类的小程序

还须要在应用管理中建立应用。系统会默认建立一个应用,也能够本身新建立。应用里的SDK AppID和 AppKey接下来程序里面会做为配置参数api

使用python SDK

https://cloud.tencent.com/document/product/382/11672缓存

上面是腾讯云sdk2.0的官方文档,3.0功能态度,2.0就足够好用了app

首先安装腾讯云sdk2.0的模块,使用虚拟环境的话注意检查一下有没有装上dom

pip install qcloudsms_py

准备必要参数函数

# 短信应用 SDK AppID
appid = 1400009099  # SDK AppID 以1400开头
# 短信应用 SDK AppKey
appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"
# 须要发送短信的手机号码,看需求来,做为参数传入下面的函数
phone_numbers = ["21212313123", "12345678902", "12345678903"] 
# 短信模板ID,须要在短信控制台中申请
template_id = 7839  # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 须要在短信控制台中申请
# 签名
sms_sign = "腾讯云"  # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名须要在短信控制台中申请

单发短信网站

from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
ssender = SmsSingleSender(appid, appkey)
params = ["5678","2"]  # 用来填进短信模板的坑,好比5678是验证码,2是失效时间
try:
    # phone_numbers是须要发送短信的手机号,按实际状况传参便可
    result = ssender.send_with_param(86, phone_numbers[0],
      template_id, params, sign=sms_sign, extend="", ext="") 
except HTTPError as e:
  print(e)
except Exception as e:
  print(e)
print(result)

注意单发和群发的方法不同,具体能够查看官方文档

在django项目中使用

咱们能够把像sdk发送短信这样的第三方功能放进libs里,把配置参数拉出来写在libs的settings里,便于管理和扩展

settings.py

导入到发送短信的功能文件,里面写配置参数

# settings.py
# 短信应用 SDK AppID
appid = 1400009099  # SDK AppID 以1400开头
# 短信应用 SDK AppKey
appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"
# 须要发送短信的手机号码,看需求来,做为参数传入下面的函数
phone_numbers = ["21212313123", "12345678902", "12345678903"] 
# 短信模板ID,须要在短信控制台中申请
template_id = 7839  # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 须要在短信控制台中申请
# 签名
sms_sign = "腾讯云"  # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名须要在短信控制台中申请

send_sms.py

# send_sms.py 放功能代码
from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
# 导入腾讯云的模块
from luffyapi.utils.logging import log
# 导入日志模块,短信发送失败的时候纪录
from . import settings
# 同级目录导入配置参数

# 生成随机4位验证码,在视图中调用
def rand_code():
    import random
    rd_code = ''
    for i in range(4):
        rd_code += str(random.randint(0,9))
    return rd_code

# 单发短信功能
def send_sms(phone,code):
    ssender = SmsSingleSender(settings.appid, settings.appkey)
    params = [code,"3"]  # 当模板没有参数时,`params = []`
    try:
        result = ssender.send_with_param(86, phone,
                                         settings.template_id, params, sign=settings.sms_sign, extend="", ext="")
        if result.get('result') == 0:
            return True
        else:
            return False
    except Exception as e:
        print(e)
        log.error(f'{phone}:短信发送失败,错误为{str(e)}')

视图函数中

class LoginView(ViewSet):
    # 发送短信验证码
    @action(methods=['GET'], detail=False)
    def send(self,request,*args,**kwargs):
        phone = request.query_params.get('phone')
        if not re.match('^1[3-9][0-9]{9}$',phone):
            return APIResponse(code=0,msg='手机号格式错误')
        code = send_sms.rand_code()
        result = send_sms.send_sms(phone,code)
        # 发送验证码
        # 验证码存进缓存,以后换成redis,缓存的key放在settings的const里
        cache.set(settings.PHONE_CACHE_KEY%phone,code,180)
        if result:
            return APIResponse(code=1,msg='发送成功')
        else:
            return APIResponse(code=0,msg='发送失败')
相关文章
相关标签/搜索