تُعيد Manual Retry محاولة دفع تجديد الاشتراك الفاشلة فور طلبك، من صفحة تفاصيل الدفع أو عبر API. وتخصم المبلغ من طريقة الدفع المحفوظة في الاشتراك، وتعمل بشكل مستقل عن جدول Payment Retries التلقائي.
ما هي Manual Retry؟
عند فشل دفعة التجديد، ينتقل الاشتراك إلىon_hold، وتعيد Payment Retries محاولة تحصيل المبلغ وفق جدول زمني متدرج. أحيانًا تعرف أن الدفع سينجح الآن: فقد يؤكد العميل أنه شحن رصيده، أو قد يكون فريق الدعم على اتصال به. تتيح لك Manual Retry إرسال محاولة واحدة فورًا بدلًا من الانتظار ساعات أو أيامًا حتى موعد المحاولة المجدولة التالية.
- دفعات التجديد فقط: تنطبق Manual Retry على فواتير تجديد الاشتراكات عندما يكون الاشتراك في
on_hold. ولا تكون الدفعات الأولى، والدفعات لمرة واحدة، والرسوم الناتجة عن تغيير الخطة، والرسوم عند الطلب مؤهلة. - لا يتطلب إجراءً من العميل: تُرسل عملية الخصم إلى طريقة الدفع المحفوظة مسبقًا في الاشتراك.
- مستقلة عن الإعادات التلقائية: لا تستهلك إعادة المحاولة اليدوية محاولةً من الجدول التلقائي، ولا تغيّر موعد إعادة المحاولة المجدولة التالية، وتعمل حتى عند إيقاف Payment Retries.
- تعيد محاولة الفاتورة، وليس الدفع: الدفع الفاشل هو نقطة البداية فقط. يبحث Dodo Payments عن فاتورة التجديد المفتوحة المرتبطة به ويحصّل ذلك الدين، لذلك لا يهم أي دفعة فاشلة في الفاتورة تعيد المحاولة منها.
إعادة المحاولة من لوحة التحكم
1
Open the failed payment
انتقل إلى المعاملات ← الدفعات وانقر على دفعة التجديد الفاشلة لفتح صفحة تفاصيل المعاملة.
2
Click Retry Payment Manually
انقر على Retry Payment Manually في الزاوية العلوية اليسرى. لا يتوفر الزر إلا عندما تكون الدفعة مؤهلة.
3
Check the result
يُنشأ دفع جديد للمحاولة ويظهر في سجل النشاط. إذا نجحت عملية الخصم، يعود الاشتراك إلى
active ويتقدم تاريخ الفوترة التالي كالمعتاد. وإذا لم يكن معالج الدفع قد سوّى عملية الخصم بعد، فستظهر الدفعة قيد التنفيذ إلى أن تُبلغ webhook payment.succeeded أو payment.failed بالنتيجة.
Retry Payment Manually on the transaction details page of a failed renewal
الأهلية
لا تُرسل إعادة المحاولة اليدوية إلا عند اجتياز جميع الفحوصات أدناه. يعرض عمود رمز السبب ما يعيده API: فيreason على GET /payments/{payment_id}/retry، وكخطأ code على POST /payments/{payment_id}/retry.
Manual Retry أضيق نطاقًا من الإعادات التلقائية في نقطة واحدة: فهي تتطلب أن يكون الاشتراك في
on_hold. تستمر الإعادات التلقائية في الحالات الأخرى غير النشطة؛ راجع انتقالات حالة الاشتراك.حدود إعادة المحاولة
تسمح كل فاتورة تجديد بـ 3 إعادات محاولة يدوية، مع فترة تهدئة بينها:
تنطبق الحدود في كل من وضع الاختبار والوضع المباشر. عند رفض إعادة المحاولة لهذا السبب، يعيد API القيمة
MANUAL_RETRY_LIMIT_REACHED (HTTP 429). ولا يحتوي نص الخطأ إلا على code وmessage. لمعرفة موعد فتح إعادة المحاولة التالية، تحقق من حالة إعادة المحاولة واقرأ retry_available_at. وتكون null بعد استنفاد الإعادات الثلاث جميعها.
لا تُحتسب الإعادات التلقائية ضمن هذا الحد، ولا تُحتسب الإعادات اليدوية ضمن محاولات الجدول التلقائي البالغ عددها 8.
الإعادات اليدوية مقابل التلقائية
إعادة المحاولة عبر API
تحقق من الأهلية أولًا، ثم أرسل إعادة المحاولة. يتطلب كلا النقطتين معرّف دفعة فاشلة.التحقق مما إذا كان يمكن إعادة محاولة الدفع
لا يفشلGET /payments/{payment_id}/retry أبدًا عند التعامل مع دفعة غير مؤهلة. بل يعيد can_retry: false مع رمز reason، حتى تتمكن لوحة التحكم أو أدوات الدعم لديك من عرض الحالة نفسها التي تعرضها لوحة تحكم Dodo Payments. ويتطلب ذلك دور Viewer.
Response
إرسال إعادة محاولة يدوية
ينشئPOST /payments/{payment_id}/retry دفعة جديدة ويخصم المبلغ من طريقة الدفع المحفوظة. ويتطلب ذلك دور Editor.
Response
استجابات الخطأ
يُوضَّح كل رمز في مرجع رموز الخطأ.
Webhooks
تنشئ إعادة المحاولة اليدوية دفعة عادية، لذلك تُطلق webhooks نفسها كما هو الحال مع أي محاولة تجديد:
في كائن الدفع ضمن هذه الأحداث، تكون
retry_attempt بقيمة 1 أو أعلى، وتُعيّن subscription_id، تمامًا كما في الإعادة التلقائية. احتفظ بقيمة payment_id من استجابة إعادة المحاولة إذا احتجت إلى تمييز المحاولة اليدوية عن المجدولة.
Payment Webhook Payloads
مخططات الحمولة الكاملة لأحداث الدفع.
ذات صلة
Subscription Payment Retries
الجدول الزمني التلقائي المتدرج الذي يعمل بالتوازي مع الإعادات اليدوية.
Subscription Dunning
أرسل بريدًا إلكترونيًا إلى العميل لتحديث طريقة الدفع بعد الرفض النهائي.
Handle Payment Failures
اقرأ رموز الرفض وحدد متى تستحق إعادة المحاولة.
Error Codes
كل رمز
MANUAL_RETRY_*، والمشغّل الخاص به، ورسالته.