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

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

الاشتراكات هي منتجات متكررة يشتريها العملاء وفق جدول زمني. إنها مثالية لـ:
  • ترخيص 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 إلى وقت ماضٍ. يجب أن تكون التاريخ في المستقبل.

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

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

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

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

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. تتبع التغييرات عبر أحداث webhook 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);

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

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

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

يمكن أن تكون الاشتراكات في حالات مختلفة طوال دورة حياتها:
  • 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، ستتلقى أحداث webhook payment.succeeded تليها أحداث subscription.active.

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

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

مرجع API

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

مرجع API

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

مرجع API

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

مرجع API

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

مرجع API

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

مرجع API

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

مرجع API

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

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

  • 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 ساعة من بدء الدفع.
  • قد يمتد هذا النافذة 48 ساعة إلى 2-3 ساعات إضافية اعتمادًا على استجابات واجهة برمجة التطبيقات للبنك.

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

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

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

  • ابدأ بمستويات واضحة: 2-3 خطط مع اختلافات واضحة
  • تواصل بشأن التسعير: عرض الإجماليات، التقسيط، والتجديد التالي
  • استخدم التجارب بحكمة: تحويل مع التوجيه، وليس فقط الوقت
  • استفد من الإضافات: اجعل الخطط الأساسية بسيطة وبيع الإضافات
  • اختبر التغييرات: تحقق من تغييرات الخطط والتقسيط في وضع الاختبار
الاشتراكات هي أساس مرن للإيرادات المتكررة. ابدأ ببساطة، اختبر بدقة، وكرر بناءً على اعتماد، تسرب، ومقاييس التوسع.
Subscriptions are a flexible foundation for recurring revenue. Start simple, test thoroughly, and iterate based on adoption, churn, and expansion metrics.