הטמעת תשלומים מפוצלים: חסכו מעל 5,000$ בחודש בחשבונאות
תשלומים מפוצלים מפרקים עסקת לקוח אחת למספר תשלומים למקבלים שונים בו-זמנית. מקרה טיפוסי הוא שוק עם 50 מוכרים, שבו כל הזמנה צריכה להתפצל בין המוכר, הפלטפורמה ותוכנית הפניה. ללא מערכת תשלומים מפוצלים, רואה חשבון מבלה 3 שעות ביום בהתאמות ידניות — עם ההטמעה שלנו, הזמן הזה יורד ל-15 דקות (הפחתה של 92%), ו-95% מההחזרים מטופלים אוטומטית. תרחישים נוספים: שירות הזמנות עם עמלת אגרגטור, מנוי עם חלוקת הכנסות בין שותפים.
אנו מתכננים ומיישמים תשלומים מפוצלים מקצה לקצה: מבחירת ספק ועד ניטור ופיסקליזציה. ההטמעה אורכת 5 עד 14 ימי עסקים בהתאם למספר המקבלים, לוגיקת החלוקה וספק התשלומים שבו משתמשים. ניסיון של למעלה מ-10 שנים באינטגרציות תשלומים מבטיח פתרון מאובטח ותואם רגולציה. יותר מ-200 לקוחות סומכים עלינו. בקשו ביקורת על מערכת התשלומים שלכם — נמצא צווארי בקבוק ונציע את הפתרון האופטימלי.
מדוע תשלומים מפוצלים דורשים ארכיטקטורה נכונה?
פיצול שגוי מוביל לפערים כספיים, בעיות החזרים וסיכוני מס. לדוגמה, אם לא משתמשים ב-transfer_group ב-Stripe, העברות לא מתהפכות אוטומטית בעת החזר, וכסף עלול ללכת לאיבוד. הארכיטקטורה חייבת לטפל בעיבוד שגיאות, עיגול אגורות וניטור. המהנדסים שלנו עם ניסיון של עשור בונים תוכניות אמינות שחוסכות עד 20% מזמן החשבונאות ומפחיתות שגיאות ב-50%.
כיצד לבחור את מודל הפיצול?
ישנן שתי גישות שונות מהותית — חיוב + העברה ו-חיוב ישיר — והבחירה מגדירה את כל השאר.
| פרמטר | חיוב + העברה | חיוב ישיר |
|---|---|---|
| זרימת כסף | הכספים מגיעים לחשבון הפלטפורמה, ואז מועברים למוכרים | הלקוח משלם ישירות למוכר, הפלטפורמה מקבלת עמלה |
| אחריות KYC | הפלטפורמה חייבת לאמת מוכרים | המוכרים מבצעים KYC בעצמם |
| שליטה בהחזרים | הפלטפורמה מנהלת החזרים באופן מרכזי | החזרים בצד המוכר, הפלטפורמה עשויה לא להיות מעורבת |
| מורכבות אינטגרציה | גבוהה יותר, דורשת webhooks והגדרת העברות | נמוכה יותר, אך דורשת טיפול בעמלת יישום |
| סיכונים משפטיים | גבוהים יותר (הפלטפורמה היא סוכן מס) | נמוכים יותר, אך דורשים חוזה עם כל מוכר |
עבור רוב השווקים בשלב מוקדם, חיוב + העברה קל יותר — פחות מורכבות משפטית בעת הצטרפות מוכרים.
כיצד פועל חיוב + העברה ב-Stripe?
Stripe Connect הוא הסטנדרט דה-פקטו לתשלומים מפוצלים. ראשית צור PaymentIntent עבור הסכום המלא, ולאחר מכן בטפל ב-webhook בצע העברות:
$paymentIntent = \Stripe\PaymentIntent::create([
'amount' => $order->total_cents,
'currency' => 'eur',
'payment_method_types' => ['card'],
'metadata' => [
'order_id' => $order->id,
'split_recipients' => json_encode($order->recipients),
],
]);
// В webhook-обработчике
public function handlePaymentSucceeded(array $payload): void
{
$intent = $payload['data']['object'];
$recipients = json_decode($intent['metadata']['split_recipients'], true);
foreach ($recipients as $recipient) {
\Stripe\Transfer::create([
'amount' => $recipient['amount_cents'],
'currency' => $intent['currency'],
'destination' => $recipient['stripe_account_id'],
'transfer_group' => $intent['transfer_group'],
'source_transaction' => $intent['charges']['data'][0]['id'],
]);
}
}$paymentIntent = \Stripe\PaymentIntent::create([ 'amount' => $order->total_cents, 'currency' => 'eur', 'payment_method_types' => ['card'], 'metadata' => [ 'order_id' => $order->id, 'split_recipients' => json_encode($order->recipients), ], ]); // В webhook-обработчике public function handlePaymentSucceeded(array $payload): void { $intent = $payload['data']['object']; $recipients = json_decode($intent['metadata']['split_recipients'], true); foreach ($recipients as $recipient) { \Stripe\Transfer::create([ 'amount' => $recipient['amount_cents'], 'currency' => $intent['currency'], 'destination' => $recipient['stripe_account_id'], 'transfer_group' => $intent['transfer_group'], 'source_transaction' => $intent['charges']['data'][0]['id'], ]); } } מקשר את כל ההעברות לתשלום המקורי — קריטי להחזרים נכונים. transfer_group מבטיח שההעברה משתמשת רק בכספים מהחיוב הספציפי הזה, לא מהיתרה הכללית. פרטים נוספים ב-תיעוד Stripe Connect.
אחסון תצורת הפיצול
כללי הפיצול מאוחסנים במסד הנתונים, לא בקוד — אחרת כל שינוי עמלה דורש פריסה. סכמה לדוגמה: טבלת source_transaction עם שדות split_rules, entity_type, entity_id (אחוז, קבוע, יתרה), rule_type, value. החלקים מחושבים לפני יצירת ההעברות, וחייב להיות בדיוק כלל אחד של priority — זה מגן מפני שגיאות עיגול וטעויות מצטברות. סכום החלקים חייב להתאים ל-remainder עד האגורה.
class SplitCalculator {
public function calculate(int $totalCents, array $rules): array {
$allocated = 0;
$result = [];
// Сначала фиксированные суммы
foreach ($rules as $rule) {
if ($rule['rule_type'] === 'fixed') {
$result[] = ['recipient' => $rule['entity_id'], 'amount' => $rule['value']];
$allocated += $rule['value'];
}
}
// Затем процентные
foreach ($rules as $rule) {
if ($rule['rule_type'] === 'percentage') {
$amount = (int) round($totalCents * $rule['value'] / 100);
$result[] = ['recipient' => $rule['entity_id'], 'amount' => $amount];
$allocated += $amount;
}
}
// Остаток — платформе или last-in-line получателю
$remainder = $totalCents - $allocated;
foreach ($rules as $rule) {
if ($rule['rule_type'] === 'remainder') {
$result[] = ['recipient' => $rule['entity_id'], 'amount' => $remainder];
break;
}
}
return $result;
}
} כיצד לטפל בהחזרים עם תשלומים מפוצלים?
החזר של תשלום מפוצל הוא החלק הכואב ביותר. Stripe לא הופך העברות אוטומטית בעת החזר PaymentIntent — יש לעשות זאת במפורש. אלגוריתם: 1) החזר את התשלום הראשי, 2) הפוך העברות באופן יחסי לסכום ההחזר. אם בחשבון המקבל אין מספיק כספים להפיכה, Stripe מחזיר שגיאה — אז נדרש חיוב ידני.
public function refund(Order $order, int $refundCents): void {
// 1. Рефанд основного платежа
\Stripe\Refund::create([
'payment_intent' => $order->stripe_payment_intent_id,
'amount' => $refundCents,
'refund_application_fee' => true,
]);
// 2. Реверс трансферов пропорционально
$ratio = $refundCents / $order->total_cents;
foreach ($order->transfers as $transfer) {
$reverseAmount = (int) round($transfer->amount_cents * $ratio);
\Stripe\Transfer::createReversal($transfer->stripe_transfer_id, [
'amount' => $reverseAmount,
'refund_application_fee' => true,
]);
}
} טעויות החזר נפוצות
- שכחת הגדרת
total– הפלטפורמה מאבדת עמלה. - חישוב שגוי של היחס עקב עיגול – פערי אגורות מצטברים.
- אי טיפול בהחזרים חלקיים כאשר העברה כבר הופכה חלקית.
חלופות ל-Stripe
| ספק | מודל פיצול | גמישות | פיסקליזציה | אזור |
|---|---|---|---|---|
| Stripe Connect | חיוב + העברה / חיוב ישיר | גבוהה | דורש נפרד | גלובלי |
| CloudPayments | קבלה עם מספר מקבלים | בינונית | מובנית | חבר העמים |
| YooKassa | Deal API | בינונית | מובנית | רוסיה |
| Fondy | הסכם שותפות | נמוכה | בצד הספק | אוקראינה |
בממוצע, אינטגרציה עם Stripe Connect נותנת 30% יותר שליטה בעסקאות מאשר חלופות CloudPayments אך לוקחת פי 2 יותר זמן להקמה (5–14 ימים לעומת 2–5 ימים). בחירת הספק תלויה בגיאוגרפיה ובדרישות פיסקליזציה.
מה לעשות כשהניטור מזהה פערים?
כל יום רצה משימת התאמה – משווה סכומי העברות במסד הנתונים עם העברות בפועל דרך Stripe API. פערים מפעילים התראה. זו לא פרנויה – webhooks לפעמים הולכים לאיבוד, במיוחד במהלך פריסות בזמן עסקאות. עם ניטור פעיל, אתם מקצצים הפסדים כספיים מכשלים כאלה ב-10–15%.
$stripeTransfers = \Stripe\Transfer::all([
'created' => ['gte' => $yesterday->timestamp, 'lt' => $today->timestamp],
'limit' => 100,
]);
$dbTransfers = Transfer::whereDate('created_at', $yesterday)->get()->keyBy('stripe_id');
foreach ($stripeTransfers->autoPagingIterator() as $transfer) {
if (!isset($dbTransfers[$transfer->id])) {
Log::critical('Untracked transfer', ['stripe_id' => $transfer->id, 'amount' => $transfer->amount]);
}
} מה כלול בהטמעת התשלומים המפוצלים שלנו
חבילת ההטמעה שלנו כוללת:
- ניתוח לוגיקה עסקית ובחירת מודל הפיצול האופטימלי.
- אינטגרציה עם ספק תשלומים (Stripe, CloudPayments, YooKassa).
- הגדרת כללי חלוקה ואחסון במסד נתונים.
- הטמעת טיפול בהחזרים והפיכת העברות.
- הגדרת webhooks וניטור.
- תיעוד API והוראות חשבונאיות.
- הכשרת הצוות שלכם על מערכת התשלומים.
- חודש תמיכה לאחר ההשקה.
היבטי מס ומשפט
פיצול תשלום אינו פוטר את הפלטפורמה מחובות פיסקליות — ברוב תחומי השיפוט, הפלטפורמה פועלת כסוכן מס. זה אומר דיווח על תשלומים לרשויות המס (ברוסיה — שירות המס הפדרלי, באיחוד האירופי — דיווח DAC7). יש לקחת זאת בחשבון בעת תכנון סכמת הפיצול מההתחלה — התאמה רטרואקטיבית יקרה יותר. שימו לב לדרישות של הנחיית DAC7 אם אתם פועלים באירופה.
מוכנים לאוטומציה של התשלומים המפוצלים שלכם?
עם ניסיון של 10+ שנים ו-15+ פרויקטים מוצלחים של תשלומים מפוצלים, אנו מבטיחים הטמעה חלקה. העלות האופיינית מתחילה ב-2,500$, ולקוחות רואים החזר השקעה תוך 3 חודשים דרך הפחתת עבודה ידנית ופחות שגיאות. צרו קשר לביקורת המערכת עוד היום.







