使用第三方短信平台进行短信验证码验证
使用第三方短信平台进行短信验证码验证
使用的是秒滴短信
python3.6
sms.pimport http.client, hashlib, datetime, time, json, ssl # 加载模
from urllib import parse # 发送行业短信 def sendIndustrySms(tos, smsContent): # 定义账号和密码,开户之后可以从用户中心得到这两个值 ACCOUNT_SID = '**********' AUTH_TOKEN = '**********' # 定义地址,端口等 serverHost = "api.miaodiyun.com" serverPort = 443 industryUrl = "/20150822/industrySMS/sendSMS" # 格式化时间戳,并计算签名 timeStamp = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d%H%M%S') rawsig = (ACCOUNT_SID + AUTH_TOKEN + timeStamp).encode('utf8') m = hashlib.md5() m.update(rawsig) sig = m.hexdigest() # 定义需要进行发送的数据表单 params = parse.urlencode({'accountSid': ACCOUNT_SID, 'smsContent': smsContent, 'to': tos, 'timestamp': timeStamp, 'sig': sig}) # 定义header headers = {"Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json"} # 与构建https连接 conn = http.client.HTTPSConnection(serverHost, serverPort) # Post数据 conn.request(method="POST", url=industryUrl, body=params, headers=headers) # 返回处理后的数据 response = conn.getresponse() # 读取返回数据 jsondata = response.read().decode('utf-8') # 打印完整的返回数据 print(jsondata) # 解析json,获取特定的几个字段 jsonObj = json.loads(jsondata) respCode = jsonObj['respCode'] print("错误码:", respCode) respDesc = jsonObj['respDesc'] print("错误码:", respCode) # 关闭连接 conn.close() # # tos可以是一个或者多个号码,若是多个号码,以英文逗号分开 # tos = '18601553333' # # 短信内容 # smsContent = "尊敬的用户,你正在试用短信验证方式登陆万维主页,您的验证码为{1},请于{2}分钟内正确输入,如非本人操作,请忽略此短信。".format('','123456',1) #这里的格式一定要跟
创建的模版一致
创建的模版一致 # # 提交短信 # # sendIndustrySms(tos, smsContent)


生成验证码的函数
import re import time import random import redis from ticket_audit import settings redis_obj = redis.Redis(host=settings.REDIS_HOST,port=settings.REDIS_PORT) from common.tools.xd_errors import ParamError,ErrorCode from accounts.models import User def create_ver_code(phone): """ 用于创建验证码 :param phone: :return: """ normalize_phone(phone) user_obj = User.objects.filter(phone=phone) if not user_obj: raise ParamError('用户不存在', ErrorCode.EEEE) verification_code = '' for i in range(6): verification_code += str(random.randint(0,9)) redis_obj.set(phone,verification_code,ex=60) smsContent = "【】尊敬的用户,你正在试用短信验证方式登陆万维主页,您的验证码为{1},请于{2}分钟内正确输入,如非本人操作,请忽略此短信。".format('', verification_code, 1) return smsContent, phone
检查验证码是否正确
def check_ver_code(phone,ver_code): """ 检查验证码是否正确 :param phone: :param ver_code: :return: """ user_obj = User.objects.filter(phone=phone) if not user_obj: raise ParamError('用户不存在', ErrorCode.EEEE) verification_code = redis_obj.get(phone) try: int(ver_code) except Exception: raise ParamError('验证码有误,请重新输入', ErrorCode.EEEE) if not verification_code: print('第一阶段???') raise ParamError('验证码失效,请重新获取', ErrorCode.EEEE) if int(verification_code) != int(ver_code): print('第儿阶段???') raise ParamError('验证码有误,请重新获取', ErrorCode.EEEE) print('验证成功????') return user_obj
浙公网安备 33010602011771号