Как принимать вебхуки ЮKassa, Т-Банка и Stripe на localhost
Создайте в ProximaClient туннель HTTPS на порт вашего сервиса и впишите его ссылку с путём обработчика в настройки уведомлений платёжного сервиса: уведомления о платежах будут приходить в сервис на вашем компьютере, как на сервер в интернете.
Шаги
- Запустите сервис на компьютере, например на
localhost:3000, с обработчиком уведомлений, например/pay/notify. - В ProximaClient откройте «Туннели» и нажмите «Создать туннель». Если туннели уже есть, это кнопка «+» над списком.
- В поле «Протокол» выберите HTTPS — «Сайт или API по своей ссылке https://». Адрес TCP-туннеля не подойдёт: платёжные сервисы присылают уведомления только на ссылку
https://. - В поле «Адрес назначения» укажите порт сервиса:
localhost:3000. - Нажмите «Создать туннель». Когда туннель подключится, скопируйте ссылку значком «Копировать публичный адрес».
- В личном кабинете платёжного сервиса, в настройках уведомлений (вебхуков), укажите ссылку с путём обработчика:
https://ваша-ссылка/pay/notify. - Проведите тестовый платёж и проверьте, что в логе вашего сервиса появился запрос на
/pay/notify.
Если уведомление не пришло
- Сервис не запущен или слушает другой порт. Платёжный сервис получает ответ 502. Запустите сервис на порту из поля «Адрес назначения».
- Путь в настройках не тот. Сверьте путь в настройках уведомлений с путём обработчика в коде.
- Ссылка сменилась. Пока туннель работает, ссылка не меняется, а сколько она держится после закрытия, написано на странице «HTTPS-ссылка на localhost». Если туннель получил новую ссылку, впишите её в настройки уведомлений.
- Ссылка закрыта логином. Платёжный сервис не знает вашего логина и получает ответ 401.
С версии приложения 1.3.0
Чтобы уведомления проходили на ссылку с логином, на вкладке «Безопасность», в разделе «Правила путей», добавьте правило для пути обработчика: «Только адреса» с адресами платёжного сервиса из его документации или «Без входа». Подробнее — на странице о логине и пароле для ссылки.
Как не пустить поддельное уведомление
Ссылку может узнать кто угодно и прислать на неё «оплата прошла». Поэтому проверяйте подпись уведомления в коде по правилам платёжного сервиса. Т-Банк подписывает не все поля уведомления, а ЮKassa не подписывает уведомления совсем: перед выдачей товара проверяйте статус платежа запросом к Т-Банку (метод GetState) или к API ЮKassa.