使用第三方短信平台进行短信验证码验证
使用第三方短信平台进行短信验证码验证
使用的是秒滴短信
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