Настройка и отладка вебхуков Robokassa на локальном сервере
Пошаговая инструкция по приему и верификации платежных уведомлений Robokassa на локальном компьютере с помощью TunnelHunt. Пример MD5-подписи на Python.
Платежный сервис Robokassa отправляет оповещения о совершенных платежах на ваш сервер через так называемый Result URL (это обычный POST-вебхук). Чтобы ваш сайт мог автоматически обрабатывать платежи (выдавать товары, активировать подписки), этот обработчик должен быть протестирован во всех пограничных режимах.
Однако Robokassa требует, чтобы ваш Result URL был доступен из внешней сети. При попытке сохранить в настройках адрес вида http://localhost/ система выдаст ошибку. Решить эту проблему поможет TunnelHunt, который пробросит порт вашего локального компьютера в публичный интернет.
Шаг 1: Пишем обработчик Result URL с проверкой подписи (Python / Flask)
Каждое уведомление Robokassa содержит контрольную сумму подписи (SignatureValue). Она рассчитывается на основе полученной суммы, номера счета и вашего секретного Пароля №2 (Password 2).
[!TIP] Чтобы избежать конфликтов с портом
5000(занятым AirPlay Receiver в macOS Monterey+), мы настроим наше Flask-приложение на порт8000.
Создайте файл app.py:
# app.py
import hashlib
from flask import Flask, request, abort
app = Flask(__name__)
# Пароль №2 из личного кабинета Robokassa (технические настройки магазина)
ROBO_PASSWORD_2 = "your_robokassa_password_2"
def verify_robokassa_signature(out_sum, inv_id, password_2, received_signature):
# В простейшем случае строка подписи для Result URL: OutSum:InvId:Password2
# Если вы передаете дополнительные Shp_ параметры, их нужно дописывать в конец по алфавиту
signature_base = f"{out_sum}:{inv_id}:{password_2}"
# Вычисляем MD5 (или SHA-256 в зависимости от настроек вашего магазина)
calculated_signature = hashlib.md5(signature_base.encode('utf-8')).hexdigest().upper()
return calculated_signature == received_signature.upper()
@app.route('/webhook/robokassa', methods=['POST'])
def robokassa_webhook():
# Robokassa отправляет уведомление методом POST как x-www-form-urlencoded
out_sum = request.form.get('OutSum')
inv_id = request.form.get('InvId')
signature = request.form.get('SignatureValue')
if not all([out_sum, inv_id, signature]):
return 'Missing parameters', 400
# Проверяем подпись
if not verify_robokassa_signature(out_sum, inv_id, ROBO_PASSWORD_2, signature):
print("🚨 Ошибка: Неверная цифровая подпись Robokassa!")
abort(403)
print("🎉 Платеж подтвержден!")
print(f"ID счета: {inv_id}, Сумма: {out_sum} руб.")
# Robokassa требует вернуть в качестве успешного ответа строку "OK" + номер счета
return f"OK{inv_id}", 200
if __name__ == '__main__':
app.run(port=8000, debug=True)
Запустите сервер Flask:
pip install Flask
python app.py
Слушатель готов и ждет запросы на http://localhost:8000/webhook/robokassa.
Шаг 2: Создаем туннель TunnelHunt
Теперь сделаем наш обработчик доступным для серверов Robokassa. В новом терминале запустите команду туннелирования:
ssh -R 80:localhost:8000 -p 2222 tunnelhunt.ru
Вы получите временный HTTPS-адрес, например:
https://happy-dog-789.tunnelhunt.ru
Теперь любой запрос на https://happy-dog-789.tunnelhunt.ru/webhook/robokassa попадет прямиком на ваш локальный порт 8000.
Шаг 3: Настраиваем личный кабинет Robokassa
Укажем Robokassa адрес нашего туннеля:
- Перейдите в Личный кабинет Robokassa.
- Откройте Мои магазины → Настройки магазина → вкладка Технические настройки.
- В поле Result URL вставьте адрес, сгенерированный TunnelHunt, добавив путь
/webhook/robokassa:https://happy-dog-789.tunnelhunt.ru/webhook/robokassa - В качестве метода отсылки выберите POST.
- Задайте Пароль №2 (он должен совпадать с
ROBO_PASSWORD_2из вашего кода). - Нажмите Сохранить. При сохранении Robokassa делает тестовый запрос к указанному адресу. Благодаря TunnelHunt он пройдет проверку, и настройки сохранятся без ошибок.
Шаг 4: Тестирование оплаты
Запустите процесс оплаты в вашем магазине в тестовом режиме. При успешном проведении транзакции Robokassa обратится по адресу вашего туннеля, и ваше Flask-приложение подтвердит оплату.
Ускорение разработки: Request Replay в TunnelHunt
Если при первой попытке код выбросил ошибку (например, вы опечатались в имени функции или параметрах БД), вам не нужно заново проходить платежную форму Robokassa.
Откройте личный кабинет TunnelHunt в разделе Logs:
- Найдите лог запроса к
/webhook/robokassa. - Нажмите кнопку Replay (Повторить запрос).
- TunnelHunt повторит точно такой же запрос, и вы мгновенно увидите результат в своей локальной консоли.
Готовы запустить свой первый туннель?
Начните использовать TunnelHunt бесплатно уже сегодня и откройте доступ к локальному серверу всего одной командой.
Зарегистрироваться бесплатно →Последние публикации
Локальное тестирование вебхуков CloudPayments через TunnelHunt
22 июня 2026 г.
Пошаговый гайд по отладке уведомлений о платежах CloudPayments на localhost. Как настроить адреса уведомлений, пробросить туннель и верифицировать подпись HMAC-SHA256 в Python.
Локальное тестирование вебхуков Т-Банка (Т-Бизнес / Эквайринг) на localhost
22 июня 2026 г.
Пошаговый гайд по отладке платежных уведомлений эквайринга Т-Банка локально. Настройка адреса уведомлений, проброс через TunnelHunt и пример проверки подписи Token на Python.
Локальное тестирование вебхуков ЮKassa (YooKassa) через TunnelHunt
22 июня 2026 г.
Пошаговый гайд по настройке уведомлений ЮKassa (YooKassa) на локальном сервере. Как пробросить порт, прописать URL в личном кабинете и проверить цифровую подпись.
Инспектор трафика и кнопка Replay: Реактивный дебаг вебхуков в TunnelHunt
20 июня 2026 г.
Делать тестовый платеж или отправлять форму заново, чтобы отладить вебхук? Забудьте. Рассказываем, как встроенная функция HTTP Replay в дашборде TunnelHunt ускоряет локальную разработку.