60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
"""
|
||
支付渠道抽象基类
|
||
定义统一的支付接口,便于切换不同支付渠道(XorPay、ZPAY 等)
|
||
"""
|
||
from abc import ABC, abstractmethod
|
||
from typing import Any, Dict, Optional
|
||
|
||
|
||
class PaymentProvider(ABC):
|
||
"""支付渠道抽象基类"""
|
||
|
||
@property
|
||
@abstractmethod
|
||
def name(self) -> str:
|
||
"""支付渠道名称"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def create_order(
|
||
self,
|
||
*,
|
||
order_id: str,
|
||
name: str,
|
||
total_fee_yuan: str,
|
||
pay_type: str,
|
||
notify_url: str,
|
||
return_url: Optional[str] = None,
|
||
client_ip: Optional[str] = None,
|
||
extra: Optional[Dict[str, Any]] = None,
|
||
) -> Dict[str, Any]:
|
||
"""
|
||
创建支付订单
|
||
:return: 包含支付跳转信息等,格式由各渠道自定义
|
||
"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def verify_notify(self, data: Dict[str, Any]) -> bool:
|
||
"""验证异步通知签名"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def parse_notify(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
||
"""
|
||
解析异步通知,提取统一字段
|
||
:return: {
|
||
"order_id": str, # 商户订单号
|
||
"trade_no": str, # 渠道订单号
|
||
"pay_price": str, # 实付金额(元)
|
||
"pay_time": str, # 支付时间
|
||
"trade_status": str, # 支付状态
|
||
}
|
||
"""
|
||
pass
|
||
|
||
@abstractmethod
|
||
def success_response(self) -> str:
|
||
"""异步通知成功时需返回的字符串(如 'ok' 或 'success')"""
|
||
pass
|