المتطلبات الأساسية
لدمج واجهة برمجة تطبيقات مدفوعات دودو، ستحتاج إلى:- حساب تاجر مدفوعات دودو
- بيانات اعتماد واجهة برمجة التطبيقات (مفتاح API ومفتاح سرية webhook) من لوحة التحكم
تكامل واجهة برمجة التطبيقات
جلسات الدفع
استخدم جلسات الدفع Checkout Sessions لبيع منتجات الاشتراك من خلال صفحة دفع مستضافة وآمنة. مرّر منتج الاشتراك الخاص بك فيproduct_cart وأعد توجيه العملاء إلى checkout_url.
- Node.js SDK
- Python SDK
- REST API
استجابة واجهة برمجة التطبيقات
فيما يلي مثال على الاستجابة:checkout_url.
Webhooks
عند دمج الاشتراكات، ستستلم webhooks لمتابعة دورة حياة الاشتراك. تساعدك هذه webhooks في إدارة حالات الاشتراك وسيناريوهات الدفع بشكل فعال. لإعداد نقطة نهاية webhook الخاصة بك، يُرجى اتباع دليل التكامل التفصيلي.أنواع أحداث الاشتراك
تتبع الأحداث التالية في webhook تغييرات حالة الاشتراك:subscription.active- تم تنشيط الاشتراك بنجاح.subscription.updated- تم تحديث كائن الاشتراك (يتم تشغيله عند تغيير أي حقل).subscription.on_hold- تم تعليق الاشتراك بسبب فشل التجديد.subscription.failed- فشل إنشاء الاشتراك أثناء إنشاء التفويض.subscription.renewed- تم تجديد الاشتراك لفترة الفوترة التالية.
سيناريوهات الدفع
تدفق الدفع الناجح تعتمد إشعارات webhooks التي تتلقاها وتوقيتها على ما إذا كان المنتج يتضمن فترة تجريبية. الفوترة الفورية (0 أيام تجريبية):subscription.active: تتم الموافقة على التفويض وتفعيل الاشتراك.payment.succeeded: يؤكد عملية الخصم الأولى. توقّع وصوله خلال دقيقتين إلى 10 دقائق من إتمام الدفع.
- عند بدء الفترة التجريبية (إتمام الدفع): يتم تشغيل
subscription.activeبعد الموافقة على طريقة الدفع. لا يتم تحصيل أي مبلغ متكرر حتى الآن. يتم تأجيل الخصم الحقيقي الأول حتى انتهاء الفترة التجريبية. - عند انتهاء الفترة التجريبية: يتم تحصيل المبلغ المتكرر، وتتلقى
payment.succeededمعsubscription.renewed.
subscription.renewed: يتم تشغيله في كل دورة فوترة عند خصم دفعة التجديد، ودائمًا بالتزامن معpayment.succeeded. كما يتضمنnext_billing_dateالمحدّث.
عند خصم مبلغ فعليًا لاشتراك، تتلقى
subscription.renewed و payment.succeeded. استخدم subscription.renewed (بدلًا من payment.succeeded وحده) كإشارة لتمديد الوصول للدورة التالية.- فشل الاشتراك
subscription.failed- فشل إنشاء الاشتراك بسبب تعذّر إنشاء التفويض.payment.failed- يشير إلى فشل الدفع.
- تعليق الاشتراك
subscription.on_hold- تم تعليق الاشتراك بسبب فشل دفعة التجديد أو فشل خصم تغيير الخطة.- عند تعليق الاشتراك، لن يتم تجديده تلقائيًا حتى يتم تحديث طريقة الدفع.
أفضل ممارسة: لتبسيط عملية التنفيذ، نوصي بمتابعة أحداث الاشتراك بشكل أساسي لإدارة دورة حياة الاشتراك.
subscription.failed مقابل subscription.on_hold
من السهل الخلط بين هذين الحدثين، لكنهما يتطلبان معالجة مختلفة تمامًا:
معالجة الاشتراك المعلّق
عندما يدخل الاشتراك في حالةon_hold، يجب تحديث طريقة الدفع لإعادة تفعيله. يشرح هذا القسم متى يتم تعليق الاشتراكات وكيفية معالجتها.
متى يتم تعليق الاشتراكات
يتم تعليق الاشتراك عندما:- تفشل دفعة التجديد: تفشل رسوم التجديد التلقائية بسبب عدم كفاية الرصيد أو انتهاء صلاحية البطاقة أو رفض البنك
- تفشل رسوم تغيير الخطة: تفشل رسوم فورية أثناء ترقية الخطة أو تخفيضها
- تفشل الموافقة على طريقة الدفع: يتعذّر اعتماد طريقة الدفع للرسوم المتكررة
إعادة تفعيل الاشتراكات المعلّقة
لإعادة تفعيل اشتراك في حالةon_hold، استخدم Update Payment Method API. سيقوم ذلك تلقائيًا بما يلي:
- إنشاء رسوم بالمبالغ المستحقة المتبقية
- إنشاء فاتورة بالرسوم
- معالجة الدفع باستخدام طريقة الدفع الجديدة
- إعادة تفعيل الاشتراك إلى حالة
activeعند نجاح الدفع
1
Handle subscription.on_hold webhook
عند تلقي webhook من نوع
subscription.on_hold، حدّث حالة تطبيقك وأبلغ العميل:2
Update payment method
عندما يكون العميل مستعدًا لتحديث طريقة الدفع، استدعِ Update Payment Method API:
يمكنك أيضًا استخدام معرّف طريقة دفع موجود إذا كان العميل قد حفظ طرق دفع:
3
Monitor webhook events
بعد تحديث طريقة الدفع، راقب أحداث webhook التالية:
payment.succeeded- نجح تحصيل المبالغ المستحقة المتبقيةsubscription.active- تمت إعادة تفعيل الاشتراك
نموذج لحمولة حدث اشتراك
تغيير خطط الاشتراك
يمكنك ترقية خطة الاشتراك أو تخفيضها باستخدام نقطة نهاية change plan API. يتيح لك ذلك تعديل منتج الاشتراك وكميته ومعالجة التقسيم النسبي.Change Plan API Reference
للحصول على معلومات تفصيلية حول تغيير خطط الاشتراك، يُرجى الرجوع إلى وثائق Change Plan API.
خيارات التقسيم النسبي
عند تغيير خطط الاشتراك، يتوفر لديك خياران لمعالجة الرسوم الفورية:1. prorated_immediately
- يحسب المبلغ المقسّم نسبيًا بناءً على الوقت المتبقي في دورة الفوترة الحالية
- يحمّل العميل الفرق فقط بين الخطة القديمة والجديدة
- خلال الفترة التجريبية، ينقل المستخدم فورًا إلى الخطة الجديدة ويحمّل العميل المبلغ مباشرةً
2. full_immediately
- يحمّل العميل مبلغ الاشتراك الكامل للخطة الجديدة
- يتجاهل أي وقت أو أرصدة متبقية من الخطة السابقة
- مفيد عندما تريد إعادة ضبط دورة الفوترة أو تحصيل المبلغ الكامل بغض النظر عن التقسيم النسبي
3. difference_immediately
- عند الترقية، يتم تحميل العميل فورًا الفرق بين مبلغي الخطتين.
- على سبيل المثال، إذا كانت الخطة الحالية بقيمة 30 دولارًا وقام العميل بالترقية إلى خطة بقيمة 80 دولارًا، فسيتم تحميله 50 دولارًا فورًا.
- عند التخفيض، تتم إضافة المبلغ غير المستخدم من الخطة الحالية كرصيد داخلي وتطبيقه تلقائيًا على تجديدات الاشتراك المستقبلية.
- على سبيل المثال، إذا كانت الخطة الحالية بقيمة 50 دولارًا وانتقل العميل إلى خطة بقيمة 20 دولارًا، فسيتم إضافة المبلغ المتبقي، وهو 30 دولارًا، إلى الرصيد واستخدامه في دورة الفوترة التالية.
4. do_not_bill
- يطبّق تغيير الخطة فورًا، لكنه لا يفرض أي رسوم وقت التغيير.
- تتم فوترة الخطة المحدّثة (والكمية/الإضافات) عند التجديد المجدول التالي، مع الحفاظ على تاريخ الفوترة الأصلي.
السلوك
- عند استدعاء واجهة API هذه، يبدأ Dodo Payments فورًا تحصيل رسوم بناءً على خيار التقسيم النسبي المحدد
- إذا كان تغيير الخطة تخفيضًا واستخدمت
prorated_immediately، فسيتم حساب الأرصدة وإضافتها تلقائيًا إلى رصيد الاشتراك. وتكون هذه الأرصدة خاصة بذلك الاشتراك ولن تُستخدم إلا لمقاصة الدفعات المتكررة المستقبلية للاشتراك نفسه - يتجاوز خيار
full_immediatelyحساب الأرصدة ويحصّل المبلغ الكامل للخطة الجديدة
معالجة الرسوم
- عادةً ما تكتمل معالجة الرسوم الفورية التي تبدأ عند تغيير الخطة خلال أقل من دقيقتين
- إذا فشلت هذه الرسوم الفورية لأي سبب، فسيتم تعليق الاشتراك تلقائيًا حتى حل المشكلة
الاشتراكات عند الطلب
تتيح لك الاشتراكات عند الطلب تحصيل الرسوم من العملاء بمرونة، وليس وفق جدول ثابت فقط. وهذه الميزة متاحة لجميع الحسابات.
on_demand في نص الطلب. يتيح لك ذلك اعتماد طريقة دفع دون تحصيل فوري، أو تعيين سعر أولي مخصص.
لتحصيل رسوم من اشتراك عند الطلب:
بالنسبة إلى الرسوم اللاحقة، استخدم نقطة النهاية POST /subscriptions//charge وحدد المبلغ المراد تحصيله من العميل لهذه المعاملة.
للحصول على دليل كامل خطوة بخطوة (بما في ذلك أمثلة الطلبات/الاستجابات وسياسات إعادة المحاولة الآمنة ومعالجة webhooks)، راجع دليل الاشتراكات عند الطلب.
أهم المعلومات حول فوترة الاشتراكات
تتطلب الفترات التجريبية تفويضًا بقيمة $0، وليس تحصيلًا. عندما يتضمن الاشتراك فترة تجريبية، ينشئ بدء الفترة التجريبية تفويضًا بقيمة $0 لحفظ البطاقة؛ ويحدث الخصم الحقيقي الأول عند انتهاء الفترة التجريبية. في قائمة المدفوعات، يظهر الاشتراك خلال الفترة التجريبية بدفعة واحدة بالضبط تتضمن
amount: 0.دورة حياة الاشتراك:
on_hold = فشل التجديد (قابل للاسترداد: اطلب من العميل تحديث طريقة الدفع؛ وتنطبق محاولات إعادة التحصيل). expired = انتهت المدة دون تجديد ولا يمكن إعادة تفعيله. يجب على العميل إعادة الاشتراك. cancelled = أنهى العميل أو التاجر الاشتراك. معظم حالات فشل التجديد هي عمليات رفض من جهة المُصدر (عدم كفاية الرصيد أو رفض البطاقة)، وليست خطأً من Dodo.مرجع API ذي صلة
Create Subscription
مرجع API لإنشاء منتجات الاشتراك وإدارة دورة حياة الاشتراك
Change Subscription Plan
مرجع API لترقية خطط الاشتراك أو تخفيضها أو تغييرها باستخدام خيارات التقسيم النسبي
Update Payment Method
مرجع API لتحديث طرق الدفع وإعادة تفعيل الاشتراكات المعلّقة
Patch Subscription
مرجع API لتحديث تفاصيل الاشتراك وإعداده