python实现短信验证码功能(腾讯云)

华安9527 测试开发学习交流 2023-05-17 12:10 发表于浙江

                                    

图片

前言

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


图片

前置条件


操作系统:MACPython == 3.6.2短信服务平台:腾讯云个人用户

图片

操作

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

依赖:pip3 install qcloudsms_py



图片


然后关于基础的操作,我们可以先看一下腾讯云的文档,然后这一篇文章将会详细的写一下配合腾讯云平台的一些关键操作。

当你安装好SDK的时候并不意味着你可以开始做你的程序了,你还需要添加应用‍


图片

添加应用

你需要在你的短信服务页面创建属于你的应用就像是这样:(自己去腾讯云上尝试吧,微信过滤了不上上传那个页面的图片,头很大啊),之后可以看到你的应用正在运行,我们可以点进去看一下。

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

申请签名和模板

申请模板

国内短信--短信内容配置,点击短信内容配置然后会出现“创建签名”,大家根据实际填写和上传相关凭证就好。

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

然后这里需要注意的有短信内容需要你写好,然后呢{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 randomfrom qcloudsms_py import SmsSingleSenderfrom 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)

图片
 

END

 
图片
图片

点击公众号

图片

关注更多精彩文章

图片

收录于合集 #python
 20
下一篇python :使用OpenCV从读取到人脸检测

微信扫一扫
关注该公众号