This commit is contained in:
eric
2026-03-13 05:15:00 -05:00
parent 90378502cf
commit 53cacfac46
24 changed files with 1059 additions and 141 deletions

View File

@@ -5,6 +5,8 @@ XorPay 支付渠道实现
import hashlib
from typing import Any, Dict, Optional
import requests
from .base import PaymentProvider
@@ -24,6 +26,10 @@ class XorPayProvider(PaymentProvider):
raw = name + pay_type + price + order_id + notify_url + self.secret
return hashlib.md5(raw.encode("utf-8")).hexdigest().lower()
def _query2_sign(self, order_id: str) -> str:
raw = order_id + self.secret
return hashlib.md5(raw.encode("utf-8")).hexdigest().lower()
def create_order(
self,
*,
@@ -80,3 +86,23 @@ class XorPayProvider(PaymentProvider):
def success_response(self) -> str:
return "ok"
def query_order_status(self, order_id: str, timeout: int = 10) -> Dict[str, Any]:
url = f"https://xorpay.com/api/query2/{self.aid}"
params = {
"order_id": order_id,
"sign": self._query2_sign(order_id),
}
try:
response = requests.get(url, params=params, timeout=timeout)
response.raise_for_status()
data = response.json() or {}
status = str(data.get("status", "")).strip().lower()
return {
"paid": status in ("payed", "success"),
"status": status,
"pay_price": data.get("pay_price") or data.get("price") or "",
"raw": data,
}
except Exception as error:
return {"paid": False, "error": str(error)}