the photo from unsplash
寫在前面
??現(xiàn)在很多網(wǎng)站或者是手機APP在注冊的時候都會讓你使用手機號來驗證身份,然后要實現(xiàn)驗證碼功能,這里呢就使用Python來實現(xiàn)功能。
前置條件
- 操作系統(tǒng):Windows10
- Python == 3.6.8
- 短信服務平臺: 騰訊云個人用戶
開始操作
??我們使用的是騰訊云提供的短信服務,在使用之前你需要開通服務。騰訊云為個人服務商提供了100條/月的免費額度,個人學習是完全足夠的了。然后呢我們在開始的時候使用騰訊云提供的SDK,所以在使用之前安裝一下SDK:
pip install qcloudsms_py
然后關(guān)于基礎的操作,我們可以先看一下騰訊云的文檔,然后這一篇文章將會詳細的寫一下配合騰訊云平臺的一些關(guān)鍵操作。
當你安裝好SDK的時候并不意味著你可以開始做你的程序了,你還需要添加應用
添加應用
你需要在你的短信服務頁面創(chuàng)建屬于你的應用就像是這樣:
創(chuàng)建應用
然后你可以看到你的應用正在運行,我們可以點進去看一下。

應用詳情
然后這個時候我們可以看到發(fā)送短信的最關(guān)鍵兩個信息了:appid,appkey,這些都是很秘密的關(guān)鍵信息,不要告訴別人哦。當你拿到這兩個信息的時候我們還是不能寫代碼,我們還需要申請模板和簽名
申請簽名和模板
申請模板

申請模板和簽名
點擊短信內(nèi)容配置然后會出現(xiàn)

短信簽名和短信正文
點擊創(chuàng)建簽名會出現(xiàn)申請需要填的信息:

關(guān)鍵信息
申請短信正文

正文信息
然后這里需要注意的有短信內(nèi)容需要你寫好,然后呢{1}這些是占位符,在后面可以填入你的信息,其實就像是Python里面格式化字符串的時候使用{}站位一個道理,都是敲代碼的我想應該是能夠懂的。然后就等審核通過,騰訊云的審核是比較快的。
當你的審核都通過的時候,你可以開始實現(xiàn)功能了。然后騰訊云提供了兩種方式,一是使用API接口,二是使用SDK。我們這里使用SDK,不然前面安裝干嘛。
代碼實現(xiàn)
我在這里實現(xiàn)了一個Captcha的類,類的第一個方法是生成6位數(shù)的隨機驗證碼:
def create_captcha(self, ):
"""
create and return captcha
:param self:
:return: A six-digit verification code
"""
captcha = ''
for i in range(6):
now_number = str(random.randint(0, 9))
captcha += now_number
return captcha
這個方法比較簡單,然后其實就是使用隨機函數(shù)而已。
類的第二個方法實現(xiàn)創(chuàng)建一個可以發(fā)送短信的對象,這里就會使用到你的appid和appkey:
def create_ssender(self, ):
"""
create ssender object
:return: a ssender object
"""
appid = ******
appkey = '******'
ssender = SmsSingleSender(appid, appkey)
return ssender
類的第三個方法就實現(xiàn)了發(fā)送短信的功能:
def send_short_message(self, phone_number):
"""
Send Verification Code Short Message
:param phone_number:Short Message Receiving Number
:return: a status code
"""
ssender = self.create_ssender()
params = []
captcha = self.create_captcha()
defult_time = "2"
params.append(captcha)
params.append(defult_time)
template_id = ******
sms_sign = '******'
try:
result = ssender.send_with_param(86,
phone_number,
template_id,
params,
sign=sms_sign,
extend="",
ext="")
return result['result']
except HTTPError as e:
print(e)
except Exception as e:
print(e)
這里呢你需要使用到你申請的簽名和模板,params是一個消息列表,你的短信模板里面有幾個占位符你就需要寫幾個參數(shù)對應起來,如果沒有站位也需要創(chuàng)建一個空列表。然后使用方法發(fā)送就好,返回的是一個列表,然后我們返回狀態(tài)值方便后面做處理。
完整代碼:
import random
from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
class Captcha():
def create_captcha(self, ):
"""
create and return captcha
:param self:
:return: A six-digit verification code
"""
captcha = ''
for i in range(6):
now_number = str(random.randint(0, 9))
captcha += now_number
return captcha
def create_ssender(self, ):
"""
create ssender object
:return: a ssender object
"""
appid = ******
appkey = '******'
ssender = SmsSingleSender(appid, appkey)
return ssender
def send_short_message(self, phone_number):
"""
Send Verification Code Short Message
:param phone_number:Short Message Receiving Number
:return: a status code
"""
ssender = self.create_ssender()
params = []
captcha = self.create_captcha()
defult_time = "2"
params.append(captcha)
params.append(defult_time)
template_id = ******
sms_sign = '******'
try:
result = ssender.send_with_param(86,
phone_number,
template_id,
params,
sign=sms_sign,
extend="",
ext="")
return result['result']
except HTTPError as e:
print(e)
except Exception as e:
print(e)
寫在后面
其實還是很簡單那,如果有錯歡迎指出。
大概效果

收到的短信樣子