add_filter('wc_stripe_payment_intent_args', function ($args, $order) {
// Extragere ID cont Stripe Connect stocat pe vendor
$vendor_stripe_id = get_post_meta($order->get_id(), '_vendor_stripe_account_id', true);
if (!$vendor_stripe_id) {
return $args;
}
$order_total = (float) $order->get_total();
$total_in_cents = (int) round($order_total * 100);
// Comision platforma: 12%
$platform_fee_percent = 0.12;
$application_fee_cents = (int) round($total_in_cents * $platform_fee_percent);
// Aplicare Destination Charge pentru comanda cu un singur vendor
$args['transfer_data'] = [
'destination' => $vendor_stripe_id,
];
$args['application_fee_amount'] = $application_fee_cents;
return $args;
}, 10, 2);Am lucrat anul trecut la un marketplace B2B pe WooCommerce cu peste 120 de vendori activi și un rulaj de vreo 45.000 EUR lunar. Clientul voia ceva simplu la prima vedere: cumpărătorul plătește o singură dată la checkout, iar banii se împart automat — 88% se duc la furnizor, 12% rămân la platformă ca comision. În realitate, când încerci să faci split payments nativ în WooCommerce fără un plugin mamut de tip Dokan care îți încarcă baza de date cu mii de opțiuni inutile, dai peste câteva ziduri arhitecturale majore.
Ce tip de cont Stripe Connect alegi?
Tranziția de la un gateway clasic la un marketplace începe cu alegerea tipului de cont Stripe Connect. Ai trei opțiuni, dar în practică doar două contează:
- Express Accounts: Stripe se ocupă de tot onboarding-ul KYC (Know Your Customer), verificarea actelor și interfața de payout pentru vendori. Tu doar îi redirecționezi pe o pagină Stripe. Trade-off-ul? Plătești 2$ per cont activ pe lună plus 0.25% + 10c per payout, iar interfața nu poartă 100% brandul tău.
- Custom Accounts: Control total pe UX. Utilizatorul nu știe că există Stripe, își bagă datele bancare direct în site-ul tău. Partea nasoală? Devii responsabil legal direct de colectarea actelor KYC, verificarea identității și refuzurile de plată. Dacă nu ai o echipă juridică sau riscuri foarte bine acoperite, Custom te îngroapă în birocrație și riscuri financiare.
Pentru proiectul de 120 de vendori, am mers pe Express. Am salvat peste 80 de ore de dev pe partea de UI/KYC și am dormit liniștit când s-au schimbat reglementările europene DAC7.
Destination Charges vs Separate Charges and Transfers
A doua decizie critică este fluxul de bani. Stripe îți oferă două moduri principale de a face split-ul:
- Destination Charges: Plata se procesează în numele vendorului. Clientul vede pe extrasul bancar numele vendorului (sau al platformei, depinzând de setări), iar comisionul tău (
application_fee_amount) este oprit automat la sursă înainte ca restul sumei să ajungă la contul conectat. Este opțiunea ideală dacă ai un singur vendor per comandă. - Separate Charges and Transfers: Plata intră integral în contul platformei tale, iar tu rulezi ulterior comenzi de
Transfercătre conturile vendorilor. Asta este singura opțiune viabilă dacă un client pune în coș produse de la 3 vendori diferiți într-o singură comandă WooCommerce.
Cea mai mare greșeală pe care o văd la devii juniori este că folosesc Destination Charges când au coșuri multi-vendor. Stripe va arunca eroare pentru că nu poți direcționa o singură tranzacție PaymentIntent către două conturi de destinație diferite.
Partea urâtă: Refund-urile și comisioanele pierdute
Aici e capcana financiară. Când un client cere refund total după 2 săptămâni, Stripe NU îți returnează comisionul lor de procesare (stabilit la tranzacția inițială). Dacă faci refund direct din WooCommerce fără un webhook bine pus la punct, te trezești că platforma ta plătește din propriul buzunar comisioanele procesatorului pentru banii pe care vendorul trebuie să-i dea înapoi.
Trebuie să stabilești clar prin cod dacă la refund retragi și application_fee_amount înapoi de la vendor sau dacă îți asumi tu pierderea comisionului de tranzacționare. Noi am configurat un webhook pe charge.refunded care trage înapoi proporțional banii din soldul Stripe Connect al vendorului respectiv.
Atunci când construiești un marketplace personalizat pe WooCommerce, păstrează codul lean. Nu încărca site-ul cu 10 plugin-uri de integrare când poți intercepta hook-urile native din WooCommerce și API-ul Stripe. Voi cum ați gestionat problema coșurilor cu vendori multipli în proiectele voastre?