import random from fastapi import HTTPException from config import aliyun_sms_settings def generate_sms_code() -> str: """生成6位数字验证码""" return str(random.randint(100000, 999999)) async def send_sms_code(phone: str, code: str) -> bool: """通过阿里云发送短信验证码""" try: from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest client = AcsClient( aliyun_sms_settings.access_key, aliyun_sms_settings.access_secret, "cn-hangzhou", ) request = CommonRequest() request.set_accept_format("json") request.set_domain("dysmsapi.aliyuncs.com") request.set_method("POST") request.set_version("2017-05-25") request.set_action_name("SendSms") request.add_query_param("PhoneNumbers", phone) request.add_query_param("SignName", aliyun_sms_settings.sign_name) request.add_query_param("TemplateCode", aliyun_sms_settings.template_code) request.add_query_param("TemplateParam", f'{{"code":"{code}"}}') response = client.do_action_with_exception(request) return True except Exception as e: raise HTTPException( status_code=500, detail="短信发送失败,请稍后重试", )