Реалізація еськроу-платежів на маркетплейсі
Еськроу — механізм умовного зберігання коштів: покупець платить, гроші утримуються платформою та звільняються продавцю тільки після підтвердження отримання товару. Це ключовий інструмент довіри на маркетплейсах, де продавець та покупець незнайомі.
Навіщо потрібне еськроу
Без еськроу покупець ризикує заплатити і не отримати товар. Продавець ризикує відправити товар і не отримати гроші. Еськроу розв'язує обидві проблеми: гроші існують, але жодна сторона не контролює їх до виконання умов. Це стандарт для маркетплейсів від Avito до Wildberries.
Варіанти реалізації
Власне еськроу на балансі платформи — гроші поступають на розрахунковий рахунок платформи, ведеться внутрішній облік зобов'язань перед кожним продавцем. Найпоширеніший варіант для російських маркетплейсів.
ЮKassa для маркетплейсів (Split-платежі) — ЮKassa утримує кошти та розподіляє їх за рахунками продавців (онбординг в ЮKassa) з утриманням комісії платформи. Потребує реєстрації продавців в ЮKassa.
Stripe Connect — аналог для міжнародних платформ. Платформа створює Connected Accounts для продавців, використовує Transfer + Destination Charge. Stripe зберігає кошти та керує виплатами.
Модель даних для власного еськроу
escrow_transactions (
id, order_id, buyer_id, seller_id,
amount, currency,
status: pending | held | released | refunded | disputed,
held_at, release_trigger: delivery_confirmed | auto_timeout | admin_release,
released_at, payment_id,
notes
)
-- Баланс платформи (зведений облік)
platform_escrow_balance (
total_held, -- сума по всім активним еськроу
available, -- кошти, доступні для виплат
updated_at
)
Життєвий цикл еськроу
Покупець платить за замовлення
↓
Кошти утримуються (status: held)
↓
┌──────┴──────────┐
Підтвердження Спір відкритий
отримання ↓
↓ Арбітраж
release ↓ ↓
↓ refund release
Продавцю Покупцю Продавцю
Автоматичне звільнення
Якщо покупець не підтвердив і не оспорив замовлення протягом N днів після доставки — кошти звільняються автоматично. Це захищає продавців від ситуації, коли покупець "забув" підтвердити.
// Scheduler: кожні 6 годин
$autoRelease = EscrowTransaction::where('status', 'held')
->whereHas('order', function($q) {
$q->where('delivered_at', '<', now()->subDays(config('escrow.auto_release_days')));
})
->get();
foreach ($autoRelease as $tx) {
EscrowService::release($tx, 'auto_timeout');
}
Типовий таймаут: 7–14 днів після доставки. Для дорогих товарів — довше.
Часткове звільнення
При частковому поверненні (товар прибув, але з дефектом) частина суми звільняється продавцю, частина повертається покупцю. Розбивка узгоджується під час арбітра жу.
Інтеграція з ЮKassa Split
// Створення платежу з розділенням
$payment = $client->createPayment([
'amount' => ['value' => '5000.00', 'currency' => 'RUB'],
'transfers' => [
[
'account_id' => $seller->yookassa_account_id,
'amount' => ['value' => '4250.00', 'currency' => 'RUB'], // за вирахуванням комісії
'platform_fee_amount' => ['value' => '750.00', 'currency' => 'RUB']
]
],
// ... інші параметри
]);
Transfer створюється відкладеним — кошти не перечисляються продавцю до явного підтвердження.
Юридичні аспекти
Агентська схема (платформа — агент продавця) — найпоширеніша правова конструкція для маркетплейсів в РФ. Агентський договір з кожним продавцем регулює умови еськроу, строки та порядок виплат. Це важливо налаштувати до запуску — ФНС може кваліфікувати зберігання чужих грошей без договору як незаконну банківську діяльність.
Моніторинг та звітність
- Щодобова звірка: сума
heldв БД повинна збігатися з фактичним залишком на рахунку - Алерт при розбіжності більше 1%
- Реєстр еськроу по продавцях для фінансового відділу
- Звіт про строки утримання (середній, максимальний) — індикатор проблем з доставкою
Строк розробки: 6–8 тижнів для повної еськроу-системи з інтеграцією платіжного провайдера, арбітра жу та автоматичним звільненням.







