Страница оплаты

payment_url = https://pay.egnetwork.ru/p/{id}. Страница открывается без авторизации — ID платежа длинный и случайный, его нельзя подобрать. Не публикуйте ссылку на платёж в открытых местах.

Что видит пользователь

  • Название сервиса, сумму и description.
  • Компьютер — QR-код СБП. Пользователь сканирует его камерой телефона или в приложении банка.
  • Телефон — кнопку «Оплатить в приложении банка». Она открывает ссылку НСПК https://qr.nspk.ru/…, система предлагает выбрать банк. QR можно показать по кнопке.
  • «Оплатить картой», если в methods есть card: открывается защищённая форма банка-эквайера. После оплаты пользователь возвращается на ту же страницу.
  • Таймер до expires_at.

Страница опрашивает статус каждые 3 секунды и сразу показывает результат.

Возврат в сервис

Когда платёж оплачен, страница через 5 секунд переходит на return_url (или сразу по кнопке «Вернуться в сервис»). К URL добавляются параметры:

https://example.egnetwork.ru/billing/done?payment_id=pay_8fK2mQ1xZbY7cV3nT0aR&status=succeeded
ПараметрЗначение
payment_idID платежа
statusСтатус на момент перехода: succeeded, expired, failed, canceled, pending (пользователь нажал «Отменить и вернуться»)

Не доверяйте status из URL. Его может подставить кто угодно. На странице возврата запросите GET /api/v1/payments/{payment_id} со своим ключом или дождитесь вебхука.

Без return_url страница просто показывает «Оплачено».

Встраивание

  • Редирект (рекомендуется): 302 Location: payment_url.
  • Telegram WebApp / бот: откройте payment_url через openLink или inline-кнопку с URL. Внутри iframe открывать не нужно — приложения банков не всегда запускаются из iframe.
  • Своя кнопка в мобильном приложении: откройте payment_url во внешнем браузере или SFSafariViewController/Custom Tabs.

Markdown-версия этой страницы: /docs/payment-page.md