TunnelHunt

Отладка платежных систем: Как ловить вебхуки от YooKassa, Т-Банка и Robokassa локально

Автор: Команда TunnelHuntОпубликовано: 7 сентября 2025 г.
Схема, показывающая, как вебхук от платежной системы проходит через TunnelHunt на локальный компьютер

Интеграция платежной системы — один из самых ответственных этапов в разработке любого e-commerce проекта. Важно не только корректно отправить пользователя на оплату, но и правильно обработать обратный вызов от сервиса: узнать про успешный платеж, возврат или отмену.

Этот механизм обратных вызовов работает через вебхуки (webhooks). И их отладка — настоящая головная боль.

В чем проблема?

Сервис вроде YooKassa, Т-Банка или Robokassa должен отправить HTTP-уведомление (вебхук) на ваш сервер, как только статус платежа изменится. Но как он найдет ваш localhost:8000, который работает на вашем ноутбуке за семью файрволами? Никак.

Обычно разработчики решают это так:

  1. Вносят мелкую правку в обработчик.
  2. Коммитят код.
  3. Запускают CI/CD пайплайн.
  4. Ждут 5-10 минут, пока код развернется на staging-сервере.
  5. Проводят тестовый платеж.
  6. Смотрят логи на стейджинге.
  7. Понимают, что ошиблись в одной строке, и повторяют цикл заново.

Звучит знакомо? К счастью, есть способ лучше. Элегантное решение — временный публичный HTTPS-адрес, который будет перенаправлять все запросы от платежной системы прямо на ваш локальный компьютер. И для этого нам понадобится только TunnelHunt.

Пошаговое руководство: Ловим вебхук от YooKassa

Давайте настроим все за пару минут на примере YooKassa. Принцип работы для Т-Банка, Robokassa и других сервисов будет абсолютно таким же.

Шаг 1: Пишем “ловушку” для вебхуков

Нам нужен простейший веб-сервер, который будет принимать POST-запросы и выводить их содержимое в консоль. Для этого идеально подойдет Python и Flask.

Создайте файл app.py:

# app.py
from flask import Flask, request, abort

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def payment_webhook():
    if request.is_json:
        # Получаем JSON из тела запроса
        json_data = request.get_json()
        
        # Выводим его в консоль для отладки
        print("🎉 Получен новый вебхук!")
        print(json_data)
        
        # Платежная система ждет от нас ответа 200 OK
        return 'OK', 200
    else:
        # Если пришел не JSON, что-то пошло не так
        return 'Bad Request', 400

if __name__ == '__main__':
    # Запускаем сервер на порту 5000
    app.run(port=5000, debug=True)

Установите Flask (pip install Flask) и запустите сервер:

python app.py

Ваш локальный обработчик запущен и ждет запросы на http://localhost:5000/webhook.

Шаг 2: Создаем туннель с помощью TunnelHunt

Теперь сделаем наш локальный сервер доступным из интернета. Откройте новый терминал и выполните одну команду:

ssh -R 80:localhost:5000 -p 2222 nokey@tunnelhunt.ru```
- `localhost:5000`  это адрес нашего локального Flask-приложения.

В ответ вы получите публичный URL, например: `https://funky-dog-123.tunnelhunt.ru`. **Не закрывайте этот терминал!** Пока он открыт, туннель работает.

#### Шаг 3: Настраиваем вебхуки в платежной системе

1.  Зайдите в личный кабинет вашего платежного сервиса (YooKassa, Т-Банк, Robokassa).
2.  Найдите раздел для разработчиков или настроек API, обычно он называется `Вебхуки`, `Уведомления` или `Webhooks`.
3.  В поле для URL вставьте адрес, который вам выдал TunnelHunt, и добавьте путь к обработчику: `https://funky-dog-123.tunnelhunt.ru/webhook`.
4.  Отметьте события, которые хотите получать, например, `payment.succeeded`.
5.  Сохраните. Сервис может отправить тестовый запрос, чтобы проверить доступность URL.

#### Шаг 4: Тестируем!

Проведите тестовый платеж через вашу интеграцию. Как только статус платежа изменится, сервис отправит уведомление на ваш публичный URL. TunnelHunt перенаправит его на ваш локальный Flask-сервер.

В терминале, где запущен `app.py`, вы мгновенно увидите тело вебхука:

🎉 Получен новый вебхук! { “type”: “notification”, “event”: “payment.succeeded”, “object”: { “id”: “2a0d81e0-000f-5000-9000-104d2e7212d8”, “status”: “succeeded”, “amount”: { “value”: “100.00”, “currency”: “RUB” }, … } }

Победа! Вы получили реальный вебхук от платежной системы на свой локальный компьютер и можете отлаживать логику его обработки в реальном времени, без долгого ожидания деплоя.

### Важное замечание о безопасности

В реальном проекте **обязательно** проверяйте IP-адрес источника запроса и его криптографическую подпись, чтобы убедиться, что вебхук пришел именно от платежной системы, а не от злоумышленника. Этот пример намеренно упрощен для демонстрации самого процесса.

### Заключение

Больше не нужно после каждой мелкой правки деплоить код на staging-сервер. С TunnelHunt вы можете отлаживать вебхуки от **YooKassa**, **Т-Банка**, **Robokassa** и любых других сервисов так же легко, как обычный код — с брейкпоинтами, логами и мгновенной обратной связью.