> ## Documentation Index
> Fetch the complete documentation index at: https://faq.exode.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Приём платежей

> Как проходит оплата: корзина, счета, статусы платежей, история оплат и возвраты

После того как касса настроена, ученики могут оплачивать продукты вашей школы. В этом разделе описано,
как устроен процесс оплаты, где смотреть счета и историю платежей и как обрабатываются возвраты.

## Как проходит оплата

Оплата всегда идёт через **счёт** (Invoice). Счёт создаётся из корзины ученика и содержит один или несколько
продуктов с ценами и применёнными скидками. К счёту привязывается **платёж** (Payment), который и проводится
через выбранный эквайринг.

Точки входа в оплату:

| Путь                          | Что открывает                                         |
| ----------------------------- | ----------------------------------------------------- |
| `/pay/:productId/:priceId`    | Прямая оплата конкретного продукта по конкретной цене |
| `/cart`                       | Корзина ученика                                       |
| `/cart/:cartUuid`             | Общая (расшаренная) корзина по ссылке                 |
| `/pay/invoice/:invoiceUuid`   | Страница статуса конкретного счёта                    |
| `/pay/card/:paymentUuid`      | Оплата картой через ExodePay                          |
| `/pay/card/bind/:paymentUuid` | Привязка карты (для автосписаний)                     |

### Корзина

В корзине (`/cart`) ученик собирает продукты, применяет промокоды и видит итоговую сумму. Итог рассчитывается
на сервере запросом `invoiceCalculateCartTotal`, который возвращает:

* `totalAmount` — итоговая сумма к оплате;
* `discountAmount` — суммарная скидка;
* `appliedDiscounts` — применённые скидки;
* `unAppliedDiscounts` — скидки, которые не применились, с причиной (например, промокод неактивен или
  неприменим к товару);
* список позиций с исходной ценой, скидкой и итогом по каждой.

Корзину можно расшарить по ссылке (`/cart/:cartUuid`) — например, куратор собирает набор курсов и отправляет
ученику готовую корзину на оплату.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/exode-faq/images/online-schools/sales-payments/cart.png" alt="Корзина ученика с товарами, промокодом и итоговой суммой" />

### Оплата картой (ExodePay)

Для провайдеров с оплатой картой прямо на сайте используется ExodePay: ученик вводит данные карты, а
подтверждение проходит по коду из СМС (OTP). Подробнее о способах оплаты — в разделе
[Типы платежей](/online-schools/sales-payments/payment-types).

## Статусы платежа

У платежа по счёту есть статус (`PaymentStatus`). Актуальный статус счёта — это статус его актуального
платежа (`actualPayment`).

| Статус (`PaymentStatus`) | Значение                          |
| ------------------------ | --------------------------------- |
| `Created`                | Платёж создан                     |
| `WaitingPay`             | Ожидает оплаты                    |
| `Processing`             | В обработке на стороне провайдера |
| `WaitingForBinding`      | Ожидает привязки карты            |
| `BindingCompleted`       | Привязка карты завершена          |
| `Completed`              | Оплата успешно завершена          |
| `Canceled`               | Отменён                           |

Страница `/pay/invoice/:invoiceUuid` показывает ученику текущее состояние оплаты и меняет вид в зависимости
от статуса: ожидание (`WaitingView`), успешная оплата (`SuccessView`), отмена (`CanceledView`), а также
промежуточное состояние выдачи доступа (`ReleasingView`). При ожидании подтверждения страница автоматически
опрашивает статус (polling), пока платёж не завершится. При успешной оплате доступен номер и чек об оплате.

<Note>
  Один счёт может иметь несколько попыток оплаты. Если первая попытка не прошла, ученик может попробовать
  оплатить снова — история попыток сохраняется у счёта.
</Note>

## Счета в управлении

Все счета школы доступны в разделе **Управление → Счета** (`/manage/invoices`). Здесь видно, кто, что и на
какую сумму оплатил, каким провайдером и с каким статусом.

Столбцы таблицы счетов: пользователь, продукт, сумма и статус (с иконкой провайдера).

### Фильтры счетов

Список можно фильтровать по:

* поиску (`search`);
* ученикам (`userIds`) и продуктам (`productIds`);
* типу счёта (`types`) — по умолчанию показываются `Regular`, `InstallmentPay`, `SubscriptionPay`;
* эквайрингу платежа (`paymentAcquiringIds`);
* статусам платежа (`paymentStatuses`);
* UTM-меткам (`utmParams`);
* диапазону дат создания (`createdAtDateRange`) и диапазону суммы (`totalAmountRange`).

<img src="https://mintlify.s3.us-west-1.amazonaws.com/exode-faq/images/online-schools/sales-payments/invoices-list.png" alt="Таблица счетов с фильтрами по статусу, продукту и дате" />

### Карточка счёта

По каждому счёту доступна детальная карточка с вкладками:

| Вкладка                  | Содержимое                            |
| ------------------------ | ------------------------------------- |
| Информация               | Данные счёта, продукты, сумма, скидки |
| Попытки оплаты           | Все платёжные попытки по этому счёту  |
| Все платежи пользователя | История всех платежей ученика         |

## Возвраты (Refunds)

Раздел **Управление → Возвраты** (`/manage/refunds`) предназначен для создания, редактирования и отправки
возвратов ученикам.

<Note>
  На текущий момент страница возвратов в приложении представляет собой заготовку: она содержит заголовок и
  описание раздела, но интерфейс создания и отправки возвратов ещё не реализован. Функциональность будет
  дополнена в следующих версиях. За фактическим возвратом средств пока обращайтесь через процессы вашего
  платёжного провайдера.
</Note>
