Python实现短信验证码功能

作者: Yznx_请叫我小哥 | 来源:发表于2019-05-12 23:16 被阅读417次
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)

写在后面

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

相关文章

  • 短信API实现自动化短信发送

    短信验证码接口示例,如何接入短信API接口实现短信自动发送功能; 网站如何实现自动发送短信验证码的功能,短信验证码...

  • 接入短信API,免费试用

    短信验证码接口示例,如何接入短信API接口实现短信自动发送功能; 网站如何实现自动发送短信验证码的功能,短信验证码...

  • Django-实现图形验证码、短信验证码功能(二)

    接上文:Django-实现图形验证码、短信验证码功能(一) 短信验证码后端发送实现 在settings中添加red...

  • Python实现短信验证码功能

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

  • 阿里云验证码发送

    实现阿里云的短信验证码服务实现的功能 1.开通阿里云短信服务 添加签名和模板 下面写代码来实现短信验证码的发送 c...

  • Android:从引导页到注册(四)

    (四)短信验证码 短信验证码基本上是每个App必备的一个功能了,所以说今天就来记录一下这个功能的实现,这里短信验证...

  • beego项目实战——短信验证码

    上一篇开发完成了图形验证码,这一篇来开发短信验证码功能短信验证码主要要实现两个功能一、接收图形验证码的id,用户填...

  • Android Studio Mob快速集成短信验证(图文教程)

    前言: 现在APP应用都是需要通过手机获取短信验证码来注册应用或是实现其它功能 。而利用短信验证码来注册会员,大大...

  • Python 学习笔记 044

    本节内容 发短信和发邮件 1.发短信 1.1 实现 调用互亿无线短信验证码接口,简单修改Python版Demo...

  • 生产力工具之云片短信平台-模板管理

    四步搞定短信验证码如何搞定短信验证码签名和模板如何使用云片API发送短信验证码Java实现短信验证码和国际短信群发...

网友评论

    本文标题:Python实现短信验证码功能

    本文链接:https://www.haomeiwen.com/subject/xzwhaqtx.html