使用第三方短信平台进行短信验证码验证 - 王大拿

时间:2024-03-01 07:37:02

使用第三方短信平台进行短信验证码验证

使用第三方短信平台进行短信验证码验证

使用的是秒滴短信  

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