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

ما هي الاشتراكات؟

الاشتراكات هي منتجات متكررة يشتريها العملاء وفق جدول زمني. إنها مثالية لـ:
  • ترخيص SaaS: التطبيقات، واجهات برمجة التطبيقات، أو الوصول إلى المنصات
  • العضويات: المجتمعات، البرامج، أو الأندية
  • المحتوى الرقمي: الدورات، الوسائط، أو المحتوى المتميز
  • خطط الدعم: اتفاقيات مستوى الخدمة، حزم النجاح، أو الصيانة

الفوائد الرئيسية

  • إيرادات متوقعة: فواتير متكررة مع تجديدات تلقائية
  • دورات مرنة: شهرية، سنوية، فترات مخصصة، وتجارب
  • مرونة الخطط: تقسيط للترقيات والتخفيضات
  • إضافات ومقاعد: أضف ترقيات اختيارية وقابلة للقياس
  • تجربة دفع سلسة: دفع مستضاف وبوابة العملاء
  • موجه للمطورين: واجهات برمجة تطبيقات واضحة لإنشاء، تغييرات، وتتبع الاستخدام

إنشاء الاشتراكات

قم بإنشاء منتجات الاشتراك في لوحة معلومات مدفوعات Dodo الخاصة بك، ثم قم ببيعها من خلال الدفع أو واجهة برمجة التطبيقات الخاصة بك. يفصل المنتجات عن الاشتراكات النشطة مما يتيح لك إصدار أسعار، إرفاق إضافات، وتتبع الأداء بشكل مستقل.

إنشاء منتج الاشتراك

قم بتكوين الحقول في لوحة المعلومات لتعريف كيفية بيع اشتراكك، تجديده، وفوترة. الأقسام أدناه تتطابق مباشرة مع ما تراه في نموذج الإنشاء.

تفاصيل المنتج

  • اسم المنتج (مطلوب): الاسم المعروض في الدفع، بوابة العملاء، والفواتير.
  • وصف المنتج (مطلوب): بيان قيمة واضح يظهر في الدفع والفواتير.
  • صورة المنتج (مطلوب): PNG/JPG/WebP حتى 3 ميغابايت. تستخدم في الدفع والفواتير.
  • العلامة التجارية: ربط المنتج بعلامة تجارية معينة للتصميم والبريد الإلكتروني.
  • فئة الضريبة (مطلوب): اختر الفئة (على سبيل المثال، SaaS) لتحديد قواعد الضريبة.
اختر فئة الضريبة الأكثر دقة لضمان جمع الضرائب بشكل صحيح حسب المنطقة.

التسعير

  • نوع التسعير: اختر اشتراك (هذا الدليل). البدائل هي الدفع لمرة واحدة والفوترة بناءً على الاستخدام.
  • السعر (مطلوب): السعر المتكرر الأساسي مع العملة.
  • الخصم المطبق (%): نسبة الخصم الاختياري المطبقة على السعر الأساسي؛ تظهر في الدفع والفواتير.
  • تكرار الدفع كل (مطلوب): الفترة الزمنية للتجديدات، على سبيل المثال، كل شهر واحد. اختر التكرار (شهور أو سنوات) والكمية.
  • فترة الاشتراك (مطلوب): المدة الإجمالية التي يظل فيها الاشتراك نشطًا (على سبيل المثال، 10 سنوات). بعد انتهاء هذه الفترة، تتوقف التجديدات ما لم يتم تمديدها.
  • أيام فترة التجربة (مطلوب): حدد طول التجربة بالأيام. استخدم 0 لتعطيل التجارب. يتم فرض الرسوم الأولى تلقائيًا عند انتهاء التجربة.
  • اختر الإضافة: أضف ما يصل إلى 3 إضافات يمكن للعملاء شراؤها جنبًا إلى جنب مع الخطة الأساسية.
تغيير التسعير على منتج نشط يؤثر على المشتريات الجديدة. تتابع الاشتراكات الحالية إعدادات تغيير خطتك والتقسيط.
الإضافات مثالية للإضافات القابلة للقياس مثل المقاعد أو التخزين. يمكنك التحكم في الكميات المسموح بها وسلوك التقسيط عندما يغيرها العملاء.

الإعدادات المتقدمة

  • تسعير شامل للضرائب: عرض الأسعار شاملة الضرائب المطبقة. لا يزال حساب الضريبة النهائي يختلف حسب موقع العميل.
  • إنشاء مفاتيح الترخيص: إصدار مفتاح فريد لكل عميل بعد الشراء. راجع دليل مفاتيح الترخيص.
  • تسليم المنتج الرقمي: تسليم الملفات أو المحتوى تلقائيًا بعد الشراء. تعرف على المزيد في تسليم المنتج الرقمي.
  • البيانات الوصفية: إرفاق أزواج مفتاح-قيمة مخصصة للتصنيف الداخلي أو تكاملات العملاء. راجع البيانات الوصفية.
استخدم البيانات الوصفية لتخزين المعرفات من نظامك (مثل accountId) حتى تتمكن من تسوية الأحداث والفواتير لاحقًا.

تجارب الاشتراك

تتيح التجارب للعملاء الوصول إلى الاشتراكات دون دفع فوري. يتم فرض الرسوم الأولى تلقائيًا عند انتهاء التجربة.

تكوين التجارب

حدد أيام فترة التجربة في قسم تسعير المنتج (استخدم 0 لتعطيل). يمكنك تجاوز ذلك عند إنشاء الاشتراكات:
// Via subscription creation
const subscription = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_monthly',
  trial_period_days: 14  // Overrides product's trial period
});

// Via checkout session
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_monthly', quantity: 1 }],
  subscription_data: { trial_period_days: 14 }
});
يجب أن تكون قيمة trial_period_days بين 0 و 10,000 يوم.

اكتشاف حالة التجربة

حاليًا، لا يوجد حقل مباشر لاكتشاف حالة التجربة. الحل التالي هو حل بديل يتطلب استعلام المدفوعات، وهو غير فعال. نحن نعمل على حل أكثر كفاءة.
لتحديد ما إذا كان الاشتراك في فترة تجربة، استرجع قائمة المدفوعات للاشتراك. إذا كان هناك دفعة واحدة فقط بمبلغ 0، فإن الاشتراك في فترة التجربة:
const subscription = await client.subscriptions.retrieve('sub_123');
const payments = await client.payments.list({
  subscription_id: subscription.subscription_id
});

// Check if subscription is in trial
const isInTrial = payments.items.length === 1 && 
                  payments.items[0].total_amount === 0;

تحديث فترة التجربة

قم بتمديد التجربة عن طريق تحديث next_billing_date:
await client.subscriptions.update('sub_123', {
  next_billing_date: '2025-02-15T00:00:00Z'  // New trial end date
});
لا يمكنك تعيين next_billing_date إلى وقت ماضٍ. يجب أن تكون التاريخ في المستقبل.

تغييرات خطة الاشتراك

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

أوضاع التقسيم

اختر كيف يتم فوتره العملاء عند تغيير الخطط:

prorated_immediately

تفرض رسومًا على المبلغ المقسم بناءً على الوقت المتبقي في دورة الفوترة الحالية. الأفضل للفوترة العادلة التي تأخذ في الاعتبار الوقت غير المستخدم.
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately'
});

difference_immediately

تفرض فرق السعر على الفور (ترقية) أو تضيف رصيدًا للتجديدات المستقبلية (تخفيض). الأفضل لسيناريوهات الترقية/التخفيض البسيطة.
// Upgrade: charges $50 (difference between $30 and $80)
// Downgrade: credits remaining value, auto-applied to renewals
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'difference_immediately'
});
الاعتمادات الناتجة عن التخفيضات باستخدام difference_immediately تكون محددة بالاشتراك وتطبق تلقائيًا على التجديدات المستقبلية. وهي متميزة عن الاعتمادات الخاصة بالعملاء.

full_immediately

تفرض المبلغ الكامل للخطة الجديدة على الفور، متجاهلة الوقت المتبقي. الأفضل لإعادة تعيين دورات الفوترة.
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_monthly',
  quantity: 1,
  proration_billing_mode: 'full_immediately'
});

تغيير الخطط مع الإضافات

قم بتعديل الإضافات عند تغيير الخطط. يتم تضمين الإضافات في حسابات التقسيم:
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'difference_immediately',
  addons: [{ addon_id: 'addon_extra_seats', quantity: 2 }]  // Add add-ons
  // addons: []  // Empty array removes all existing add-ons
});
تؤدي تغييرات الخطط إلى فرض رسوم فورية. قد تؤدي الرسوم الفاشلة إلى نقل الاشتراك إلى حالة on_hold. تتبع التغييرات عبر أحداث الويب subscription.plan_changed.

معاينة تغييرات الخطط

قبل الالتزام بتغيير خطة، عاين الرسوم الدقيقة والاشتراك الناتج:
const preview = await client.subscriptions.previewChangePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately'
});

// Show customer the charge before confirming
console.log('You will be charged:', preview.immediate_charge.summary);

معاينة واجهة برمجة تطبيقات تغيير الخطة

عاين تغييرات الخطط قبل الالتزام بها.

حالات الاشتراك

يمكن أن تكون الاشتراكات في حالات مختلفة طوال دورة حياتها:
  • active: الاشتراك نشط وسيتم تجديده تلقائيًا
  • on_hold: تم إيقاف الاشتراك بسبب فشل الدفع. يتطلب تحديث طريقة الدفع لإعادة التفعيل
  • cancelled: تم إلغاء الاشتراك ولن يتم تجديده
  • expired: وصل الاشتراك إلى تاريخ انتهاء صلاحيته
  • pending: يتم إنشاء الاشتراك أو معالجته

حالة الإيقاف

يدخل الاشتراك في حالة on_hold عندما:
  • يفشل دفع التجديد (نقص في الأموال، بطاقة منتهية الصلاحية، إلخ)
  • يفشل رسم تغيير الخطة
  • يفشل تفويض طريقة الدفع
عندما يكون الاشتراك في حالة on_hold، فلن يتم تجديده تلقائيًا. يجب عليك تحديث طريقة الدفع لإعادة تفعيل الاشتراك.

إعادة التفعيل من الإيقاف

لإعادة تفعيل الاشتراك من حالة on_hold، قم بتحديث طريقة الدفع. هذا تلقائيًا:
  1. ينشئ رسمًا للديون المتبقية
  2. يولد فاتورة
  3. يعالج الدفع باستخدام طريقة الدفع الجديدة
  4. يعيد تفعيل الاشتراك إلى حالة active عند الدفع الناجح
// Reactivate subscription from on_hold
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
  // Monitor webhooks for payment.succeeded and subscription.active
}
بعد تحديث طريقة الدفع بنجاح لاشتراك في حالة on_hold، ستتلقى payment.succeeded متبوعة بأحداث الويب subscription.active.

إدارة واجهة برمجة التطبيقات

استخدم POST /subscriptions لإنشاء الاشتراكات برمجيًا من المنتجات، مع تجارب وإضافات اختيارية.

مرجع واجهة برمجة التطبيقات

عرض واجهة برمجة تطبيقات إنشاء الاشتراك.
استخدم PATCH /subscriptions/{id} لتحديث الكميات، أو الإلغاء في نهاية الفترة، أو تعديل البيانات الوصفية.

مرجع واجهة برمجة التطبيقات

تعلم كيفية تحديث تفاصيل الاشتراك.
قم بتغيير المنتج النشط والكميات مع عناصر التحكم في التقسيم.

مرجع واجهة برمجة التطبيقات

راجع خيارات تغيير الخطط.
بالنسبة للاشتراكات عند الطلب، فرض رسوم محددة عند الطلب.

مرجع واجهة برمجة التطبيقات

فرض رسوم على اشتراك عند الطلب.
استخدم GET /subscriptions لقائمة جميع الاشتراكات و GET /subscriptions/{id} لاسترجاع واحدة.

مرجع واجهة برمجة التطبيقات

تصفح واجهات برمجة التطبيقات للقائمة والاسترجاع.
استرجع الاستخدام المسجل لنماذج التسعير المترية أو الهجينة.

مرجع واجهة برمجة التطبيقات

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

مرجع واجهة برمجة التطبيقات

تعلم كيفية تحديث طرق الدفع وإعادة تفعيل الاشتراكات.

حالات الاستخدام الشائعة

  • SaaS وواجهات برمجة التطبيقات: وصول متدرج مع إضافات للمقاعد أو الاستخدام
  • المحتوى والوسائط: وصول شهري مع تجارب تمهيدية
  • خطط دعم B2B: عقود سنوية مع إضافات دعم متميزة
  • الأدوات والإضافات: مفاتيح الترخيص والإصدارات المحدثة

أمثلة على التكامل

جلسات الدفع (الاشتراكات)

عند إنشاء جلسات الدفع، قم بتضمين منتج الاشتراك الخاص بك والإضافات الاختيارية:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_subscription',
      quantity: 1
    }
  ]
});

تغييرات الخطط مع التقسيم

قم بترقية أو تخفيض اشتراك وتحكم في سلوك التقسيم:
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_new',
  quantity: 1,
  proration_billing_mode: 'difference_immediately'
});

الإلغاء في نهاية الفترة

جدولة إلغاء دون إنهاء الوصول على الفور:
await client.subscriptions.update('sub_123', {
  cancel_at_period_end: true
});

الاشتراكات عند الطلب

إنشاء اشتراك عند الطلب وفرض رسوم لاحقًا حسب الحاجة:
const onDemand = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_on_demand',
  on_demand: true
});

await client.subscriptions.createCharge(onDemand.id, {
  amount: 4900,
  currency: 'USD',
  description: 'Extra usage for September'
});

تحديث طريقة الدفع للاشتراك النشط

تحديث طريقة الدفع للاشتراك النشط:
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

// Or use existing payment method
await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});

إعادة تفعيل الاشتراك من الإيقاف

إعادة تفعيل اشتراك تم إيقافه بسبب فشل الدفع:
// Update payment method - automatically creates charge for remaining dues
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

if (response.payment_id) {
  // Charge created for remaining dues
  // Redirect customer to response.payment_link
  // Monitor webhooks: payment.succeeded → subscription.active
}

الاشتراكات مع تفويضات متوافقة مع RBI

تعمل اشتراكات UPI وبطاقات الهند بموجب لوائح RBI (البنك الاحتياطي الهندي) مع متطلبات تفويض محددة:

حدود التفويض

يعتمد نوع التفويض والمبلغ على رسوم الاشتراك المتكررة الخاصة بك:
  • رسوم أقل من 15,000 روبية: نقوم بإنشاء تفويض عند الطلب بمبلغ 15,000 روبية هندية. يتم فرض مبلغ الاشتراك دوريًا وفقًا لتكرار اشتراكك، حتى حد التفويض.
  • رسوم 15,000 روبية أو أكثر: نقوم بإنشاء تفويض اشتراك (أو تفويض عند الطلب) للمبلغ الدقيق للاشتراك.

اعتبارات الترقية والتخفيض

مهم: عند ترقية أو تخفيض الاشتراكات، يجب مراعاة حدود التفويض بعناية:
  • إذا كانت الترقية/التخفيض تؤدي إلى مبلغ رسوم يتجاوز 15,000 روبية ويتجاوز حد الدفع عند الطلب الحالي، فقد تفشل رسوم المعاملة.
  • في مثل هذه الحالات، قد يحتاج العميل إلى تحديث طريقة الدفع الخاصة به أو تغيير الاشتراك مرة أخرى لإنشاء تفويض جديد بالحد الصحيح.

التفويض للرسوم ذات القيمة العالية

بالنسبة لرسوم الاشتراك التي تبلغ 15,000 روبية أو أكثر:
  • سيتم مطالبة العميل من قبل مصرفه بتفويض المعاملة.
  • إذا فشل العميل في تفويض المعاملة، ستفشل المعاملة وسيتم وضع الاشتراك في حالة الإيقاف.

تأخير معالجة لمدة 48 ساعة

جدول معالجة: تتبع الرسوم المتكررة على بطاقات الهند واشتراكات UPI نمط معالجة فريد:
  • يتم بدء الرسوم في التاريخ المحدد وفقًا لتكرار اشتراكك.
  • يتم خصم المبلغ الفعلي من حساب العميل فقط بعد 48 ساعة من بدء الدفع.
  • قد يمتد هذا النطاق الزمني لمدة تصل إلى 2-3 ساعات إضافية اعتمادًا على استجابات واجهة برمجة التطبيقات للبنك.

نافذة إلغاء التفويض

خلال نافذة المعالجة التي تستغرق 48 ساعة:
  • يمكن للعملاء إلغاء التفويض عبر تطبيقاتهم المصرفية.
  • إذا ألغى العميل التفويض خلال هذه الفترة، سيبقى الاشتراك نشطًا (هذه حالة خاصة تتعلق باشتراكات بطاقات الهند وUPI AutoPay).
  • ومع ذلك، قد تفشل الخصم الفعلي، وفي هذه الحالة، سنضع الاشتراك في حالة الإيقاف.
معالجة الحالات الخاصة: إذا كنت تقدم فوائد أو اعتمادات أو استخدام الاشتراك للعملاء على الفور عند بدء الرسوم، تحتاج إلى التعامل مع هذه النافذة التي تستغرق 48 ساعة بشكل مناسب في تطبيقك. اعتبر:
  • تأخير تفعيل الفوائد حتى تأكيد الدفع
  • تنفيذ فترات سماح أو وصول مؤقت
  • مراقبة حالة الاشتراك لإلغاء التفويضات
  • التعامل مع حالات الإيقاف للاشتراك في منطق تطبيقك
راقب أحداث الويب للاشتراك لتتبع تغييرات حالة الدفع والتعامل مع الحالات الخاصة حيث يتم إلغاء التفويضات خلال نافذة الـ 48 ساعة.

أفضل الممارسات

  • ابدأ بمستويات واضحة: 2-3 خطط مع اختلافات واضحة
  • تواصل بشأن التسعير: عرض الإجماليات، والتقسيم، والتجديد التالي
  • استخدم التجارب بشكل مدروس: تحويل مع التوجيه، وليس فقط الوقت
  • استفد من الإضافات: اجعل الخطط الأساسية بسيطة وبيع الإضافات
  • اختبر التغييرات: تحقق من تغييرات الخطط والتقسيم في وضع الاختبار
الاشتراكات هي أساس مرن للإيرادات المتكررة. ابدأ ببساطة، اختبر بدقة، وكرر بناءً على مقاييس التبني، والتخلي، والتوسع.