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

Общая платёжная форма

Создайте один checkout без заранее выбранного метода и перенаправьте покупателя на готовую форму Cashera

POST/integration/transactions

Для общей формы используется тот же endpoint, что и для обычного платежа. Единственное отличие - полеpayment_method необходимо полностью исключить из JSON. Покупатель выберет способ оплаты на странице по адресу payment_url.

Как работает flow

  1. Ваш backend создаёт платёж без payment_method
  2. Cashera возвращает checkout-сессию, её UUID и payment_url
  3. Вы перенаправляете покупателя на URL из ответа
  4. Покупатель выбирает один из доступных способов оплаты
  5. Checkout-сессия становится обычной транзакцией с теми же uuid и external_id
  6. Дальше действуют стандартные статусы и вебхуки транзакции
Одна интеграция для всех подключённых методов

Список способов оплаты формируется динамически по настройкам вашего мерчанта. Не фиксируйте его в коде: включённые методы уже приходят в available_payment_methods.

Перед подключением

  • У мерчанта должен быть включён хотя бы один одноразовый метод для общей формы
  • Должен быть настроен HTTPS callback_url - в запросе или в настройках мерчанта
  • API-запрос выполняется только с backend-сервера с заголовком X-Api-Key
  • Суммы передаются целыми числами в минорных единицах

Параметры запроса

ПолеТипОписание
amountобязательноеintegerСумма в копейках: 15000 = 150,00 ₽. Минимум 1
currencyобязательноеstringДля интеграционного приёма платежей используйте RUB
external_idобязательноеstringУникальный идентификатор заказа, до 255 символов. Для поиска по URL рекомендуемый формат: латинские буквы, цифры, точка, дефис и подчёркивание
descriptionобязательноеstringОписание платежа, до 255 символов
metadataobjectВаш JSON-объект. Возвращается в Integration API; внутренние provider metadata в ответ не попадают
callback_urlstring (https)Публичный HTTPS URL для вебхуков. Если отсутствует, используется URL из настроек мерчанта
success_urlstring (url)Куда вернуть покупателя после успешной оплаты
fail_urlstring (url)Куда вернуть покупателя при неуспешной оплате
Не передавайте payment_method

Поле не должно присутствовать даже со значением null или пустой строкой. Для общей формы отправьте JSON без этого ключа.

Создание формы

201 Created
curl -X POST https://api.cashera.cash/api/v1/integration/transactions \
-H "X-Api-Key: $CASHERA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 15000,
"currency": "RUB",
"external_id": "order-2026-000123",
"description": "Оплата заказа №000123",
"metadata": { "order_id": "000123" },
"callback_url": "https://merchant.example/webhooks/cashera",
"success_url": "https://merchant.example/payment/success",
"fail_url": "https://merchant.example/payment/fail"
}'

Ответ до выбора метода

API отвечает 201 Created. Финансовые поля имеют значение null, пока способ оплаты не выбран и транзакция не создана.

201 Created
{
"uuid": "0195f0c1-e0a2-7221-9330-7d597e7141f7",
"type": "deposit",
"amount": 15000,
"gross_amount": null,
"net_amount": null,
"fee_amount": null,
"currency": "RUB",
"settlement_currency": null,
"settlement_amount": null,
"payment_method": null,
"status": "pending",
"external_id": "order-2026-000123",
"description": "Оплата заказа №000123",
"metadata": { "order_id": "000123" },
"payment_url": "https://pay.cashera.cash/0195f0c1-e0a2-7221-9330-7d597e7141f7",
"expires_at": "2026-08-28T15:35:00+00:00",
"created_at": "2026-08-28T15:00:00+00:00",
"updated_at": "2026-08-28T15:00:00+00:00",
"selection_required": true,
"available_payment_methods": [
{ "code": "sbp", "title": "СБП" },
{ "code": "card", "title": "Банковская карта" }
]
}

Перенаправление покупателя

Используйте payment_url из ответа без изменения домена или пути. URL может учитывать индивидуальный checkout-домен вашего мерчанта.

header('Location: ' . $checkout['payment_url']);
exit;
Не определяйте оплату по возврату пользователя

Переход на success_url не подтверждает оплату. Финальный результат определяйте по вебхуку или запросу статуса.

Статус общей формы

До и после выбора метода используйте те же status endpoint'ы:

До выбора метода ответ содержит payment_method: null и selection_required: true. После выбора возвращается обычная транзакция с тем же UUID и заполненным payment_method.

Идемпотентность

  • Точный повтор возвращает ту же checkout-сессию и тот же UUID
  • После выбора метода точный повтор возвращает уже созданную транзакцию
  • Изменение суммы, валюты, описания, metadata или URL при том же external_id вернёт 409
  • Нельзя при повторе добавлять payment_method или переключаться с прямого платежа на общую форму

При timeout повторите исходный JSON без изменений или получите состояние по external_id. Подробнее - идемпотентность.

Ошибки

ПолеТипОписание
401UnauthorizedОтсутствует или неверен X-Api-Key
403ForbiddenМерчант не может принимать платежи либо не настроен обязательный callback
409ConflictЭтот external_id уже используется с другим payload или в другом режиме
422Unprocessable EntityОшибка полей, небезопасный URL или нет доступных методов для общей формы
429Too Many RequestsПревышен лимит Integration API. Повторите запрос с backoff
422 Unprocessable
{
"message": "No payment methods are available on checkout."
}