写在前面
现在很多网站或者是手机APP在注册的时候都会让你使用手机号来验证身份,然后要实现验证码功能,这里呢就使用Python来实现功能。
前置条件
- 操作系统:Windows10
- Python == 3.6.8
- 短信服务平台: 腾讯云个人用户
开始操作
我们使用的是腾讯云提供的短信服务,在使用之前你需要开通服务。腾讯云为个人服务商提供了100条/月的免费额度,个人学习是完全足够的了。然后呢我们在开始的时候使用腾讯云提供的SDK,所以在使用之前安装一下SDK:
pip install qcloudsms_py
然后关于基础的操作,我们可以先看一下腾讯云的文档,然后这一篇文章将会详细的写一下配合腾讯云平台的一些关键操作。
当你安装好SDK的时候并不意味着你可以开始做你的程序了,你还需要添加应用
添加应用
你需要在你的短信服务页面创建属于你的应用就像是这样:然后你可以看到你的应用正在运行,我们可以点进去看一下。
然后这个时候我们可以看到发送短信的最关键两个信息了:appid,appkey,这些都是很秘密的关键信息,不要告诉别人哦。当你拿到这两个信息的时候我们还是不能写代码,我们还需要申请模板和签名
申请签名和模板
申请模板
点击短信内容配置然后会出现
点击创建签名会出现申请需要填的信息:
申请短信正文
然后这里需要注意的有短信内容需要你写好,然后呢{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)
写在后面
其实还是很简单那,如果有错欢迎指出。