腾讯云发送短信
由于项目在注册、登录、找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做。
为什么要用腾讯云短信呢? 因为注册就送 100条免费短信 的额度。哈哈哈哈,发短信的功能你就不用花钱了。
1.注册腾讯云 & 开通云短信
1.1 注册并认证
注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器、云存储你、云直播、云短信等很多功能。
注册地址:https://cloud.tencent.com/
根据提示一步步进行注册即可,例如:
实名注册时,什么行业、通讯等信息,按照自己的的实际情况填写即可,实在不知道的可以随便填。
1.2 开通云短信
腾讯云注册成功之后,登录腾讯云并去开通 云短信服务,开通短信服务后才能发短信。
开通地址:https://console.cloud.tencent.com/smsv2
根据流程进行开通之后,就可以进入云短信控制台。
2. 创建应用
创建应用并将应用中生成的 SDK AppID
和 App Key
复制下来,之后通过python发送短信时需要用到。
3. 创建签名
在腾讯云短信签名时需要认证,认证需要填写签名类型:网站、APP、小程序、公众号,前三种需要提供企业资质等复杂的东西,个人公众号认证会比较便捷,所以推荐个人开发的话使用 公众号 进行签名。
so,咱们需要先 申请一个公众号
然后 创建签名
。
3.1 申请微信订阅号
注册地址:https://mp.weixin.qq.com/
3.2 创建签名
根据自己的需求选择 国内短信/国际短信 中的签名管理,进行创建签名。
切记:签名类型选择 公众号 ,并根据提示上传相关数据即可。
签名创建并审核通过后,把你提交的 签名内容
值保存下来,之后Python发送短信用。
提醒:签名创建完成之后,需要等待腾讯进行审核,也可以联系他们客服QQ加速审核。
4. 创建模板
根据自己需求创建短信模板,以后根据模板进行发送短信,例如:您的注册验证码:{1},如非本人操作,请忽略本短信!
模板创建并审核通过之后,把 模板ID
保存下来,之后Python发送短信用。
5. 发送短信
上述的准备工作做完中我们开通相关服务并获取到如下几个值:
- 创建应用,获取到
appid
和appkey
- 创建签名,获取
签名内容
- 创建模板,获取
模板ID
接下来开始使用Python发送短信。
第一步:安装SDK
pip install qcloudsms_py
第二步:基于SDK发送短信
from qcloudsms_py import SmsMultiSender, SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
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 = 112142311 # 自己应用ID
appkey = "8cc5b87123y423423412387930004" # 自己应用Key
sms_sign = "Python之路" # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
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
if __name__ == '__main__':
result1 = send_sms_single("15131255089", 548760, [666, ])
print(result1)
result2 = send_sms_single( ["15131255089", "15131255089", "15131255089", ],548760, [999, ])
print(result2)
6. 关于频率限制
腾讯云短信后台可以进行 短信频率 的限制。
但是,由于我们是免费用户所以无法进行设置,只能使用默认的配置(30秒发1条/1小时发5条/1天发10条)。