86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
|
|
"""
|
|||
|
|
支付模块 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_string(APP 调起支付所需)
|
|||
|
|
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
|