Python实现短信验证码功能

the photo from unsplash

写在前面

  现在很多网站或者是手机APP在注册的时候都会让你使用手机号来验证身份,然后要实现验证码功能,这里呢就使用Python来实现功能。

前置条件

  • 操作系统:Windows10
  • Python == 3.6.8
  • 短信服务平台: 腾讯云个人用户

开始操作

  我们使用的是腾讯云提供的短信服务,在使用之前你需要开通服务。腾讯云为个人服务商提供了100条/月的免费额度,个人学习是完全足够的了。然后呢我们在开始的时候使用腾讯云提供的SDK,所以在使用之前安装一下SDK:

pip install qcloudsms_py

然后关于基础的操作,我们可以先看一下腾讯云的文档,然后这一篇文章将会详细的写一下配合腾讯云平台的一些关键操作
当你安装好SDK的时候并不意味着你可以开始做你的程序了,你还需要添加应用

添加应用

你需要在你的短信服务页面创建属于你的应用就像是这样:
创建应用

然后你可以看到你的应用正在运行,我们可以点进去看一下。

应用详情

然后这个时候我们可以看到发送短信的最关键两个信息了:appidappkey,这些都是很秘密的关键信息,不要告诉别人哦。当你拿到这两个信息的时候我们还是不能写代码,我们还需要申请模板和签名

申请签名和模板

申请模板

申请模板和签名

点击短信内容配置然后会出现
短信签名和短信正文

点击创建签名会出现申请需要填的信息:
关键信息
,大家根据实际填写和上传相关凭证就好,然后我是写的网站,我在腾讯云有接备案的所以比较方便。
申请短信正文
正文信息

然后这里需要注意的有短信内容需要你写好,然后呢{1}这些是占位符,在后面可以填入你的信息,其实就像是Python里面格式化字符串的时候使用{}站位一个道理,都是敲代码的我想应该是能够懂的。然后就等审核通过,腾讯云的审核是比较快的。
当你的审核都通过的时候,你可以开始实现功能了。然后腾讯云提供了两种方式,一是使用API接口,二是使用SDK。我们这里使用SDK,不然前面安装干嘛。

代码实现

我在这里实现了一个Captcha的类,类的第一个方法是生成6位数的随机验证码:

 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

这个方法比较简单,然后其实就是使用随机函数而已。
类的第二个方法实现创建一个可以发送短信的对象,这里就会使用到你的appid和appkey:

 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)

这里呢你需要使用到你申请的签名和模板,params是一个消息列表,你的短信模板里面有几个占位符你就需要写几个参数对应起来,如果没有站位也需要创建一个空列表。然后使用方法发送就好,返回的是一个列表,然后我们返回状态值方便后面做处理。

完整代码:

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)

写在后面

其实还是很简单那,如果有错欢迎指出。

大概效果

收到的短信样子
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,652评论 0 15
  • 一、iOS 直播聊天室 Demo 说明 1、源码结构 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦阅读 2,808评论 2 7
  • 我出生时正赶上国家计划生育,于是不可避免的被送去外婆家生活了三年,外婆完整的把少年时缺少的爱一分不少的都弥补上,让...
    礼礼阅读 306评论 0 0
  • 这漆黑的安静 本该伴随着一个孤独的心 可我,却似烈火灼烧 那样的跳跃 你说,人能活多久才算久 有多少钱才算富有 有...
    林飞鸿阅读 264评论 0 0
  • 画画的杜杜阅读 275评论 1 1