is_ownership_verified: true، مما يتيح للتحويل المرتبط Travel Rule الخروج من UNCONFIRMED_OWNERSHIP.
متى ينشئها Didit نيابةً عنك
نادراً ما تحتاج إلى إنشاء جلسة بنفسك. عندما تكونauto_wallet_verification مفعّلة في إعدادات Travel Rule الخاصة بك (وهي الإعداد الافتراضي)، ينشئ Didit تلقائياً جلسة للأداة الخاصة بإثبات ملكية المحفظة عند إنشاء المعاملة، كلما احتاج التحويل إلى إثبات تحكّم المستخدم النهائي بالمحفظة:
- يكون التحويل في
UNCONFIRMED_OWNERSHIP، أي أن محفظة الطرف المقابل أُعلن أنها ذاتية الاستضافة عند الإرسال. - التحويل صادر وفي
COUNTERPARTY_VASP_NOT_FOUND، أي تعذّر تحديد أي VASP للطرف المقابل، لذا فإن إثبات الملكية هو المسار المتبقي لإتمام التحويل.
action_required الخاصة بالمعاملة (type: "wallet_ownership"، مع url الذي يجب فتحه)، وتشغّلها حزم SDK تلقائياً عند الإرسال من جهة العميل.
لا تحصل التحويلات الواردة التي ينشئها Didit نيابةً عنك (تسجيل Sunrise، أو استعلام TRP وارد، أو الشق الوارد لمسار INTERNAL) أبداً على جلسة منشأة تلقائياً، حتى عندما تنتهي في UNCONFIRMED_OWNERSHIP.
أنشئ الجلسة يدوياً باستخدام POST /v3/travel-rule/widget-session/ عندما ترغب في التحقق المسبق من محفظة قبل وجود أي تحويل، أو عندما تكون auto_wallet_verification معطلة، أو لأحد هذه التحويلات الواردة.
ما الذي يُثبته
تقدم الأداة حتى أربع طرق لإثبات الملكية. ويعتمد ما يظهر منها على الطريقة التي أنشأتَ بها الجلسة، وعلى إعدادات Travel Rule لديك:عقد التحقق من توقيع الرسالة
عند إرسال التوقيع، يُعاد200 مع status: "VERIFIED" بمجرد إثبات السيطرة على المحفظة.
ويُعاد 400 ويبقى الإثبات مفتوحاً، حتى يتمكن العميل من التوقيع مجدداً، مع إحدى قيم code التالية:
عقد التحقق من اختبار Satoshi
التحقق من إيداع اختبار Satoshi غير متزامن، لأن المعاملة يجب أن تُرى على السلسلة ثم تُؤكَّد. عند إرسالtxid الإيداع يُعاد 200 مع status: "PENDING" طالما لم يُؤكَّد الإيداع على السلسلة بعد، ويُحتفظ بالـtxid ولا يُهمل.
ويُعاد 200 مع status: "VERIFIED" بعد تأكيد الإيداع.
ويُعاد 400 مع status: "REJECTED" عند وجود إيداع خاطئ فعلاً: مُرسَل من محفظة أخرى، أو مُرسَل بمبلغ غير متوقع إلى عنوان الإيداع، أو أقدم من التحدي، أو معاملة سبق أن أثبتت السيطرة على محفظة أخرى. يُغلق الإثبات، ويمكن للعميل بدء إثبات جديد ما دامت الجلسة تملك محاولات متبقية.
ويُعاد أيضاً 200 مع status: "PENDING" للإيداع غير المفهرس بعد، ويُعاد 400 مع الرمز DEPOSIT_LOOKUP_FAILED عند فشل البحث من جهة Didit: وفي الحالتين يبقى الإثبات مفتوحاً وتواصل Didit الفحص.
ويُعاد 410 إذا انتهت نافذة الاختبار قبل رصد إيداع صالح.
بعد إرسال txid، تعيد مهمة خلفية فحص الإيداع المعلّق كل خمس دقائق، وتُكمل الإثبات بعد تأكيد المعاملة، فلا يحتاج العميل إلى إعادة إرسال الـtxid.
وعند تمرير satoshi_deposit_address، يُمدَّد expires_at الخاص بجلسة الأداة إلى 24 ساعة على الأقل، أي نافذة اختبار Satoshi، لإتاحة الوقت لتأكيد الإيداع قبل انتهاء الجلسة نفسها.
التدفق
1
إنشاء جلسة أداة
استدعِ
POST /v3/travel-rule/widget-session/ مع المحفظة التي تحتاج إلى التحقق منها. يمكنك اختيارياً ربطها بتحويل ليتقدم التحويل تلقائياً بعد إثبات الملكية.2
فتح الرابط المُعاد
أرسل إلى عميلك الرابط
url من الاستجابة. يُكمل هناك إثباتاً دون الحاجة إلى حساب Didit أو مفتاح API؛ فـtoken في الرابط هو وسيلة المصادقة.3
رصد الاكتمال
عند التحقق من إثبات ما، تُحدّث الأداة إدخال دفتر العناوين بوصفه موثّقاً، وإذا كانت الجلسة مرتبطة بتحويل فإنها تُقدّم ذلك التحويل إلى المرحلة التالية. راقب الحدث
travel_rule.status.updated (للتحويلات المرتبطة) أو استعلم عن سياق الأداة بشكل دوري.إنشاء جلسة أداة
يربط هذا المثال الجلسة بـالتحويل المُعلَن من محفظة ذاتية الاستضافة من دليل Travel Rule، لذا فإنwallet_address هو عنوان المحفظة الوجهة لذلك التحويل.
الجلسة المرتبطة بتحويل تقبل إثباتات لمحفظة الطرف المقابل للتحويل فقط.
url المُعاد في الاستجابة كما هو تماماً، ولا تُنشئه بنفسك.
فتح الرابط المُعاد
رصد الاكتمال
تكشف الأداة endpoint قراءة عامة مفتاحها token؛ استعلم عنها لمعرفة التقدم، أو اعتمد على webhook عندما تكون الجلسة مرتبطة بتحويل:- يصبح
completed_atغير فارغ بمجرد التحقق من إثبات. - يحمل كل عنصر في
proofsالحقول التي تحتاجها طريقته: يضيف إثباتSATOSHI_TESTالحقولdeposit_addressوexpected_amountوexpires_atالخاص به، ويضيف إثباتMESSAGE_SIGNINGالحقلchallenge، وهو النص الذي يوقّعه العميل. - قد يبقى إثبات
SATOSHI_TESTفي الحالةstatus: "PENDING"بينما يُرصد إيداعه على السلسلة دون تأكيد، دون أن يتطلب منك أو من العميل أي إجراء. راجع عقد التحقق من اختبار Satoshi أعلاه. - عند إنشاء الجلسة مع
transaction_id، يؤدي التحقق من الإثبات إلى تقديم التحويل المرتبط، وفي تطبيق مباشر يُطلق webhooktravel_rule.status.updated. فضّل الـ webhook على الاستعلام الدوري. تُعاد الموافقة على استفسارTRPالوارد إلى المُرسِل، وينتقل إلىCOMPLETEDبعد تسليم هذه الموافقة. ينتقل أي تحويل آخر فيUNCONFIRMED_OWNERSHIP(أو وارد فيON_HOLD) إلىCOMPLETED، أو إلىCOUNTERPARTY_MISMATCHED_DATAعندما لا يطابق اسم المستفيد اسم حامل المحفظة، وينتقل إيداع sunrise مُسوّى يكتمل إلىFINISHED. ينتقل التحويل الصادر فيCOUNTERPARTY_VASP_NOT_FOUNDإلىCOMPLETED. - يبقى إثبات
SCREENSHOTفي الحالةstatus: "PENDING"في هذا السياق حتى بعد تأكيدك للملكية. توافق عليه عبرPOST .../travel-rule/ownership/، الذي يقبل فقط تحويلاً ينتظر تأكيد الملكية. لذلك لا يملك إثبات لقطة الشاشة مساراً للموافقة في جلسة بلا تحويل مرتبط، أو في جلسة مرتبطة بتحويل صادر فيCOUNTERPARTY_VASP_NOT_FOUND. عطّلallow_screenshot_proofإذا كان يجب ألا تعرض هذه الجلسات هذا الإثبات. - بعد إثبات مرفوض تحصل الجلسة على محاولة جديدة ما دامت المحاولات متبقية. يعرض
max_attemptsوattempts_usedوattempts_remainingالعدد، ويحمل الإثبات المرفوضrejection_reason، وعندما تكونattempts_remainingمساوية لـ0تؤدي محاولة بدء إثبات آخر إلى استجابة بالرمز409، فتُنشئ جلسة جديدة. - تُعيد endpoint سياق الأداة
404لرمز غير معروف، و410بعد انتهاء صلاحية الجلسة دون اكتمالها.
لا توجد هنا تبعيات أحادية الاستخدام: تنتهي الأداة وخادمك إلى الحالة الدائمة نفسها (إدخال دفتر العناوين الموثّق وحالة التحويل)، لذا يمكن دائماً استعادة webhook لم يُسلَّم أو علامة تبويب أُغلقت بإعادة قراءة التحويل أو سياق الأداة.
التعريب والعلامة التجارية
تُعرض الأداة بـ 54 لغة، وفق مسار اللغة في الرابط (أو لغة المتصفح الافتراضية). عند تفعيل العلامة البيضاء لتطبيقك، ترث الأداة تلقائياً العلامة التجارية لتدفق التحقق: الشعار، وألوان العلامة التجارية، وتنسيق الأزرار واللوحات، والخط المخصص، والأيقونة المفضلة، واسم تطبيقك العام في العنوان. لا يلزم أي إعداد منفصل، إذ تنطبق على هذه الأداة التخصيصات نفسها التي ضبطتها لجلسات KYC. يرى المستخدم الذي يعود إلى رابط مكتمل شاشة الإكمال مرة أخرى، وإذا مررتcallback_url، فإن الأداة تعيد المستخدم إليه.
تعرض الروابط المنتهية الصلاحية شاشة انتهاء صلاحية تحمل العلامة التجارية، تطلب من المستخدم طلب رابط جديد.
أنشئ جلسة جديدة لهم باستخدام POST /v3/travel-rule/widget-session/: إعادة إرسال التحويل باستخدام action: "resend" لا تنشئ جلسة.
الخطوات التالية
Travel Rule
دورة حياة التبادل الكاملة، والمسارات، والإعدادات، وتدفقات الاستلام.
دفتر عناوين المحافظ
سجّل المحافظ التي تتحكم فيها حتى تُطابَق التحويلات الواردة معها.
webhooks
اشترك في travel_rule.status.updated للتفاعل عندما يتسبب إثبات في انتقال تحويل إلى مرحلة لاحقة.
SDKs الأصلية
افتح عنوان URL الخاص بالأداة في متصفح النظام، لا في عرض الويب الخاص بـ SDK.