تُعيد 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 الموجود في فترة سماح. وتستمر المحاولات التلقائية للحالات الأخرى غير النشطة. راجع انتقالات حالة الاشتراك.حدود إعادة المحاولة
تسمح كل فاتورة تجديد بـ 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_*، والمشغّل الخاص به، ورسالته.