TunnelHunt

Настройка и отладка вебхуков Robokassa на локальном сервере

Опубликовано: 22 июня 2026 г.

Пошаговая инструкция по приему и верификации платежных уведомлений Robokassa на локальном компьютере с помощью TunnelHunt. Пример MD5-подписи на Python.

Настройка и отладка вебхуков Robokassa на локальном сервере

Платежный сервис 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 адрес нашего туннеля:

  1. Перейдите в Личный кабинет Robokassa.
  2. Откройте Мои магазины → Настройки магазина → вкладка Технические настройки.
  3. В поле Result URL вставьте адрес, сгенерированный TunnelHunt, добавив путь /webhook/robokassa: https://happy-dog-789.tunnelhunt.ru/webhook/robokassa
  4. В качестве метода отсылки выберите POST.
  5. Задайте Пароль №2 (он должен совпадать с ROBO_PASSWORD_2 из вашего кода).
  6. Нажмите Сохранить. При сохранении Robokassa делает тестовый запрос к указанному адресу. Благодаря TunnelHunt он пройдет проверку, и настройки сохранятся без ошибок.

Шаг 4: Тестирование оплаты

Запустите процесс оплаты в вашем магазине в тестовом режиме. При успешном проведении транзакции Robokassa обратится по адресу вашего туннеля, и ваше Flask-приложение подтвердит оплату.


Ускорение разработки: Request Replay в TunnelHunt

Если при первой попытке код выбросил ошибку (например, вы опечатались в имени функции или параметрах БД), вам не нужно заново проходить платежную форму Robokassa.

Откройте личный кабинет TunnelHunt в разделе Logs:

  1. Найдите лог запроса к /webhook/robokassa.
  2. Нажмите кнопку Replay (Повторить запрос).
  3. TunnelHunt повторит точно такой же запрос, и вы мгновенно увидите результат в своей локальной консоли.

Готовы запустить свой первый туннель?

Начните использовать TunnelHunt бесплатно уже сегодня и откройте доступ к локальному серверу всего одной командой.

Зарегистрироваться бесплатно →

Последние публикации

Локальное тестирование вебхуков CloudPayments через TunnelHunt

Локальное тестирование вебхуков CloudPayments через TunnelHunt

22 июня 2026 г.

Пошаговый гайд по отладке уведомлений о платежах CloudPayments на localhost. Как настроить адреса уведомлений, пробросить туннель и верифицировать подпись HMAC-SHA256 в Python.

Читать далее →
Локальное тестирование вебхуков Т-Банка (Т-Бизнес / Эквайринг) на localhost

Локальное тестирование вебхуков Т-Банка (Т-Бизнес / Эквайринг) на localhost

22 июня 2026 г.

Пошаговый гайд по отладке платежных уведомлений эквайринга Т-Банка локально. Настройка адреса уведомлений, проброс через TunnelHunt и пример проверки подписи Token на Python.

Читать далее →
Локальное тестирование вебхуков ЮKassa (YooKassa) через TunnelHunt

Локальное тестирование вебхуков ЮKassa (YooKassa) через TunnelHunt

22 июня 2026 г.

Пошаговый гайд по настройке уведомлений ЮKassa (YooKassa) на локальном сервере. Как пробросить порт, прописать URL в личном кабинете и проверить цифровую подпись.

Читать далее →
Инспектор трафика и кнопка Replay: Реактивный дебаг вебхуков в TunnelHunt

Инспектор трафика и кнопка Replay: Реактивный дебаг вебхуков в TunnelHunt

20 июня 2026 г.

Делать тестовый платеж или отправлять форму заново, чтобы отладить вебхук? Забудьте. Рассказываем, как встроенная функция HTTP Replay в дашборде TunnelHunt ускоряет локальную разработку.

Читать далее →