وضع الاختبار وبطاقات الاختبار
ابنِ واختبر الدمج بتاعك مع XPay من الأول للآخر من غير ما تحرّك فلوس حقيقية.
وضع الاختبار بيئة منفصلة تمامًا بتحاكي الحساب الفعلي: نفس الـ API، ونفس حمولات الـ webhook، ونفس واجهة لوحة التحكم، وكل حاجة تانية منفصلة. الحسابات الجديدة بتبدأ في وضع الاختبار وبتفضل فيه لحد ما نشاطك يتوافق عليه للدفع الفعلي.
وضع الاختبار هو المكان اللي بتبني وتختبر وتكسّر فيه. مفيش أي حاجة بتعملها في وضع الاختبار بتمس بطاقة حقيقية، ولا عملاءك الفعليين، ولا رصيدك الفعلي.
إيه المنفصل وإيه المتشابه
| في وضع الاختبار | في الحساب الفعلي |
|---|---|
مفاتيح API pk_test_... وsk_test_... | مفاتيح API pk_live_... وsk_live_... |
| عملاء ومعاملات وتسويات اختبارية | عملاء ومعاملات وتسويات فعلية |
| سجل رصيد اختباري منفصل عن الفعلي | سجل رصيد فعلي |
| نقاط نهاية webhook اختبارية (بتتظبط لوحدها) | نقاط نهاية webhook فعلية |
| نفس أشكال طلبات وردود الـ API | نفس الشيء |
| نفس أحداث الـ webhook والبيانات اللي بتحملها | نفس الشيء |
| نفس واجهة لوحة التحكم، مع شريط ولون برتقالي خفيف | نفس الواجهة، من غير شريط |
لما تنتقل للحساب الفعلي، مش بتغيّر أي كود. بس بتبدّل مفاتيح الاختبار بمفاتيح الحساب الفعلي وتظبط نقاط نهاية webhook فعلية.
تقدر تختبر إيه
- مدفوعات البطاقات بنتايج نجاح وفشل متوقّعة (شوف الجدول تحت).
- تدفّقات 3D Secure، بما فيها النجاح والفشل والإلغاء وانتهاء المهلة (عن طريق محاكي ACS).
- المبالغ المستردة، كاملة أو جزئية، من لوحة التحكم أو الـ API.
- الـ Webhooks لنقطة نهاية حقيقية أو محلية، بما فيها إعادة المحاولة وإعادة الإرسال من لوحة التحكم.
- الدفع المستضاف، وDrop-in، وواجهة Elements بالكامل من الأول للآخر.
- التسويات، بمحاكاة على جدول الاختبار.
بطاقات الاختبار
XPay بيقبل أربع بطاقات اختبار في وضع الاختبار. رقم البطاقة بيحدّد البنك المُصدِر والشبكة، وتاريخ الانتهاء بيحدّد نتيجة الدفع.
| الشبكة | البنك المُصدِر | رقم البطاقة | العملة |
|---|---|---|---|
| Mastercard | البنك الأهلي المصري | 5123 4500 0000 0008 | EGP |
| Visa | بنك مصر | 4508 7500 1574 1019 | EGP |
| Mastercard | كريدي أجريكول مصر | 5111 1111 1111 1118 | EGP |
| Mastercard | دولية | 2223 0000 0000 0007 | USD |
أي رقم بطاقة تاني بيترفض في وضع الاختبار. البطاقة الدولية هي اللي تستخدمها لما تحب تختبر شريحة الرسوم الدولية.
نتيجة الدفع حسب تاريخ الانتهاء
في وضع الاختبار، تاريخ الانتهاء هو اللي بيقرّر الدفعة هتنجح ولا هتفشل، وهتفشل إزاي. رقم البطاقة نفسه ملوش دخل.
| تاريخ الانتهاء | النتيجة |
|---|---|
01/39 | APPROVED |
05/39 | DECLINED |
01/27 | INSUFFICIENT_FUNDS |
04/27 | EXPIRED_CARD |
08/28 | TIMED_OUT |
01/37 | ACQUIRER_SYSTEM_ERROR |
02/37 | UNSPECIFIED_FAILURE |
05/37 | UNKNOWN |
استخدم 01/39 للمسار الناجح. واستخدم الباقي علشان تتأكد إن كودك بيتعامل صح مع حالات الفشل الواقعية: الـ Payment Intent بينتقل لـ payment_failed، والـ Charge بياخد failure_code، وبيوصلك الـ webhooks المطابقة (payment_intent.payment_failed، charge.failed).
نتيجة الـ CVV حسب قيمته
الـ CVV بيتحكم في نتيجة مطابقة الـ CVV اللي بتظهر على الـ Charge الناتج.
| CVV | النتيجة |
|---|---|
100 | MATCH |
101 | NOT_PROCESSED |
102 | NO_MATCH |
استخدم 100 إلا لو بتختبر التعامل مع عدم تطابق الـ CVV.
الـ 3D Secure في وضع الاختبار
كل دفعة اختبار بتمر بتدفّق تحدّي 3D Secure 2 الكامل عن طريق محاكي الـ sandbox بتاع XPay. بعد ما تبعت نموذج البطاقة، بتظهر صفحة ACS (سيرفر التحكم في الوصول) بتختار منها نتيجة المصادقة:
- نجاح. بيكمّل الدفعة على المسار الناجح.
- رفض. البنك المُصدِر بيرفض التحدّي. الدفعة بتفشل بـ
authentication_requiredأوcard_declinedعلى حسب رد البنك. - إلغاء. العميل بيقفل التحدّي.
- انتهاء المهلة. مفيش رد جوّه المهلة اللي حدّدها البنك المُصدِر.
كده تقدر تختبر فروع فشل الـ 3DS في الدمج بتاعك من غير ما تدوّر على بطاقة حقيقية فاشلة.