Исходный код tbank.acquiring.webhooks
from __future__ import annotations
from typing import Any, Dict, Optional
from tbank.acquiring.enums import PaymentStatus
from tbank.acquiring.signing import build_token
from tbank.core.models import Kopecks, TBankModel
[документация]
class PaymentNotification(TBankModel):
terminal_key: str
order_id: str
success: bool
status: PaymentStatus
payment_id: int
error_code: str
amount: Optional[Kopecks] = None
card_id: Optional[int] = None
pan: Optional[str] = None
exp_date: Optional[str] = None
rebill_id: Optional[int] = None
token: str
[документация]
def parse_notification(data: Dict[str, Any]) -> PaymentNotification:
"""Разобрать входящую нотификацию эквайринга в типизированную модель."""
return PaymentNotification.model_validate(data)
[документация]
def verify_notification(data: Dict[str, Any], password: str) -> bool:
"""Проверить подпись нотификации (тот же алгоритм Token по корневым полям)."""
received = str(data.get("Token", ""))
expected = build_token(data, password)
return bool(received) and received == expected