Skip to main content
تُعيد Manual Retry محاولة تحصيل دفعة التجديد الفاشلة للاشتراك عندما تطلب ذلك، من صفحة تفاصيل الدفعة أو عبر API. وهي تحصّل المبلغ من طريقة الدفع المحفوظة على الاشتراك، وتعمل بشكل مستقل عن جدول Payment Retries التلقائي.

ما هي Manual Retry؟

عندما تفشل دفعة التجديد، ينتقل الاشتراك إلى on_hold. وإذا فعّلت Payment Retries، فإنها تعيد محاولة تحصيل المبلغ وفق جدول زمني متدرج. أحيانًا تعرف أن الدفعة ستنجح الآن: فقد يؤكد العميل أنه أضاف رصيدًا إلى حسابه، أو قد يكون فريق الدعم على اتصال به. ترسل Manual Retry محاولة واحدة فورًا بدلًا من الانتظار ساعات أو أيامًا حتى يحين موعد المحاولة المجدولة التالية.
  • دفعات التجديد فقط: تنطبق Manual Retry على فواتير تجديد الاشتراك عندما يكون الاشتراك في on_hold. ولا تكون الدفعات الأولى، والدفعات لمرة واحدة، ورسوم تغيير الخطة، والرسوم عند الطلب مؤهلة لذلك.
  • لا يلزم إجراء من العميل: تُرسل عملية التحصيل إلى طريقة الدفع المحفوظة مسبقًا على الاشتراك.
  • مستقلة عن المحاولات التلقائية: لا تستهلك المحاولة اليدوية إحدى محاولات الجدول التلقائي، ولا تغيّر موعد المحاولة التلقائية التالية، وتعمل حتى عند إيقاف Payment Retries.
  • تعيد محاولة الفاتورة، لا الدفعة: الدفعة الفاشلة ليست سوى نقطة البداية. يعثر Dodo Payments على فاتورة التجديد المفتوحة المرتبطة بها ويحصّل ذلك الدين، لذلك لا يهم أي دفعة فاشلة في الفاتورة أعدت المحاولة منها.

إعادة المحاولة من لوحة التحكم

يمكن للمستخدمين الذين لديهم دور Owner أو Editor فقط إرسال محاولة يدوية.
1

Open the failed payment

انتقل إلى المعاملات ← الدفعات وانقر على دفعة التجديد الفاشلة لفتح صفحة تفاصيل المعاملة.
2

Click Retry Payment Manually

انقر على إعادة محاولة الدفع يدويًا في الزاوية العلوية اليسرى. لا يتوفر الزر إلا عندما تكون الدفعة مؤهلة.
3

Check the result

ينشئ Dodo Payments دفعة جديدة للمحاولة، وتظهر في سجل النشاط. إذا نجحت عملية التحصيل، يعود الاشتراك إلى active، وينتقل تاريخ الفوترة التالي إلى فترة فوترة واحدة بعد المحاولة الناجحة. وإذا لم يكن معالج الدفع قد سوّى عملية التحصيل بعد، فستظهر الدفعة قيد المعالجة إلى أن يبلّغ webhook من نوع payment.succeeded أو payment.failed بالنتيجة.
صفحة تفاصيل المعاملة لدفعة فاشلة تعرض رمز الخطأ والرسالة وسجل النشاط وزر إعادة محاولة الدفع يدويًا

Retry Payment Manually on the transaction details page of a failed renewal

الأهلية

يرسل Dodo Payments محاولة يدوية فقط عندما تنجح جميع عمليات التحقق الواردة في هذا الجدول. يعرض عمود رمز السبب القيمة التي يعيدها API: في reason على GET /payments/{payment_id}/retry، وكخطأ code على POST /payments/{payment_id}/retry.
تكون Manual Retry أكثر تقييدًا من المحاولات التلقائية في نقطة واحدة: فهي تتطلب أن يكون الاشتراك في on_hold. ويفشل هذا التحقق للاشتراك past_due الموجود في فترة سماح. وتستمر المحاولات التلقائية للحالات الأخرى غير النشطة. راجع انتقالات حالة الاشتراك.
لا يمكن أن تنجح إعادة محاولة تحصيل رفض نهائي باستخدام البطاقة نفسها، كما أن الرفض المتكرر يضر بمعدل التفويض. عندما يكون السبب MANUAL_RETRY_HARD_DECLINE، اطلب من العميل تحديث طريقة الدفع لديه بدلًا من ذلك. وتتولى Subscription Dunning تنفيذ ذلك تلقائيًا.

حدود إعادة المحاولة

تسمح كل فاتورة تجديد بـ 3 محاولات يدوية، مع فترة تهدئة بين كل منها: تنطبق الحدود في وضعي الاختبار والوضع المباشر. عندما يمنع الحد إعادة المحاولة، يعيد API القيمة MANUAL_RETRY_LIMIT_REACHED (HTTP 429)، ويحمل نص الخطأ فقط code وmessage. لمعرفة موعد إتاحة المحاولة التالية، تحقق من حالة إعادة المحاولة واقرأ retry_available_at. وتصبح null بعد استهلاك المحاولات الثلاث كلها. لا تُحتسب المحاولات التلقائية ضمن هذا الحد، كما لا تُحتسب المحاولات اليدوية ضمن المحاولات الثماني في الجدول التلقائي.

المحاولات اليدوية مقابل التلقائية

يختلف مسارا إعادة المحاولة في الجوانب التالية:

إعادة المحاولة عبر API

تحقق من الأهلية أولًا، ثم أرسل المحاولة. يتطلب كلا النقطتين ID لدفعة فاشلة.

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

لا يعيد GET /payments/{payment_id}/retry خطأً للدفعة غير المؤهلة. بل يعيد can_retry: false مع رمز reason بدلًا من ذلك، كي تتمكن لوحة المعلومات أو أدوات الدعم الخاصة بك من عرض الحالة نفسها التي تعرضها لوحة معلومات Dodo Payments. ويتطلب دور Viewer.
Response

إرسال محاولة يدوية

ينشئ POST /payments/{payment_id}/retry دفعة جديدة ويحصّل المبلغ من طريقة الدفع المحفوظة. ويتطلب دور Editor. تعيد أمثلة SDK استخدام client من المثال السابق.
Response

استجابات الخطأ

عندما لا يُسمح بإعادة المحاولة، يعيد POST إحدى حالات HTTP التالية: يصف مرجع رموز الخطأ كل رمز.

Webhooks

تنشئ المحاولة اليدوية دفعة عادية، لذلك يتم تشغيل Webhooks نفسها التي تُشغّل لأي محاولة تجديد: في كائن الدفعة ضمن هذه الأحداث، تكون retry_attempt بقيمة 1 أو أعلى، ويتم تعيين subscription_id، كما يحدث في المحاولة التلقائية. ولا يحتوي كائن الدفعة على حقل يحدد أن المحاولة يدوية، لذا احتفظ بـ payment_id من استجابة إعادة المحاولة إذا احتجت إلى التمييز بين المحاولة اليدوية والمجدولة.

Payment Webhook Payloads

مخططات الحمولة الكاملة لأحداث الدفعات.

ذات صلة

Subscription Payment Retries

الجدول الزمني التلقائي المتدرج الذي يعمل بالتوازي مع المحاولات اليدوية.

Subscription Dunning

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

Handle Payment Failures

اقرأ رموز الرفض وحدد الوقت الذي تستحق فيه إعادة المحاولة.

Error Codes

كل رمز MANUAL_RETRY_*، والمشغّل الخاص به، ورسالته.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦