Страница оплаты
Размещённая (hosted) страница /pay/{id} — единственное место, где покупатель вводит платёжные данные. Вам не нужно ни верстать форму, ни проходить сертификацию: перенаправьте покупателя на url счёта и ждите вебхук.
API v1 · обновлено 2026-09-12
Что видит покупатель
Способы на странице: Банковская карта
- Шапка — логотип Payra, под ним название и домен вашего проекта (и ваш логотип, если задан).
- Сумма и описание счёта — сразу итог к оплате. Если часть комиссии на покупателе (
customerFeePct> 0) — строка «включая комиссию сервиса N ₽»; при смене способа оплаты сумма и строка пересчитываются по ставке метода. - Выбор способа: «СБП» и «Банковская карта» (только доступные проекту сейчас). Если счёт создан с
method, шаг пропускается: страница сама начинает оплату этим способом при первом открытии. - Оплата:
- СБП на компьютере — QR-код, который сканируется приложением банка; на телефоне — кнопка «Оплатить через СБП» открывает приложение банка со списком;
- карта — защищённая форма ввода номера, срока и CVC с подтверждением 3-D Secure в банке.
- Ожидание: страница сама опрашивает статус и переключается на результат — обычно за секунды.
- Результат: «Оплачено» с кнопкой «Вернуться в магазин» (→
successUrl) или «Не удалось оплатить» с повтором и возвратом (→failUrl). Автопереход через 5 секунд.
Страница адаптивная, работает в WebView Telegram и других мессенджеров, тёмная и светлая темы подбираются по системным настройкам. Реквизиты карты вводятся в защищённой форме банковской инфраструктуры и на серверы Payra не попадают.
Чем управляете вы
Передайте method (sbp или card), чтобы покупатель миновал выбор: выбор способа можно сделать на своей стороне — своими кнопками «Оплатить через СБП» / «Оплатить картой», в каждой из которых создаётся счёт с нужным method. Покупатель откроет ссылку и сразу окажется на странице банка (или увидит QR), без промежуточного экрана. Если этот способ временно недоступен, страница предложит выбрать другой.
| Параметр счёта | Влияние на страницу |
|---|---|
method | Не передан — покупатель выбирает СБП или карту сам. Передан — показывается только этот способ, шаг выбора пропускается. |
description | Строка под суммой. Пишите то, что покупатель узнает: «Заказ №1042», «Подписка Pro на месяц». |
customerFeePct | Процент от суммы, который покупатель платит сверху (0…ваша ставка по методу). Покупатель всегда видит итог к оплате = amount + его часть комиссии; если она больше нуля, под суммой появляется строка «включая комиссию сервиса N ₽». При 0 строки нет, покупатель видит ровно amount. Пример: ставка СБП 9 %, customerFeePct 4, счёт 1 000 ₽ → покупатель видит 1 040 ₽, вы получаете 950 ₽. |
expire | Таймер обратного отсчёта в шапке. По нулю — экран «Срок оплаты истёк» и кнопка возврата на failUrl. |
successUrl / failUrl | Куда ведёт кнопка «Вернуться в магазин» после успеха / отказа. Автопереход через 5 секунд, если адрес задан. |
payerEmail / customer.email | Предзаполняет поле email для чека об оплате; покупатель может изменить. |
Логотип и название проекта | Из настроек проекта. Показываются в шапке, чтобы покупатель понимал, кому платит. |
Состояния страницы
| Статус счёта | Что показывается |
|---|---|
created | Выбор способа / форма оплаты. |
pending | «Ожидаем подтверждение банка» с индикатором; QR остаётся на экране. |
paid | «Оплачено», сумма, кнопка возврата в магазин. |
failed | «Не удалось оплатить», кнопка «Попробовать снова» (тот же счёт, пока он не истёк). |
expired | «Срок оплаты истёк». Нужен новый счёт. |
refunded | «Возврат выполнен». |
Как открывать страницу
- Редирект 302 на
url— самый надёжный способ на сайте. - Новая вкладка (
target="_blank") — если не хотите терять состояние своей страницы; после оплаты покупатель вернётся поsuccessUrlв этой же вкладке. - Ссылка в мессенджере — для ботов и продаж в чатах; страница корректно открывается во встроенном браузере.
- Встраивать страницу в
<iframe>нельзя — банковские формы запрещают это политиками безопасности.
Возврат покупателя
Включайте номер заказа в сами адреса возврата (например, https://shop.example/orders/1042?paid=1), чтобы показать покупателю нужный заказ. Не используйте сам факт возврата как подтверждение оплаты: покупатель может открыть successUrl руками. Источник правды — вебхук invoice.paid или статус из GET /invoices/{id}.
Тестовая страница
Для счетов, созданных ключом sk_test_, вместо банковских форм показываются кнопки «Успех», «Отказ», «Истёк» — см. Тестирование.