I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

بناء أنظمة الدفع متعددة البائعين (Multi-vendor Split Payments) باستخدام Laravel و Stripe

بناء أنظمة الدفع متعددة البائعين (Multi-vendor Split Payments) باستخدام Laravel و Stripe لو شغال على مشروع منصة تجارة إلكترونية (E-commerce Marketplace) أكيد جا

بناء أنظمة الدفع متعددة البائعين (Multi-vendor Split Payments) باستخدام Laravel و Stripe
Reading Count: 3

بناء أنظمة الدفع متعددة البائعين (Multi-vendor Split Payments) باستخدام Laravel و Stripe

لو شغال على مشروع منصة تجارة إلكترونية (E-commerce Marketplace) أكيد جالك في وقت من الأوقات السؤال المرعب: إزاي أوزع الفلوس بين صاحب المنصة والبائع (Vendor) بشكل أوتوماتيكي ومن غير وجع دماغ؟ تخيل لو عندك 100 عملية بيع في اليوم، هتقعد تحول لكل بائع فلوسه يدوي؟ طبعاً ده مستحيل ومخاطرة كبيرة. النهاردة هنشرح إزاي تحل المشكلة دي باستخدام إطار العمل لارافيل (Laravel) وبوابة الدفع الشهيرة سترايب (Stripe).

ليه بنحتاج نظام تقسيم المدفوعات (Split Payments)؟

في الأنظمة التقليدية، الفلوس كلها بتدخل حسابك، وبعدين بتبدأ تحسب عمولتك وتحول الباقي للبائعين. الطريقة دي مش بس مرهقة، دي كمان بتخليك مسؤول ضريبياً وقانونياً عن كل قرش بيدخل حسابك. الحل الأفضل هو استخدام Stripe Connect، واللي بيسمحلك تعمل تقسيم للفلوس (Split Payments) لحظة ما العميل يدفع، بحيث عمولتك تروح حسابك، ونصيب البائع يروح حسابه بشكل مباشر.

الخطوة الأولى: إعداد Stripe Connect في Laravel

أول حاجة لازم تعملها هي ربط حسابات البائعين عندك بحساباتهم على سترايب. استخدم حزمة stripe/stripe-php. عشان تبدأ، لازم تنشئ حساب مستخدم (Connected Account) لكل بائع عندك:

$account = \Stripe\Account::create([ 'type' => 'express', 'email' => '[email protected]', ]);

كده أنت أنشأت هوية للبائع على سترايب، تقدر تحفظ الـ id الخاص بيه في قاعدة بياناتك (Database) عشان تستخدمه في عمليات الدفع.

الخطوة الثانية: تنفيذ عملية الدفع المقسمة (Payment Intents)

هنا بيحصل السحر. لما العميل يشتري منتج، بنستخدم الـ PaymentIntent ونحدد الـ application_fee_amount، وهو ده نصيب المنصة بتاعك. الباقي هيروح تلقائياً للبائع:

$paymentIntent = \Stripe\PaymentIntent::create([ 'amount' => 10000, // المبلغ الكلي بالسنت 'currency' => 'usd', 'transfer_data' => [ 'destination' => 'acct_123456789', // ID حساب البائع ], 'application_fee_amount' => 1000, // عمولتك أنت (10%) ]);

في الكود ده، سترايب (Stripe) بياخد الـ 100 دولار، بيخصم منها الـ 10 دولار بتوعك، وبيبعت الـ 90 دولار لحساب البائع في لمح البصر.

الخطوة الثالثة: التعامل مع المرتجعات (Refunds)

ده الجزء اللي بيخوف أغلب المبرمجين. لما العميل يطلب استرجاع (Refund)، لازم تاخد بالك إنك لازم تعمل "رد" للمبلغ من حساب البائع برضه. لو عملت ريفند للمبلغ كله من حسابك بس، هتخسر عمولتك وهتلاقي حساب البائع لسه فيه فلوس مش بتاعته.

عشان تعمل ريفند صح، لازم تستخدم الـ refund_application_fee عشان سترايب يرجع عمولتك إنت كمان للعميل:

\Stripe\Refund::create([ 'payment_intent' => 'pi_12345', 'refund_application_fee' => true, 'reverse_transfer' => true, ]);

نصيحة من أخ لمبرمج

التعامل مع الفلوس في الكود (Financial APIs) بيحتاج دقة عالية. نصيحتي ليك: دايماً استخدم الـ Webhooks عشان تتأكد إن العملية تمت بنجاح في قاعدة بياناتك بعد ما سترايب يبعتلك التأكيد. متعتمدش أبداً على استجابة الـ API في صفحة الدفع (Checkout) فقط، لأن النت ممكن يقطع أو العميل يقفل الصفحة. خلي نظامك مرن (Robust) وقوي بحيث يقدر يعالج فشل أي عملية في الخلفية.

اتعلم تقرأ الـ Documentation بتاع سترايب كويس جداً، لأنهم بيحدثوا الـ API باستمرار، ومتابعتك للتحديثات دي هي اللي هتفرق بين المبرمج الهاوي والمبرمج المحترف اللي بيعتمد عليه في بناء بيزنس حقيقي.


Share

Related posts

Jun 26, 2026 • 1 min read
Reading Count: 4
إزاي تحمي الـ REST APIs من أخطر ثغرات الوصول غير المصرح به (BOLA و BFTA)

إزاي تحمي الـ REST APIs من أخطر ثغرات الوصول غير المصرح به (BOLA و BFTA) تخيل يا صديقي المبرمج إنك ق...

Jun 25, 2026 • 1 min read
Reading Count: 6
إزاي تحسن أداء تطبيقات فلاتر (Flutter) الكبيرة باستخدام العزل (Isolates)

إزاي تحسن أداء تطبيقات فلاتر (Flutter) الكبيرة باستخدام العزل (Isolates) أكيد مريت بالموقف ده: بتبني...

Jun 25, 2026 • 1 min read
Reading Count: 8
مستقبل الـ Styling: ليه الـ CSS-in-JS بدأ يرجع لورا والـ Utility-First هو اللي سايق؟

مستقبل الـ Styling: ليه الـ CSS-in-JS بدأ يرجع لورا والـ Utility-First هو اللي سايق؟ لو أنت مبرمج Fr...