geo/backend/app/services/payment/base.py

41 lines
893 B
Python

from abc import ABC, abstractmethod
from typing import Optional
from pydantic import BaseModel
class PaymentOrder(BaseModel):
order_id: str
pay_url: str
amount: float
currency: str = "CNY"
status: str = "pending"
class PaymentCallback(BaseModel):
order_id: str
payment_id: str
amount: float
status: str
raw_data: dict = {}
class PaymentGateway(ABC):
@abstractmethod
async def create_order(
self, order_id: str, amount: float, description: str, user_id: str, plan: str
) -> PaymentOrder:
pass
@abstractmethod
async def verify_callback(self, request_data: dict) -> PaymentCallback:
pass
@abstractmethod
async def query_order(self, order_id: str) -> PaymentOrder:
pass
@abstractmethod
async def refund(self, order_id: str, amount: float, reason: str = "") -> bool:
pass