الإضافة: discourse-subscriptions الإصدار: الأحدث (تم التأكد من تحديثها) إصدار Discourse: 3.5.4
ملخص الخطأ: في بعض الحالات الحدية، تقوم الإضافة بإنشاء PaymentIntent دون إرفاق طريقة دفع صالحة، مما يتسبب في فشل الاشتراك بصمت لدى المستخدم النهائي.
خطوات إعادة إنتاج المشكلة:
-
يكون لدى العميل بطاقة منتهية الصلاحية محفوظة في ملفه لدى Stripe.
-
يحاول العميل الاشتراك أو تحديث طريقة الدفع الخاصة به.
-
تقوم الإضافة بإنشاء PaymentIntent ولكنها تفشل في تمرير تفاصيل البطاقة الجديدة إلى Stripe.
-
يفشل المعامله مع خطأ
resource_missingأوpayment_intent_incompatible_payment_method.
سجلات أخطاء Stripe:
resource_missing: لا يوجد لدى هذا العميل مصدر دفع مرفق أو طريقة دفع افتراضية.
payment_intent_incompatible_payment_method: كان من المتوقع وجود طريقة دفع من نوع بطاقة، لكن هذا PaymentIntent لا يحتوي على طريقة دفع ولم يتم توفير أي طريقة.
ما أكده Stripe:
-
حساب Stripe في حالة جيدة، ولا توجد مشاكل من جانبهم.
-
تم إنشاء PaymentIntents دون إرفاق طريقة دفع.
-
تقوم الإضافة بتمرير كائن
card_في بعض الحالات بدلاً من كائن طريقة دفعpm_— وهذه غير قابلة للتبادل في واجهة برمجة التطبيقات الحالية لـ Stripe.
سياق إضافي:
- يحدث هذا تقريبًا مرتين شهريًا في مجتمع يضم حوالي 18,000 عضو نشط.
- الإضافة مدمجة ولا يمكن تعديلها على مستوى المضيف (تم التأكد من ذلك مع Communiteq).
- تعمل عملية الدفع العادية بشكل صحيح؛ يحدث الفشل تحديدًا عندما يكون لدى العميل بطاقة قديمة/منتهية الصلاحية محفوظة ويحاول إجراء دفعة جديدة.
- الحل البديل هو إرسال فاتورة مستضافة من Stripe يدويًا، لكن هذا لا يؤدي إلى تشغيل الويب هوك الذي يقوم بتعيين مجموعة Discourse الخاصة بالمستخدم تلقائيًا، مما يتطلب خطوة يدوية ثانية.
الطلب: إصلاح تسليم طريقة الدفع عندما تكون بطاقة العميل الحالية منتهية الصلاحية أو غير صالحة، مع ضمان أن إدخال البطاقة الجديدة يولد كائن طريقة دفع pm_ صحيح يتم إرفاقه بشكل صحيح بـ PaymentIntent قبل الإرسال.