first commit
This commit is contained in:
63
WebAdmin/aliyun_sms.py
Executable file
63
WebAdmin/aliyun_sms.py
Executable file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import json
|
||||
import hashlib
|
||||
import hmac
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client
|
||||
from alibabacloud_tea_openapi import models as open_api_models
|
||||
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
|
||||
from alibabacloud_tea_util import models as util_models
|
||||
from alibabacloud_tea_util.client import Client as UtilClient
|
||||
from django.utils.crypto import get_random_string
|
||||
|
||||
from WebSite import settings
|
||||
from .models import SMSVerificationCode
|
||||
|
||||
def create_client() -> Dysmsapi20170525Client:
|
||||
config = open_api_models.Config(
|
||||
access_key_id=settings.ALIBABA_CLOUD_ACCESS_KEY_ID,
|
||||
access_key_secret=settings.ALIBABA_CLOUD_ACCESS_KEY_SECRET
|
||||
)
|
||||
config.endpoint = 'dysmsapi.aliyuncs.com'
|
||||
return Dysmsapi20170525Client(config)
|
||||
|
||||
def send_verification_sms(phone_number: str, sign_name: str, template_code: str) -> dict:
|
||||
client = create_client()
|
||||
code = get_random_string(length=6, allowed_chars='0123456789')
|
||||
template_param = json.dumps({"code": code})
|
||||
|
||||
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
|
||||
phone_numbers=phone_number,
|
||||
sign_name=sign_name,
|
||||
template_code=template_code,
|
||||
template_param=template_param
|
||||
)
|
||||
runtime = util_models.RuntimeOptions()
|
||||
try:
|
||||
response = client.send_sms_with_options(send_sms_request, runtime)
|
||||
response_data = response.body.to_map()
|
||||
|
||||
if response_data.get("Code") == "OK":
|
||||
SMSVerificationCode.objects.create(phone_number=phone_number, code=code, created_at=datetime.now())
|
||||
return {'code': 200, 'message': '验证码发送成功'}
|
||||
else:
|
||||
return {'code': 400, 'message': f'发送短信失败: {response_data.get("Message")}'}
|
||||
except Exception as error:
|
||||
return {'code': 500, 'message': f'发送短信异常: {str(error)}'}
|
||||
|
||||
def verify_sms_code(phone_number: str, code: str) -> dict:
|
||||
try:
|
||||
sms_code = SMSVerificationCode.objects.filter(phone_number=phone_number, code=code, is_used=False).latest('created_at')
|
||||
if sms_code is None:
|
||||
return {'code': 400, 'message': '请先获取验证码'}
|
||||
|
||||
if sms_code.created_at < datetime.now() - timedelta(minutes=5):
|
||||
return {'code': 400, 'message': '验证码已过期'}
|
||||
|
||||
sms_code.is_used = True
|
||||
sms_code.save()
|
||||
return {'code': 200, 'message': '验证码验证成功'}
|
||||
except SMSVerificationCode.DoesNotExist:
|
||||
return {'code': 400, 'message': '验证码无效或已过期'}
|
||||
Reference in New Issue
Block a user