Files
life-echo/api/payment/schemas.py

86 lines
2.5 KiB
Python
Raw Normal View History

"""
支付模块 Pydantic 模型定义
"""
from pydantic import BaseModel
from typing import Optional, Dict, Any
class PaymentResult(BaseModel):
"""创建支付订单的返回结果"""
success: bool
payment_method: str # wechat / alipay
out_trade_no: str # 内部订单号
# 微信支付参数APP 调起支付所需)
wechat_params: Optional[Dict[str, str]] = None
# 支付宝 order_stringAPP 调起支付所需)
alipay_order_string: Optional[str] = None
error_message: Optional[str] = None
class NotifyResult(BaseModel):
"""支付回调通知处理结果"""
success: bool
out_trade_no: Optional[str] = None # 内部订单号
trade_no: Optional[str] = None # 第三方交易号
total_amount: Optional[int] = None # 金额(分)
trade_status: Optional[str] = None # 交易状态
error_message: Optional[str] = None
class PaymentStatus(BaseModel):
"""查询支付状态的返回结果"""
success: bool
out_trade_no: str
trade_no: Optional[str] = None
trade_status: str # SUCCESS / NOTPAY / CLOSED / REFUND / PAYERROR
total_amount: Optional[int] = None
error_message: Optional[str] = None
# === API 请求/响应模型 ===
class CreateOrderRequest(BaseModel):
"""创建订单请求"""
plan_id: str # 套餐 ID
payment_method: str # wechat / alipay
class CreateOrderResponse(BaseModel):
"""创建订单响应"""
order_id: str # 内部订单号
payment_method: str # 支付方式
# 微信支付调起参数
wechat_params: Optional[Dict[str, str]] = None
# 支付宝 order string
alipay_order_string: Optional[str] = None
class OrderStatusResponse(BaseModel):
"""订单状态查询响应"""
order_id: str
plan_id: str
plan_name: str
amount: int # 金额(分)
currency: str
payment_method: str
status: str # pending / paid / failed / cancelled / refunded
trade_no: Optional[str] = None
created_at: str
paid_at: Optional[str] = None
class OrderListResponse(BaseModel):
"""订单列表项"""
id: str
plan_id: str
plan_name: str
amount: int
currency: str
status: str
payment_method: str
created_at: str
paid_at: Optional[str] = None