From 569c07ecc0b5f2564554f32d4e0c0898660e57a6 Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Thu, 29 Jan 2026 20:05:53 +0800 Subject: [PATCH] new --- main.py | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 1df5b30..01ee74e 100644 --- a/main.py +++ b/main.py @@ -15,10 +15,13 @@ from config import settings class SMSRequest(BaseModel): phone_number: str - code: str + code: Optional[str] = None template_code: Optional[str] = settings.sms_template_code sign_name: Optional[str] = settings.sms_sign_name + class Config: + extra = "allow" + import os @@ -838,8 +841,27 @@ def update_user(phone: str, user_update: UserUpdate, current_user: dict = Depend async def send_sms(sms_request: SMSRequest): """发送短信API""" sms = SMS() - print(f"Sending SMS with template_code: {sms_request.template_code}, sign_name: {sms_request.sign_name}") - result = sms.main(self=sms, phone_number=sms_request.phone_number, template_param=sms_request.code, template_code=sms_request.template_code, sign_name=sms_request.sign_name) + + # 获取所有参数 + request_data = sms_request.dict() + + # 提取固定参数 + phone_number = request_data.pop('phone_number') + template_code = request_data.pop('template_code') + sign_name = request_data.pop('sign_name') + + # 过滤掉值为 None 的参数,剩余的作为动态参数 + dynamic_params = {k: v for k, v in request_data.items() if v is not None} + + print(f"Sending SMS with template_code: {template_code}, sign_name: {sign_name}, params: {dynamic_params}") + + result = sms.main( + self=sms, + phone_number=phone_number, + template_code=template_code, + sign_name=sign_name, + **dynamic_params + ) # 保存发送记录到数据库 conn = pool.getconn() @@ -849,10 +871,20 @@ async def send_sms(sms_request: SMSRequest): biz_id = result.get('biz_id') if result else None error_message = result.get('error_message') if result else 'Unknown error' + # 将参数转换为字符串存储 + if dynamic_params: + # 如果只有 code 参数,为了保持兼容性,优先尝试只存 code 值(如果这是之前的习惯) + # 但考虑到现在支持多参数,存 JSON 更加通用。 + # 这里为了直观,如果有多个参数或没有 code,存 JSON。 + # 如果只有 code,也可以存 JSON,因为 sms.py 内部最终是转 JSON 发送的。 + saved_param = json.dumps(dynamic_params, ensure_ascii=False) + else: + saved_param = "" + cur.execute(""" INSERT INTO sms_records (phone_number, template_code, template_param, sign_name, status, biz_id, error_message) VALUES (%s, %s, %s, %s, %s, %s, %s) - """, (sms_request.phone_number, sms_request.template_code, sms_request.code, sms_request.sign_name, status, biz_id, error_message)) + """, (phone_number, template_code, saved_param, sign_name, status, biz_id, error_message)) conn.commit() except Exception as e: print(f"Error saving SMS record: {e}")