قبل أن تبدأ
- استخدم مفتاح API لتطبيق البيئة التجريبية. لا تصل تطبيقات الإنتاج إلى VASP الاختباري أبدًا.
- فعّل Travel Rule باستخدام اسم قانوني:
- يمكنك اختياريًا الاشتراك في وجهة webhook للحدث
travel_rule.status.updated. ترسل البيئة التجريبية هذا الحدث موسومًا بـ"environment": "sandbox".
Didit Test VASP
يعيدGET /v1/sandbox/scenarios/ ملف تعريف VASP الاختباري وكل السيناريوهات في كائن travel_rule الخاص به، فيمكن لاختباراتك قراءة قيم المُشغِّلات بدلًا من ترميزها يدويًا:
كل قيمة هنا بيانات اختبار. VASP الاختباري ليس عضوًا في أي شبكة Travel Rule، ولا تُظهر أي نتيجة في البيئة التجريبية أن طرفًا مقابلًا حقيقيًا أو شبكة حقيقية يمكن الوصول إليهما.
سيناريوهات التحويلات الصادرة
كل معاملةtravelRule صادرة من تطبيق في البيئة التجريبية تحتاج إلى تبادل تُرسل إلى VASP الاختباري. اختر النتيجة بعنوان محفظة المستفيد (دون مراعاة حالة الأحرف)، أو باسم مستفيد بالصيغة Didit Test VASP <suffix>. تكون المحفظة هي الأولوية إذا ضُبط الاثنان معًا. وإذا لم يُضبط أيٌّ منهما، أو كانت اللاحقة غير مدرجة في الجدول، يكتمل التحويل (accept).
لا تصل التحويلات التي لا تحتاج إلى تبادل إلى VASP الاختباري أبدًا: التحويل الأقل من threshold_amount لديك، والتحويل إلى المحفظة المُتحقَّق منها لمستخدمك، والتحويل إلى محفظة طرف مقابل أعلنتَ أنها ذاتية الاستضافة. أما VASP الطرف المقابل الذي تختاره أنت أو مستخدمك النهائي يدويًا من الدليل، فيُحكم عليه بالمسارات نفسها التي يعتمدها التطبيق الحي: إذا كان له مسار واحد على الأقل (نقطة endpoint مُتحقَّق منها لـ TRP، أو شبكة يرسل تطبيقك عليها، أو جهة اتصال للامتثال)، يُوجَّه التحويل إلى VASP الاختباري. وإذا لم يكن له أي مسار، ينتهي التحويل بالحالة COUNTERPARTY_VASP_NOT_FOUND، كما يحدث في التطبيق الحي.
rail للتحويل هو TEST_VASP، وتسمّي قائمة التحويلات Didit Test VASP بوصفه VASP المستفيد. تابع التحويل في webhooks للحدث travel_rule.status.updated، أو اقرأه من GET /v3/transactions/{transaction_id}/.
name_mismatchيقارن الاسم الذي أرسلته للمستفيد باسم صاحب الحساب الذي يردّ به VASP الاختباري، وفق قاعدة الاسم لديك لنوع كيان المستفيد (matching_rules.individual.nameأوmatching_rules.company.name، وتتبع هذه القواعدname_matching_strictnessإلى أن تضبطها). يحمل التحويل، وإدخال الجدول الزمني الذي حسم الأمر، القيمةname_match(معcompared_with: "counterparty_vasp") والقيمةdata_matchمعmismatched_fields: ["name"].not_reachableيُبقي التحويل فيAWAITING_COUNTERPARTYأثناء إعادة المحاولة، معdelivery.statusبالقيمةRETRYINGوlast_errorبالقيمةtest VASP is not answering، ثم يجعلهCOUNTERPARTY_VASP_NOT_REACHABLE. أرسل{"action": "resend"}بعد ذلك لتشغيله من جديد.self_hostedيجعل VASP الاختباري يُجيب بأن المحفظة ذاتية الاستضافة. سجّل الإثبات باستخدام أداة ملكية المحفظة، التي تُنشأ لك تلقائيًا حين يكونauto_wallet_verificationمفعّلًا، أو عبرPOST .../travel-rule/ownership/مع{"confirmed": true}. عندها تُضاف المحفظة إلى دفتر العناوين لديك باسم المستفيد، ويحسم تطابق الاسم التحويل: يكتمل التحويل عند التطابق وتُعلَّم المحفظة موثّقة. أما{"confirmed": false}فيرفض التحويل.
التحويلات الواردة من الـ VASP التجريبي
لاختبار جانب الاستقبال، اطلب من الـ VASP التجريبي إرسال تحويل إليك باستخدامPOST /v3/travel-rule/test-vasp/inbound/. حدّد إحدى محافظ دفتر العناوين الخاصة بتطبيقك. يُبتّ في التحويل عبر المسار الوارد نفسه الذي يُستخدم مع التحويل الحقيقي، وذلك وفق دفتر العناوين لديك ووضع الملكية وقواعد الأسماء.
تتضمن استجابة
201 الحقول transaction_id وtxn_id وscenario وtravel_rule_status وdetail وtest_vasp: true، إلى جانب تحويل travel_rule. يحصل التطبيق الحي على 400 ("The Didit Test VASP is only available on sandbox applications.")، وأي قيمة أخرى لـ scenario تعيد 400، والتطبيق الذي يكون فيه Travel Rule معطّلًا يعيد 409.
ابتّ في التحويل المعلّق عبر
POST .../travel-rule/ownership/ كما تفعل مع التحويل الحقيقي: يُكمل {"confirmed": true} التحويل، ويرفضه {"confirmed": false}.
الإيداع الذي تبلّغ عنه بنفسك عبر POST /v3/transactions/ ليس تحويلًا أرسله الـ VASP التجريبي. يبقى بحالة AWAITING_COUNTERPARTY في انتظار الـ VASP المصدر، ويذكر سجلّه الزمني نقطة النهاية المذكورة أعلاه. لا يُطلق أي webhook حتى تنتهي صلاحيته بعد confirmation_timeout_hours. ولا يزال POST /v3/travel-rule/inbound/ يسوّي تسجيل ما بعد الإيداع مقابل دفتر العناوين لديك، كما في التطبيق الحي.
webhook في البيئة التجريبية
يُطلقtravel_rule.status.updated للتطبيقات التجريبية عند كل تغيير في الحالة، مع "environment": "sandbox". ويحمل التحويل الذي ردّ عليه الـ VASP التجريبي أيضًا rail: "TEST_VASP" وtest_vasp: true وtest_vasp_scenario. أما بقية البيئة التجريبية فتسلك كما هو موضح في مراقبة المعاملات في البيئة التجريبية: لا تُقيَّم القواعد، ولا يُرسَل transaction.created ولا transaction.status.updated، ولا تتم فوترة أي شيء.
ما لا تثبته البيئة التجريبية
- لا تثبت أن أي جهة مقابلة حقيقية، أو عضوية شبكة، أو مضيف TRP العام التابع لـ Didit يعمل. لا يُتصل بأي منها.
- لا تثبت أن بيانات اعتماد الشبكة لديك صالحة. تُثبت العضوية المتصلة بأول تبادل حي لها.
- مسارات الدليل لدى الـ VASPs الحقيقية: في التطبيق التجريبي تظهر كل مسارات الدليل بحالة
unavailableمعreason: sandbox_application، ويظهر كل صف بقيمةreachable: false.