اذهب إلى المحتوى
  • 0

Python | Django | multi-vendor

Omar Mohamed52

السؤال

السلام عليكم 

اريد ان اعرف موضوع يخص ال multi-vendor كيف بيتم بشكل صحيح وللتوضيح اكثر مثلا موقع مستقل العميل يدفع المبلغ ومستقل ياخذ ال 15% والمبرمج ياخد ال 85% ف فكرتها ان بيتم عمل متغيرين لتخزين القيم لمستقل وللمبرمج مثلا لاكن كيف يتم تحويل المبلغ لبوابتين او لبوابة الاساسية وهي بوابة مستقل بعدها بيتم التحويل لبوابة المبرمج مثلا 

وشكرا لكم مقدما

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

عندما يدفع العميل المبلغ، يتم تحصيله عبر بوابة دفع مثل Stripe أو PayPal، و في هذه المرحلة المبلغ يتم تحويله إلى حساب المنصة، بعدها تقوم المنصة بحساب النسبة التي سيتم أخذها كعمولة، و يمكن تخزين هذه النسب في متغيرين أو حقول في قاعدة البيانات بهذا الشكل:

platform_fee_percentage = 0.15
programmer_fee_percentage = 0.85

total_amount = 1000  # المبلغ المدفوع من قبل العميل
platform_fee = total_amount * platform_fee_percentage
programmer_fee = total_amount * programmer_fee_percentage

بعد حساب النسب، هناك طريقتان لتوزيع المبلغ، حيث يمكن للمنصة، أن تقوم بتحويل المبلغ تلقائيا إلى حساب المبرمج على بوابة الدفع بعد خصم العمولة، في هذه الحالة يتم إجراء تحويلين، تحويل العمولة إلى حساب المنصة، و تحويل المبلغ المتبقي إلى حساب المبرمج.

و بعض الأنظمة تحتفظ بالمبلغ بالكامل في حساب المنصة لفترة معينة حتى يتم تأكيد انتهاء العمل، وبعد ذلك يتم توزيع المبالغ، و عند تأكيد العمل يتم تحويل النسبة المستحقة للمبرمج بشكل تلقائي.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال Chihab Hedidi:

عندما يدفع العميل المبلغ، يتم تحصيله عبر بوابة دفع مثل Stripe أو PayPal، و في هذه المرحلة المبلغ يتم تحويله إلى حساب المنصة، بعدها تقوم المنصة بحساب النسبة التي سيتم أخذها كعمولة، و يمكن تخزين هذه النسب في متغيرين أو حقول في قاعدة البيانات بهذا الشكل:

platform_fee_percentage = 0.15
programmer_fee_percentage = 0.85

total_amount = 1000  # المبلغ المدفوع من قبل العميل
platform_fee = total_amount * platform_fee_percentage
programmer_fee = total_amount * programmer_fee_percentage

بعد حساب النسب، هناك طريقتان لتوزيع المبلغ، حيث يمكن للمنصة، أن تقوم بتحويل المبلغ تلقائيا إلى حساب المبرمج على بوابة الدفع بعد خصم العمولة، في هذه الحالة يتم إجراء تحويلين، تحويل العمولة إلى حساب المنصة، و تحويل المبلغ المتبقي إلى حساب المبرمج.

و بعض الأنظمة تحتفظ بالمبلغ بالكامل في حساب المنصة لفترة معينة حتى يتم تأكيد انتهاء العمل، وبعد ذلك يتم توزيع المبالغ، و عند تأكيد العمل يتم تحويل النسبة المستحقة للمبرمج بشكل تلقائي.

 

نعم عرفت كل هذا بعد عمليات البحث والقراءه ولاكن ايضا اريد توضيح العملية بشكل اكبر برمجيا 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 26 دقائق مضت قال Omar Mohamed52:

نعم عرفت كل هذا بعد عمليات البحث والقراءه ولاكن ايضا اريد توضيح العملية بشكل اكبر برمجيا 

نفترض أنك تستخدم مكتبة للتعامل مع بوابة دفع مثل Stripe،  سسقوم بإعداد دالة لتحصيل المبلغ من العميل، ثم دالة لتوزيع المبالغ بين المنصة والمبرمج، و يمكنك استخدام واجهة برمجة تطبيقات لبوابة الدفع لتحصيل المبلغ، هذا هو مثال مبسط لتحصيل المبلغ:

import stripe


def charge_customer(customer_id, amount):
    try:
        charge = stripe.Charge.create(
            amount=int(amount * 100),  # المبلغ بالـ cents
            currency="usd",
            customer=customer_id,
            description="Payment for services"
        )
        return charge
    except stripe.error.StripeError as e:
        print(f"Error charging customer: {e}")
        return None

# تحصيل المبلغ من العميل
charge = charge_customer("cus_J5hPjXxU8bF7Zk", total_amount)

بعد تحصيل المبلغ، نحتاج الآن لتحويل النسب لكل من المنصة والمبرمج، بهذا الشكل:

def transfer_funds(to_account_id, amount):
    try:
        transfer = stripe.Transfer.create(
            amount=int(amount * 100),  # المبلغ بالـ cents
            currency="usd",
            destination=to_account_id,
            description="Transfer to account"
        )
        return transfer
    except stripe.error.StripeError as e:
        print(f"Error transferring funds: {e}")
        return None

# تحويل العمولة إلى حساب المنصة
platform_transfer = transfer_funds("acct_1J5hPj2eZvKYlo2C", platform_fee)

# تحويل المبلغ المتبقي إلى حساب المبرمج
programmer_transfer = transfer_funds("acct_1J6hKl2eZvKYlo2K", programmer_fee)

و يجب أيضا تسجيل جميع العمليات في قاعدة بيانات لمتابعة السجلات ومعالجة أي مشكلات لاحقا، يمكنك استخدام قاعدة بيانات مثل PostgreSQL أو MySQL لتخزين البيانات.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعة قال Chihab Hedidi:

نفترض أنك تستخدم مكتبة للتعامل مع بوابة دفع مثل Stripe،  سسقوم بإعداد دالة لتحصيل المبلغ من العميل، ثم دالة لتوزيع المبالغ بين المنصة والمبرمج، و يمكنك استخدام واجهة برمجة تطبيقات لبوابة الدفع لتحصيل المبلغ، هذا هو مثال مبسط لتحصيل المبلغ:

import stripe


def charge_customer(customer_id, amount):
    try:
        charge = stripe.Charge.create(
            amount=int(amount * 100),  # المبلغ بالـ cents
            currency="usd",
            customer=customer_id,
            description="Payment for services"
        )
        return charge
    except stripe.error.StripeError as e:
        print(f"Error charging customer: {e}")
        return None

# تحصيل المبلغ من العميل
charge = charge_customer("cus_J5hPjXxU8bF7Zk", total_amount)

بعد تحصيل المبلغ، نحتاج الآن لتحويل النسب لكل من المنصة والمبرمج، بهذا الشكل:

def transfer_funds(to_account_id, amount):
    try:
        transfer = stripe.Transfer.create(
            amount=int(amount * 100),  # المبلغ بالـ cents
            currency="usd",
            destination=to_account_id,
            description="Transfer to account"
        )
        return transfer
    except stripe.error.StripeError as e:
        print(f"Error transferring funds: {e}")
        return None

# تحويل العمولة إلى حساب المنصة
platform_transfer = transfer_funds("acct_1J5hPj2eZvKYlo2C", platform_fee)

# تحويل المبلغ المتبقي إلى حساب المبرمج
programmer_transfer = transfer_funds("acct_1J6hKl2eZvKYlo2K", programmer_fee)

و يجب أيضا تسجيل جميع العمليات في قاعدة بيانات لمتابعة السجلات ومعالجة أي مشكلات لاحقا، يمكنك استخدام قاعدة بيانات مثل PostgreSQL أو MySQL لتخزين البيانات.

اذا كانت البوابة هي Moyasar فكيفة التعامل معها لان اعتقد انها لا تدعم هذا الامر؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بشكل  high-level overview وبدون تفصيل، عليك أولاً إنشاء الـ Models:

نموذج البائع Vendor :

  • name: اسم البائع (نص).
  • commission_rate: نسبة عمولة البائع (رقم عشري، افتراضياً 0.15 أي 15%).

ونموذج المعاملة Transaction:

  • vendor: الرابط بالبائع الذي تمت المعاملة معه (مفتاح أجنبي).
  • amount: إجمالي قيمة الدفع (رقم عشري).
  • payment_date: تاريخ الدفع (تاريخ ووقت).
  • commission_amount: قيمة عمولة البائع (رقم عشري، افتراضياً 0).
  • admin_amount: قيمة المبلغ الذي يحصل عليه المسؤول (رقم عشري، افتراضياً 0).

ثم ربط تطبيق Django ببوابة دفع مثل PayPal أو Stripe وعند قيام العميل بالدفع، ستقوم بوابة الدفع بإرسال إشعار إلى تطبيقك.

منطق تقسيم الدفع سيتم كالتالي، عند استلام إشعار الدفع، يتم إنشاء كائن جديد في نموذج Transaction ثم يتم حساب قيمة عمولة البائع وقيمة المبلغ الذي يحصل عليه المسؤول حسب نسبة عمولة البائع.

def process_payment(payment_data):
    vendor = Vendor.objects.get(id=payment_data['vendor_id'])

    transaction = Transaction.objects.create(
        vendor=vendor,
        amount=payment_data['amount'],
    )

    commission_amount = transaction.amount * vendor.commission_rate

    admin_amount = transaction.amount - commission_amount

    transaction.commission_amount = commission_amount
    transaction.admin_amount = admin_amount
    transaction.save()

    transfer_funds_to_vendor(vendor, commission_amount)
    transfer_funds_to_admin(admin_amount)

ثم نأتي إلى تحويل الأموال، من خلال تنفيذ الدالتين transfer_funds_to_vendor و transfer_funds_to_admin لتحويل المبالغ المحسوبة إلى حسابات البائع والمسؤول على التوالي، وتستطيع القيام بذلك باستخدام واجهة برمجة تطبيقات بوابة الدفع أو خدمة خارجية، كالتالي:

  • دفع العميل مبلغ 100 دولار للبائع بنسبة عمولة 15٪.
  • ستقوم الدالة process_payment بإنشاء كائن Transaction بقيمة 100 دولار.
  • ستحسب الدالة قيمة عمولة البائع: 100 * 0.15 = 15 دولار.
  • ستحسب الدالة قيمة المبلغ الذي يحصل عليه المسؤول: 100 - 15 = 85 دولار.
  • ستقوم الدالة بتحديث كائن Transaction بالقيم المحسوبة.
  • ستقوم الدالة بتحويل 15 دولارًا إلى حساب البائع و 85 دولارًا إلى حساب المسؤول (المبرمج).

بالطبع ذلك مثال مبسط، ويجب مراعاة تنفيذ منطق إضافي للتعامل مع الأخطاء والمبالغ المستردة والحالات الأخرى.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 18 دقائق مضت قال Mustafa Suleiman:

بشكل  high-level overview وبدون تفصيل، عليك أولاً إنشاء الـ Models:

نموذج البائع Vendor :

  • name: اسم البائع (نص).
  • commission_rate: نسبة عمولة البائع (رقم عشري، افتراضياً 0.15 أي 15%).

ونموذج المعاملة Transaction:

  • vendor: الرابط بالبائع الذي تمت المعاملة معه (مفتاح أجنبي).
  • amount: إجمالي قيمة الدفع (رقم عشري).
  • payment_date: تاريخ الدفع (تاريخ ووقت).
  • commission_amount: قيمة عمولة البائع (رقم عشري، افتراضياً 0).
  • admin_amount: قيمة المبلغ الذي يحصل عليه المسؤول (رقم عشري، افتراضياً 0).

ثم ربط تطبيق Django ببوابة دفع مثل PayPal أو Stripe وعند قيام العميل بالدفع، ستقوم بوابة الدفع بإرسال إشعار إلى تطبيقك.

منطق تقسيم الدفع سيتم كالتالي، عند استلام إشعار الدفع، يتم إنشاء كائن جديد في نموذج Transaction ثم يتم حساب قيمة عمولة البائع وقيمة المبلغ الذي يحصل عليه المسؤول حسب نسبة عمولة البائع.

def process_payment(payment_data):
    vendor = Vendor.objects.get(id=payment_data['vendor_id'])

    transaction = Transaction.objects.create(
        vendor=vendor,
        amount=payment_data['amount'],
    )

    commission_amount = transaction.amount * vendor.commission_rate

    admin_amount = transaction.amount - commission_amount

    transaction.commission_amount = commission_amount
    transaction.admin_amount = admin_amount
    transaction.save()

    transfer_funds_to_vendor(vendor, commission_amount)
    transfer_funds_to_admin(admin_amount)

ثم نأتي إلى تحويل الأموال، من خلال تنفيذ الدالتين transfer_funds_to_vendor و transfer_funds_to_admin لتحويل المبالغ المحسوبة إلى حسابات البائع والمسؤول على التوالي، وتستطيع القيام بذلك باستخدام واجهة برمجة تطبيقات بوابة الدفع أو خدمة خارجية، كالتالي:

  • دفع العميل مبلغ 100 دولار للبائع بنسبة عمولة 15٪.
  • ستقوم الدالة process_payment بإنشاء كائن Transaction بقيمة 100 دولار.
  • ستحسب الدالة قيمة عمولة البائع: 100 * 0.15 = 15 دولار.
  • ستحسب الدالة قيمة المبلغ الذي يحصل عليه المسؤول: 100 - 15 = 85 دولار.
  • ستقوم الدالة بتحديث كائن Transaction بالقيم المحسوبة.
  • ستقوم الدالة بتحويل 15 دولارًا إلى حساب البائع و 85 دولارًا إلى حساب المسؤول (المبرمج).

بالطبع ذلك مثال مبسط، ويجب مراعاة تنفيذ منطق إضافي للتعامل مع الأخطاء والمبالغ المستردة والحالات الأخرى.

هل تعرف بوابة Moyasar وكيفية التعامل معها؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...