Python實現(xiàn)短信驗證碼功能

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)鍵信息
,大家根據(jù)實際填寫和上傳相關(guān)憑證就好,然后我是寫的網(wǎng)站,我在騰訊云有接備案的所以比較方便。
申請短信正文
正文信息

然后這里需要注意的有短信內(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)

寫在后面

其實還是很簡單那,如果有錯歡迎指出。

大概效果

收到的短信樣子
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,492評論 0 15
  • 一、iOS 直播聊天室 Demo 說明 1、源碼結(jié)構(gòu) 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦閱讀 2,994評論 2 7
  • 我出生時正趕上國家計劃生育,于是不可避免的被送去外婆家生活了三年,外婆完整的把少年時缺少的愛一分不少的都彌補上,讓...
    禮禮閱讀 349評論 0 0
  • 這漆黑的安靜 本該伴隨著一個孤獨的心 可我,卻似烈火灼燒 那樣的跳躍 你說,人能活多久才算久 有多少錢才算富有 有...
    林飛鴻閱讀 282評論 0 0
  • 畫畫的杜杜閱讀 289評論 1 1

友情鏈接更多精彩內(nèi)容