Страница оплаты
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_id | ID платежа |
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