الاختبار في sandbox دون إنفاق الرصيد
sandbox وضع خاص بكل تطبيق يُحاكى فيه كل مزوّد، ولا يُفوتر فيه أي شيء، ويمكنك فيه فرض أي نتيجة تحقق تحتاجها: مقبولة، أو مرفوضة، أو قيد المراجعة.
sandbox هو وضع على مستوى التطبيق، لا مفتاح داخل تطبيقك الفعلي. أنشئ تطبيقًا ثانيًا في وضع sandbox، واستخدم مفتاح API الخاص به، وسيُحاكى كل فحص، ولن يُفوتر شيء، ويمكنك فرض أي نتيجة تريدها. إذا كنت ترى تطبيق إنتاج واحدًا فقط، فأنت بحاجة إلى إنشاء تطبيق sandbox؛ الوضع يُختار لكل تطبيق على حدة.
sandbox في Didit هو مكافئ بطاقات الاختبار لدى مزوّد دفع: يتيح لك إعادة إنتاج أي نتيجة تحقق عند الطلب، دون استدعاء مزوّدين حقيقيين، أو التعامل مع بيانات شخصية حقيقية، أو المساس برصيدك.
#sandbox وضع على مستوى التطبيق
هذا هو الجزء الذي يوقع فيه معظم الناس. التطبيق الفعلي وتطبيق sandbox هما تطبيقان منفصلان داخل المؤسسة نفسها، لذا لا تختلط حركة الاختبار ببيانات الإنتاج أبدًا. لكل تطبيق وضع إما live أو sandbox.

- ينتمي المفتاح إلى تطبيق واحد؛ مفتاح تطبيق sandbox لا يستطيع لمس الجلسات الفعلية.
- أنشئ مفتاحًا منفصلًا للاختبار بدلًا من إعادة استخدام المفتاح الفعلي.
- أنشئ تطبيقًا ثانيًا
في الكونسول، افتح مبدّل التطبيقات في الأعلى وأنشئ تطبيقًا جديدًا. اختر sandbox وضعًا له.
- استخدم مفتاح API الخاص بذلك التطبيق
احصل على مفتاح API من API والـ Webhooks بينما تطبيق sandbox محدَّد. لا يوجد "مفتاح اختبار" منفصل على تطبيق فعلي؛ المفتاح هو البيئة نفسها.
- ابنِ سير عمل فيه
لتطبيقات sandbox سير عملها الخاص. أعد بناء (أو انسخ) التدفق الذي تريد اختباره.
- أنشئ الجلسات كالمعتاد
نفس نقطة النهاية، ونفس مسار الكود. الفرق الوحيد هو المفتاح الذي ترسله.
إذا كان الكونسول لديك يعرض تطبيق إنتاج واحدًا فقط ولا توجد طريقة لإضافة تطبيق sandbox، اطلب من الدعم تفعيل إنشاء تطبيقات sandbox لمؤسستك؛ هذا إعداد على مستوى الحساب، لا شيء أعددته أنت بشكل خاطئ.
#ما الذي يغيّره sandbox وما لا يغيّره
| sandbox | الفعلي | |
|---|---|---|
| المزوّدون الخارجيون | كلهم مُحاكون، لا يُستدعى أي طرف ثالث أبدًا | حقيقيون |
| الفوترة | لا تُفوتر أبدًا؛ يُتجاوز فحص الرصيد | تُفوتر لكل ميزة مكتملة |
| حد إنشاء الجلسات | 500 كل 24 ساعة، لكل تطبيق | رصيدك |
| حمولة الـ webhook | "environment": "sandbox" | "environment": "live" |
| البيانات والحالة المستخرجة | مُحاكاة وفق السيناريو الذي تختاره | مستمدة من الالتقاط الحقيقي |
| الوسائط الملتقطة | تُخزَّن فعليًا، تمامًا مثل جلسة فعلية | تُخزَّن |
يخزّن sandbox الوسائط التي يلتقطها: المستندات، الصورة الذاتية، فيديو فحص الحيوية، ملفات إثبات العنوان، تمامًا كما تفعل جلسة فعلية. النتيجة هي المحاكاة، لكن الرفع حقيقي، لذا استخدم المستندات النموذجية وبيانات الاختبار التي يوفرها التدفق بدلًا من مستند هوية حقيقي أو معلومات شخصية حقيقية.
بما أن النتائج لا تعتمد أبدًا على وحدات البكسل، فإن صورة سيئة عمدًا لن تُنتج رفضًا في sandbox. السيناريو هو ما يقرر.
#اختيار النتيجة
مرّر معرّف سيناريو كـ sandbox_scenario عند إنشاء الجلسة، أو اترك المختبِر يختار واحدًا: تعرض جلسات sandbox في التدفق المستضاف منتقي سيناريو داخل البطاقة قبل بدء الالتقاط، بالإضافة إلى شريط من المستندات النموذجية أسفل مكوّن الرفع وشعار دائم "بيانات اختبار فقط".
تغطي السيناريوهات النتائج التي تحتاجها فعلًا للبناء:
| تريد اختبار | السيناريو |
|---|---|
| قبول كل شيء | approve |
| مستند منتهي الصلاحية | decline_document_expired |
| مستند غير قابل للقراءة | decline_could_not_recognize_document |
| فشل التحقق من قيمة MRZ | decline_mrz_validation |
| أقل من الحد الأدنى للعمر | decline_minimum_age |
| مطابقة وجه منخفضة جدًا | decline_face_match_low_similarity |
| هجوم تمثيل على فحص الحيوية | decline_liveness_attack |
| تطابق عقوبات / PEP في AML | decline_aml_hit |
| عنوان IP محظور | decline_ip_blocklist |
| عدم تطابق العنوان في إثبات العنوان | decline_poa_address_mismatch |
| فشل سلامة شريحة NFC | decline_nfc_chip_not_verified |
| لم يجد التحقق من قاعدة البيانات أي تطابق | decline_database_no_match |
| يحتاج مراجعة يدوية (AML) | review_aml_possible_match |
| يحتاج مراجعة يدوية (مطابقة وجه حدّية) | review_face_match_borderline |
| يحتاج مراجعة يدوية (تطابق عنوان جزئي) | review_poa_partial_match |
| عدم تطابق سجل KYB | decline_kyb_registry_mismatch |
توجد سيناريوهات review_* لتتمكن من اختبار مسار المراجعة اليدوية بالكامل: طابور مراجعة الكونسول، وwebhook حالة In Review، وموافقة المراجع أو طلبه إعادة الإرسال، دون الحاجة إلى مدخل بدرجة رفض.
الكتالوج الحي للسيناريوهات والقيم السحرية يُقدَّم عبر الـ API نفسها على
GET /v1/sandbox/scenarios/. إذا بدا أي معرّف هنا قديمًا، ثق بنقطة النهاية.
مرجع كامل: اختبار sandbox.
#التمييز بين البيئتين في الكود الخاص بك
يحمل كل webhook حقل environment بقيمة "sandbox" أو "live". افرع بناءً على ذلك بدلًا من محاولة استنتاج البيئة من المفتاح، ولن تخلط أبدًا بين جلسة اختبارية وعميل حقيقي.
#ما لن يفعله sandbox
- لن يُعيد بيانات سجل حقيقية لشركة حقيقية. يستخدم KYB في sandbox استجابات سجل مُحاكاة.
- لن يرسل رسالة SMS أو بريدًا إلكترونيًا حقيقيًا. التحقق من الهاتف والبريد الإلكتروني مُحاكى، لذا لا يمكنك استخدام sandbox لمعاينة إمكانية توصيل رسالة حقيقية.
- لن يستهلك رصيدك الشهري المجاني، وهذا يعني أيضًا أن تشغيلة sandbox لا تخبرك بشيء عن فحوصاتك المجانية المتبقية.
#إذا احتجت عمليات تحقق اختبارية حقيقية
بعض الأمور تتطلب فعليًا استدعاءً فعليًا: التحقق من أن خدمة قاعدة بيانات دولة معينة مُفعّلة لك، أو تأكيد توصيل SMS إلى مشغّل شبكة معين. هذا يحتاج شحن رصيد صغير على تطبيق فعلي بدلًا من sandbox. اسأل الدعم قبل إنفاق أي مبلغ عليه، حتى يتمكنوا من تأكيد أن الخدمة مُفعّلة فعليًا في حسابك أولًا.
