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

Интеграция платежной системы — один из самых ответственных этапов в разработке любого e-commerce проекта. Важно не только корректно отправить пользователя на оплату, но и правильно обработать обратный вызов от сервиса: узнать про успешный платеж, возврат или отмену.
Этот механизм обратных вызовов работает через вебхуки (webhooks). И их отладка — настоящая головная боль.
В чем проблема?
Сервис вроде YooKassa, Т-Банка или Robokassa должен отправить HTTP-уведомление (вебхук) на ваш сервер, как только статус платежа изменится. Но как он найдет ваш localhost:8000
, который работает на вашем ноутбуке за семью файрволами? Никак.
Обычно разработчики решают это так:
- Вносят мелкую правку в обработчик.
- Коммитят код.
- Запускают CI/CD пайплайн.
- Ждут 5-10 минут, пока код развернется на staging-сервере.
- Проводят тестовый платеж.
- Смотрят логи на стейджинге.
- Понимают, что ошиблись в одной строке, и повторяют цикл заново.
Звучит знакомо? К счастью, есть способ лучше. Элегантное решение — временный публичный 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** и любых других сервисов так же легко, как обычный код — с брейкпоинтами, логами и мгновенной обратной связью.