Вебхуки (эквайринг)

Т-Банк отправляет уведомления о платежах POST-запросом на NotificationURL. Обработчик должен проверить подпись и вернуть HTTP 200 с телом ровно OK.

Разбор и проверка

from tbank.acquiring.webhooks import parse_notification, verify_notification

async def handler(request):
    data = await request.json()

    if not verify_notification(data, password="password123"):
        return  # подпись не сошлась — отклоняем

    note = parse_notification(data)          # типизированная модель
    if note.status is PaymentStatus.CONFIRMED:
        ...                                  # платёж подтверждён
        # для рекуррента сохраните note.rebill_id
    return "OK"
  • verify_notification(data, password) — проверяет Token тем же алгоритмом SHA-256, что и подпись запросов (см. Аутентификация).

  • parse_notification(data)PaymentNotification (terminal_key, order_id, success, status, payment_id, amount, card_id, pan, rebill_id, …).

Совет

Для родительского рекуррентного платежа RebillId приходит именно в вебхуке на статус AUTHORIZED — сохраните его для последующих charge(...).

Справочник

class tbank.acquiring.webhooks.PaymentNotification(*, TerminalKey, OrderId, Success, Status, PaymentId, ErrorCode, Amount=None, CardId=None, Pan=None, ExpDate=None, RebillId=None, Token)[исходный код]

Базовые классы: TBankModel

Параметры:
model_config = {'alias_generator': <function to_pascal>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

tbank.acquiring.webhooks.parse_notification(data)[исходный код]

Разобрать входящую нотификацию эквайринга в типизированную модель.

Параметры:

data (Dict[str, Any])

Тип результата:

PaymentNotification

tbank.acquiring.webhooks.verify_notification(data, password)[исходный код]

Проверить подпись нотификации (тот же алгоритм Token по корневым полям).

Параметры:
Тип результата:

bool