由於項目在註冊、登錄、找回密碼 時需要發送短信驗證的功能,我們使用騰訊雲短信做。
爲什麼要用騰訊雲短信呢? 因爲註冊就送 100條免費短信 的額度。哈哈哈哈,發短信的功能你就不用花錢了。
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發送短信
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
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條)。