add_action('woocommerce_checkout_order_processed', 'dispatch_stripe_connect_transfers', 20, 3);
function dispatch_stripe_connect_transfers($order_id, $posted_data, $order) {
if ($order->get_payment_method() !== 'stripe') return;
$items = $order->get_items();
foreach ($items as $item) {
$product_id = $item->get_product_id();
$vendor_stripe_id = get_post_meta($product_id, '_vendor_stripe_account_id', true);
if (!$vendor_stripe_id) continue;
$item_total = $item->get_total();
$commission = $item_total * 0.10; // Comision platformă 10%
$transfer_amount = ($item_total - $commission) * 100; // Valoare în cenți
try {
\Stripe\Transfer::create([
'amount' => $transfer_amount,
'currency' => 'ron',
'destination' => $vendor_stripe_id,
'transfer_group' => 'order_' . $order_id,
]);
} catch (\Exception $e) {
wc_get_logger()->error('Stripe Transfer failed for order ' . $order_id . ': ' . $e->getMessage());
}
}
}Dacă ai de făcut un marketplace în WooCommerce unde banii trebuie să plece direct către vânzători, te lovești rapid de zidul plăților split. Am implementat asta recent pentru o platformă locală cu 120 de vendori activi și am vrut să-mi smulg părul din cap. În postarea asta îți arăt cum am mapat coșul Woo pe Stripe Connect fără pluginuri de 700 de dolari pe an care oricum crapă la update-uri.
De ce Stripe Connect și nu „băbește”?
Când clientul mi-a zis că vrea ca banii să ajungă direct la vânzători și platforma să rețină doar un comision de 10%, prima mea reacție a fost: „Facem manual la final de lună”. Mi-a tăiat-o rapid: e coșmar legal și contabil în România să încasezi tu toți banii și apoi să-i distribui, pentru că tehnic faci activitate de intermediere financiară nereglementată. Așa că singura opțiune viabilă a rămas Stripe Connect.
Aici ai două variante mari: Express și Custom. Pentru proiectul ăsta, am mers pe Express. Deși Stripe îți ia 2 dolari pe lună pentru fiecare cont activ de vendor plus 0.25% din transferuri, am economisit cam 30% la timpul de development pentru că Stripe se ocupă de tot ce înseamnă KYC (Know Your Customer) și validarea documentelor de firmă. Crede-mă, nu vrei să scrii tu formulare de upload pentru CUI-uri și buletine și să le trimiți prin API.
Cum legi WooCommerce de Stripe Connect
Marea problemă cu WooCommerce este că el vede comanda ca pe un singur bloc. Dacă un client pune în coș un produs de la Vendorul A (50 lei) și unul de la Vendorul B (100 lei), WooCommerce generează o singură tranzacție.
Ca să rezolv asta fără să sparg coșul în comenzi multiple la checkout (ceea ce distruge rata de conversie), am folosit abordarea "Separate Charges and Transfers". Practic, încasez toată suma în contul principal al marketplace-ului, iar pe hook-ul de plată confirmată, declanșez transferuri separate către subconturile vendorilor.
Uite o versiune simplificată a codului pe care l-am scris pentru a distribui banii după ce comanda a fost plătită cu succes.
Trade-off-ul de care nu-ți spune nimeni
Totul sună frumos pe hârtie, dar realitatea din teren e dură. Cel mai mare minus la abordarea asta este că tu, ca owner de marketplace, ești responsabil legal de chargeback-uri. Dacă Vendorul A dă țeapă unui client, clientul face dispută la bancă. Stripe îți va lua banii ȚIE din contul principal, nu din contul vendorului, pentru că tu ai inițiat tranzacția principală. Trebuie să ai clauze contractuale extrem de clare cu vendorii tăi ca să-ți poți recupera acești bani.
În plus, onboarding-ul Stripe Express pentru firmele din România este destul de anevoios. Mulți vendori mai în vârstă s-au blocat când Stripe le-a cerut extras de cont pe firmă sau detalii despre beneficiarii reali.
Voi cum ați rezolvat problema asta în proiectele voastre de tip marketplace? Ați mers pe Stripe sau ați încercat soluții locale gen Netopia/PayU cu split manual la nivel de ERP?