ربط بوابة الدفع لا ينتهي عند صفحة Checkout. النظام الموثوق يحتاج أيضًا إلى Webhooks ومتابعة الحالات وتسجيل المعاملات والتعامل مع الأخطاء.
زر الدفع هو الجزء الظاهر فقط من ربط بوابة الدفع. التحدي الحقيقي هو الحفاظ على حالة الطلب الصحيحة عندما يغلق العميل الصفحة، أو تنتهي مهلة الاتصال، أو يصل Callback مرتين.
عرّف دورة العملية قبل التنفيذ
أتعامل مع الطلب ومحاولة الدفع كسجلين لهما مسؤوليتان مختلفتان. يسجل التطبيق نية الدفع، ثم يرسل العميل إلى المزود أو يبدأ المعاملة، وبعدها يتلقى نتيجة موثوقة. يجب تعريف حالات Pending وPaid وFailed وCancelled وRefunded بدقة؛ الرجوع الناجح من صفحة الدفع وحده لا يعني أن الطلب مدفوع.
غالبًا يكون Webhook موثق من المزود أو استعلام حالة موثوق هو مصدر الحقيقة. تحقّق من التوقيع والمبلغ والعملة والمرجع وهوية المعاملة قبل تغيير الحالة. احتفظ بالحدث الأصلي وسبب رفض أي تحديث ليسهل التحقيق لاحقًا.
تعامل بأمان مع الإعادة والتكرار
الشبكات تعيد المحاولة، والعميل قد يضغط مرتين، والمزود قد يرسل الإشعار مجددًا. استخدم مراجع فريدة وتغييرات حالة Idempotent حتى لا يُنشأ طلبان أو يُنفذ التسليم مرتين. Transaction في قاعدة البيانات تساعد على إبقاء سجل الدفع والطلب متسقين.
- تحقق من Webhook وسجله ثم استجب بسرعة.
- انقل التنفيذ البطيء والإشعارات إلى Queue.
- أعد المحاولة عند الفشل المؤقت بحدود واضحة.
- أرسل الأحداث الفاشلة للمراجعة بدل فقدها بصمت.
جهز الاسترجاع والمطابقة
الاسترجاع عملية مستقلة تحتاج صلاحيات وحالة لدى المزود وسجل تدقيق. مطابقة المعاملات المحلية بتقارير المزود تكشف Webhooks المفقودة والتصحيحات اليدوية. يحتاج فريق الدعم سجلًا مفهومًا بدل رسائل تقنية خام.
اختبر النجاح والرفض والـ Timeout والتكرار والتوقيع الخاطئ والاسترجاع وتعطل الـ Worker في بيئة تجريبية. موثوقية الدفع تظهر في التعامل مع المسارات غير المعتادة، لا في شكل صفحة Checkout فقط.
حدد أين تتغير حالة الدفع
عودة المتصفح مفيدة لتجربة العميل، لكنها قد تنقطع أو تُزوّر. يجب أن يراجع السيرفر نتيجة المزود عبر Webhook موقّع أو استعلام حالة موثوق. حوّل حالات المزود إلى مجموعة صغيرة من حالات التطبيق وارفض الانتقالات غير المنطقية. بذلك لا يرتبط باقي النظام بمصطلحات بوابة واحدة.
قد يتم تفويض الدفع قبل تحصيل المبلغ، وبعض المزودين يسوّون المعاملة لاحقًا. يجب أن يحدد المشروع متى يحجز المخزون أو يصدر الفاتورة أو ينفذ الطلب. تختلف هذه القرارات حسب المنتج ولا ينبغي استنتاجها من كلمة Success عامة.
أبعد البيانات الحساسة عن التطبيق
استخدم Hosted Checkout أو Tokenisation من المزود عندما يناسب ذلك، ولا تحفظ إلا المعرفات اللازمة لتتبع العملية. قلل من يستطيع رؤية أحداث الدفع واحتفظ بالأسرار في إعدادات البيئة. سجّل معرف ربط وحالة المعاملة لا تفاصيل البطاقة أو الحمولة الكاملة.
يحتاج فريق الدعم عرضًا آمنًا للطلب المحلي ومرجع المزود وآخر حالة موثوقة وأي Webhook فاشل. واجهة تشغيل واضحة تتيح خدمة العميل دون منح الجميع وصولًا مباشرًا إلى بوابة الدفع.
وأخيرًا طابق المعاملات دوريًا. مقارنة مجدولة تكشف الحالة النادرة التي أكمل فيها المزود الدفع ولم يصل الإشعار للتطبيق. وثّق طريقة التعافي واختبرها قبل أن تضطر إلى الارتجال أثناء شكوى عميل.
تشمل خدمة التكاملات والأتمتة مسارات الدفع وما يتبعها من عمليات تشغيلية.