/**
* Creează un PaymentIntent cu split payment către un cont conectat
* @param int $order_id ID-ul comenzii din WooCommerce
* @param string $connected_account_id ID-ul de Stripe al vendorului (ex: acct_123456)
* @param float $vendor_amount Suma care pleacă la vendor (în RON/EUR)
*/
function create_stripe_split_payment( $order_id, $connected_account_id, $vendor_amount ) {
$order = wc_get_order( $order_id );
$total_cents = round( $order->get_total() * 100 );
$vendor_cents = round( $vendor_amount * 100 );
$application_fee_cents = $total_cents - $vendor_cents;
// Inițializăm clientul Stripe SDK
$stripe = new \Stripe\StripeClient( 'sk_test_your_secret_key' );
try {
$payment_intent = $stripe->paymentIntents->create([
'amount' => $total_cents,
'currency' => strtolower( $order->get_currency() ),
'payment_method_types' => ['card'],
'application_fee_amount' => $application_fee_cents,
'transfer_data' => [
'destination' => $connected_account_id,
],
'metadata' => [
'order_id' => $order_id,
],
]);
// Salvăm ID-ul tranzacției în comanda WooCommerce
$order->update_meta_data( '_stripe_intent_id', $payment_intent->id );
$order->save();
return $payment_intent->client_secret;
} catch ( \Exception $e ) {
wc_get_logger()->error( 'Stripe Connect Error: ' . $e->getMessage() );
return false;
}
}Am implementat recent un sistem de split payments pentru un marketplace de nișă construit pe WooCommerce. Aveam vreo 150 de vendori activi și o problemă fiscală majoră: clientul (proprietarul platformei) nu voia ca toți banii să treacă prin contul lui bancar. Nu dorea asta ca să nu se încarce inutil cu TVA-ul pentru toată suma rulată, ci doar pentru comisionul lui de 12%.
Dacă ai încercat vreodată să configurezi asta cu pluginurile clasice de marketplace gen Dokan sau WCFM, știi deja ce durere de cap este. Te lovești rapid de limitări de design, de faptul că vendorii sunt trimiși pe pagini dubioase de Stripe pentru onboarding, sau mai rău, că ești obligat să folosești Stripe Connect Standard, unde pierzi complet controlul asupra fluxului de checkout.
Am decis să aruncăm la gunoi soluțiile de-a gata și să scriem integrarea direct cu Stripe SDK. Am ales Stripe Connect Express. Este calea de mijloc ideală: Stripe se ocupă de KYC (Know Your Customer) și de verificarea documentelor de identitate ale vendorilor, dar noi controlăm experiența de plată direct în checkout-ul din WooCommerce.
Cum funcționează logica de split
Spre deosebire de o plată simplă, unde banii merg direct în contul tău, la split payment folosești plăți de tip Destination Charges. Clientul plătește către platformă, dar banii sunt transferați instant către contul conectat al vendorului, mai puțin comisionul nostru (application fee).
Partea mișto este că Stripe se ocupă de împărțire la nivel de tranzacție. Clientul vede o singură plată pe extrasul bancar, iar în dashboard-ul tău Stripe vezi exact: suma totală, cât a plecat la vendor și cât a rămas la tine ca profit net. La un volum de 8.000 de utilizatori pe lună, automatizarea asta ne-a scutit de zeci de ore de contabilitate manuală.
Trade-off-ul dureros de care nu-ți spune nimeni
Sună perfect, nu? Ei bine, marea problemă apare la refund-uri. Dacă un client cere banii înapoi după trei zile, cine suportă comisionul de procesare Stripe? Din 2020 încoace, Stripe nu mai returnează taxele de procesare la refund.
Dacă faci un refund total direct din WooCommerce, riști ca platforma ta să rămână pe minus cu taxele de tranzacție, în timp ce vendorul își primește toți banii înapoi neatonși. Trebuie să scrii logică suplimentară ca să faci "refund reversals" – adică să tragi înapoi comisionul transferat către vendor. E o zonă gri din punct de vedere legal și tehnic care ne-a mâncat vreo 20 de ore de debug și discuții cu avocații.
Un alt minus este costul Stripe Connect Express: te costă 2$ pe lună pentru fiecare cont de vendor activ (care primește bani în luna respectivă) plus 0.25% + 0.25$ per payout trimis către ei. La tranzacții mici, comisioanele astea îți pot mânca toată marja de profit dacă nu le calculezi corect în preț.
Voi cum ați rezolvat problema asta cu refund-urile pe marketplace-uri în România? Lăsați clienții să își asume pierderea sau opriți comisionul direct din banii vendorului?