فئات المعاملات
لكل معاملةtransaction_category يحدد كيف تعالجها القواعد والتحليلات:
تفاصيل المعاملة
يحمل كائنtransaction_details البيانات المالية:
الطرف المعني والطرف المقابل
لكل معاملة طرف معني (إلزامي) وطرف مقابل (اختياري). يستخدم الطرفان نموذج الطرف نفسه:
يشتق Didit قيمة
country_code للطرف من address.country عندما يكون address كائناً. وعندما يكون address نصاً، تعود قيمة country_code لذلك الطرف null.
عندما يطابق vendor_data مستخدماً أو شركةً موجودةً، يربط Didit المعاملة تلقائياً بملف تعريف ذلك الكيان، ما يتيح تقييم القواعد عبر الجلسات وفحوصات وتيرة المعاملات. وفي الاستجابة، يُعاد الطرفان في المصفوفة parties بالدورين APPLICANT وCOUNTERPARTY.
طرق الدفع
أرفقpayment_method بكل طرف لوصف أداة الدفع في ذلك الجانب:
في معاملات
travelRule، تعلن طريقة الدفع الخاصة بالطرف المقابل مع method_type: "unhosted_wallet" (الاسم البديل type) أن محفظة الطرف المقابل ذاتية الاستضافة.
عندما يكون Travel Rule مفعّلاً، ولا يقل المبلغ بعملة التطبيق الافتراضية عن threshold_amount، تنتقل الحوالة مباشرة إلى UNCONFIRMED_OWNERSHIP ومسار إثبات الملكية. راجع المحافظ ذاتية الاستضافة المعلنة.
بالنسبة للمعاملات بالعملات المشفرة، ضمّن عناوين المحافظ في account_id واضبط currency_kind على crypto ليعمل فحص البلوكتشين تلقائياً. يحدد الاتجاهُ المحفظةَ التي تُفحص: يستخدم الفحص المسبق للوارد محفظةَ المُرسِل في counterparty.payment_method.account_id، ويستخدم فحص الصادر محفظةَ الوجهة في counterparty.payment_method.account_id. وإذا أرسلت تجزئة البلوكتشين في transaction_details.payment_reference_id، يتطلب فحص المعاملة الواردة عنوان الإيداع الخاص بخدمتك في subject.payment_method.account_id، بينما يتطلب فحص المعاملة الصادرة محفظةَ الوجهة في counterparty.payment_method.account_id.
تجاوز فحص العملات المشفرة
استخدمinclude_crypto_screening على المستوى الأعلى في الطلب لتجاوز الإعداد الافتراضي المضبوط في المعاملات > الإعدادات في وحدة التحكم:
سياق الجهاز
أضف معلومات الجهاز إلى الطرف المعني (واختيارياً إلى الطرف المقابل) لتفعيل قواعد ذكاء الجهاز. حقل الطلب هوdevice_context في كل طرف، والاسم البديل بصيغة camelCase وهو device مقبول أيضاً، وهو ما يستخدمه التنسيق السلكي لـ SDK. تعيد الاستجابة الحقل كـ device في كل طرف ضمن المصفوفة parties.
لا يتم استنتاج
browser_family وplatform من user_agent. يجب إرسالهما كمفاتيح علوية صريحة داخل device_context لكي تعمل قواعد ذكاء الجهاز. إذا كنت تعتمد على SDK من Didit، فيتم جمع هذه الحقول تلقائياً.userAgent وbrowserFamily وbrowserVersion وosFamily وosVersion وacceptLang وsessionId وsessionAgeMs. ويقبل الكائن الفرعي network_context الأسماء البديلة ip وcountryCode3 وlat وlon، كما يُدمج الكائن ipInfo على المستوى الأعلى في network_context.
يتيح سياق الجهاز قواعد مثل اكتشاف تعدد الحسابات (البصمة نفسها عبر أطراف مختلفة)، واكتشاف مزيج متصفح جديد وعنوان IP جديد، واكتشاف تحويل ذي قيمة عالية بعمر جلسة قصير، واحتساب درجة المخاطر بناءً على الموقع.
الخصائص المخصصة
أضف أي أزواج مفتاح-قيمة إضافية في الكائنcustom_properties. يمكن للقواعد الإشارة إلى هذه الحقول في شروطها، وهذا مفيد لتمرير سياق خاص بالعمل، مثل فئة المنتج أو معرّف التاجر أو القناة.
custom_values.<key>، فمثلاً الـ payload أعلاه يطابق custom_values.product_category eq "electronics". في منشئ القواعد في Console، تظهر المفاتيح التي وردت في المعاملات المستلمة مؤخراً في محدد حقول الشرط ضمن الخصائص المخصصة، ويتيح لك أدخل خاصية مخصصة في المجموعة نفسها كتابة أي مفتاح يدوياً (مع مراعاة حالة الأحرف). راجع القواعد واحتساب الدرجات للتفاصيل.
نموذج الطلب
الاستجابة
تعيد واجهة API المعاملة التي تم إنشاؤها مع نتائج التقييم الأولية:
راجع مرجع API للاطلاع على مخطط الطلب والاستجابة الكامل، ومرجع مخطط الاستجابة للاطلاع على جولة موضحة لنموذج الـ payload.
تعيين معاملة لمراجِع
عيّن معاملة معلّقة لعضو في تطبيقك، أو ألغِ تعيينها، باستخدام مفتاح API يملك الإذنwrite:transactions.
يُسجَّل كل تغيير في الجدول الزمني للمعاملة بالحدث TRANSACTION_ASSIGNED.
يأخذ الاستدعاءان
assignee_email، وهو البريد الإلكتروني لعضو في التطبيق سجّل الدخول إلى Didit.
أرسل null أو سلسلة فارغة لإلغاء التعيين.
ويأخذ الاستدعاء الجماعي أيضاً transaction_ids، وهي قائمة من 1 إلى 500 من معرّفات UUID للمعاملات.
uuid وtransaction_number وassignee وchanged (تكون false إذا كانت المعاملة معيّنة بالفعل لهذا المكلَّف)، أو 404 إذا لم تكن المعاملة موجودة في التطبيق.
ويعيد الاستدعاء الجماعي transactions (عنصر واحد بالشكل أعلاه لكل معاملة)، وupdated_count وnot_found_transaction_ids.
صفِّ قائمة المعاملات باستخدام assignee، وهي قائمة مفصولة بفواصل تُطابق أي قيمة فيها: me أو unassigned أو rules (قرّرتها القواعد وحدها دون تدخل مراجِع) أو بريد إلكتروني لعضو.
Idempotency
txn_id (الـ transaction_id الذي ترسله) فريد لكل تطبيق.
إعادة إرسال transaction_id موجود مسبقاً تُرجع 400 مع الرسالة A transaction with this transaction_id already exists. في حقل transaction_id، وإذا تزامن طلبان متطابقان فإن الطلب الثاني يتلقى 409.
ولا يُرجع أي من الردّين المعاملة الموجودة.
لإعادة المحاولة بأمان، عامِل 400 أو 409 لـ transaction_id مكرر على أنه “تم إنشاؤها مسبقاً”، وابحث عن المعاملة الموجودة بدلاً من إعادة الإرسال: اقرأها عبر GET /v3/transactions/{uuid}/ باستخدام uuid من الاستجابة الأولى، أو استخدم transaction_id (وهو uuid الخاص بـ Didit) الذي يحمله webhook الحدث transaction.created بجانب txn_id الخاص بك.
أنشئ txn_id دائماً من جهتك (مثلاً معرّف قاعدة بيانات المعاملات لديك، أو UUID، أو تجزئة حتمية).
الاستيعاب التاريخي
مرّرtxn_date بتاريخ في الماضي لاستيعاب المعاملات التاريخية. يستمر تقييم القواعد افتراضياً، واستخدم استيراد CSV من لوحة التحكم مع وضع الإدخال الجاف إذا أردت تخطي تقييم القواعد أثناء التحميل الجماعي للبيانات التاريخية. راجع دليل التكامل.
الخطوات التالية
القواعد والتقييم
كيفية تقييم المعاملات المرسلة مقابل القواعد.
مخطط الاستجابة
حمولة الاستجابة الكاملة مع الشروح.
فحص العملات الرقمية
فحص المحافظ والمعاملات تلقائياً للمعاملات بالعملات الرقمية.
Travel Rule
إرفاق بيانات الامتثال لـ Travel Rule بتحويلات الأصول الافتراضية.
إثراء بيانات IP
السياق المستمد من عنوان IP المتاح للقواعد.
مرجع API
مخطط الطلب الكامل لنقطة إنشاء المعاملة.