الانتقال إلى المحتوى الرئيسي
POST
يؤكد أن حساباً مصرفياً في جنوب أفريقيا يعود إلى صاحب الحساب المذكور، وذلك عبر خدمة Account Holder Verification بين البنوك. توفّر Didit هذه الخدمة عبر POST /v3/database-validation/ لتتمكن من التحقق من البيانات المرسلة مقابل المصدر الرسمي والحصول على نتائج مطابقة موحّدة.

التغطية

  • التغطية: —
  • الدولة: جنوب أفريقيا
  • معرّف الخدمة: zaf_bank_account_holder
  • نطاق البيانات: المالية
  • الفئة: الخدمات المصرفية

الإدخالات

  • الإدخالات المطلوبة: national_id وbank_account_number وbank_name
  • الإدخالات الاختيارية: account_type وfirst_name وlast_name وinitials وemail وphone_number وvendor_data
  • الموافقة: مطلوبة
  • التوفر في سير العمل: متاح في سير العمل مع ربط الحقول
  • التغطية: —
  • السعر: $0.40 لكل استعلام ناجح
في سير العمل، لا تُطبع bank_account_number وbank_name على وثيقة الهوية، لذلك لا تنتجهما أي خطوة بمفردها. اجمعهما من إجابة في الاستبيان، أو من حقل استخراج في Document AI، أو من قيمة ترسلها عند إنشاء الجلسة، وقم بربط كل منهما في خطوة التحقق من قواعد البيانات. إلى أن يتم ربطهما، يعرض محرر سير العمل هذه الخدمة معطّلة ويذكر الإدخال الناقص. وقت التشغيل، إذا كان الإدخال ناقصاً يُتخطى الفحص قبل أي استعلام، ولن تُفرض عليك رسوم مقابل قاعدة بيانات لم يُجرَ عليها أي استعلام.

معاملات الجسم

string
افتراضي:"ZAF"
مطلوب
رمز الدولة وفق ISO 3166-1 alpha-3 لخدمة قاعدة البيانات هذه.مثال: ZAF
string
افتراضي:"zaf_bank_account_holder"
مطلوب
مصفوفة تحتوي على معرّف هذه الخدمة. تثبيت الخدمة يُبقي الطلب مقتصراً على قاعدة البيانات المحددة هذه.مثال: zaf_bank_account_holder
موافقة صريحة من المستخدم النهائي على هذه الخدمة.مثال: true
string
افتراضي:"8708150847085"
مطلوب
رقم الهوية الوطنية لهذه الخدمة.مثال: 8708150847085
string
افتراضي:"1234567890"
مطلوب
قيمة bank_account_number التي تتطلبها خدمة قاعدة البيانات هذه.مثال: 1234567890
string
افتراضي:"ABSA"
مطلوب
قيمة bank_name التي تتطلبها خدمة قاعدة البيانات هذه.مثال: ABSA
string
افتراضي:"current"
قيمة account_type التي تتطلبها خدمة قاعدة البيانات هذه.مثال: current
string
الاسم الأول المراد التحقق منه.مثال: John
string
افتراضي:"Doe"
اسم العائلة المراد التحقق منه.مثال: Doe
string
افتراضي:"JD"
قيمة initials التي تتطلبها خدمة قاعدة البيانات هذه.مثال: JD
string
عنوان البريد الإلكتروني.مثال: john.doe@example.com
string
قيمة phone_number التي تتطلبها خدمة قاعدة البيانات هذه.مثال: +15550101000
string
افتراضي:"user-1234"
معرّفك الثابت لهذا الشخص، مثل معرّف المستخدم الداخلي لديك. تستخدمه Didit لربط الفحوصات المستقلة بالمستخدم النهائي نفسه، وتقليل الضوضاء في اكتشاف التكرار.مثال: user-1234

قواعد الإدخال وملاحظات التحقق

  • يجب أن يكون account_type واحداً من أنواع الحسابات في AVS بجنوب أفريقيا: current وsavings وtransmission وsubscriptionShare وnotKnown. المطابقة غير حساسة لحالة الأحرف. احذف الحقل عندما لا تعرف نوع الحساب، فترسل Didit حينها القيمة notKnown، ويُبلَّغ عن التحقق المتقاطع لنوع الحساب بأنه غير مؤكَّد بدلاً من فشل الطلب.

كيفية الاستدعاء

البيانات المُعادة

تعتمد الحقول الدقيقة التي تظهر في source_data على ما يعيده السجل. يوثّق المثال المُولَّد لـ zaf_bank_account_holder حاليًا هذا الشكل الموحّد:
  • accepts_credits
  • accepts_debits
  • account_found
  • account_number_length_valid
  • account_open
  • account_type_match
  • id_match
  • identification_number
  • initials_match
  • surname_match

الأسعار واتفاقيات مستوى الخدمة (SLA)

لا تُحتسب استعلامات South Africa - Bank Account Holder Verification إلا عندما تستلم Didit نتيجة قاطعة من مصدر التحقق.
  • السعر لكل استدعاء: $0.40 USD.
  • الفوترة: لكل استعلام ناجح. لا يُحتسب أي مبلغ عند تعذر الوصول إلى السجل، أو عند غياب الحقول المطلوبة، أو عند رفض الطلب قبل وصوله إلى المصدر.
  • زمن الاستجابة: p95 النموذجي أقل من ثانيتين.
  • التوفر: 99.9% لكل ربع سنة من جهة Didit؛ ويختلف توفر المصادر الخارجية بحسب الدولة ومجموعة البيانات.

ما الذي تؤكده نتيجة MATCH

التحقق من صاحب الحساب (AVS) مجموعة من عمليات المطابقة بنعم أو لا، وليس بحثًا في السجلات. لا يعيد المصدر أبدًا اسمًا أو رقم هوية أو رصيد حساب؛ بل يأخذ البيانات التي ترسلها، ويقارنها بما يحتفظ به البنك لذلك الحساب، ويجيب عن كل مقارنة بعلامة. يتضمن source_data هذه العلامات:
  • account_found - يحتفظ البنك بحساب بهذا الرقم. تفقد بقية العلامات معناها عندما تكون القيمة false.
  • account_open - الحساب مفتوح. قد يُعثر على حساب ويكون مغلقًا.
  • id_match - الحساب مملوك لحامل رقم الهوية الوطنية الذي أرسلته. وهذه هي المطابقة التي وُجدت الخدمة من أجلها.
  • initials_match, surname_match - تطابق initials وlast_name المرسلتان بيانات صاحب الحساب المسجلة.
  • account_type_match - تطابق account_type المرسل النوع الفعلي للحساب.
  • email_match, phone_match - تطابق email وphone_number المرسلان بيانات الاتصال التي يحتفظ بها البنك.
  • accepts_debits, accepts_credits - يمكن للحساب استقبال أوامر الخصم والإيداعات.
  • account_number_length_valid - طول رقم الحساب هو الطول الذي يتوقعه البنك.
يلخّص رمز النتيجة هذه العلامات:
  • MATCH - الحساب موجود، وتطابق كل حقل أرسلته، بما في ذلك id_match.
  • PARTIAL_MATCH - الحساب مملوك لحامل رقم الهوية الوطنية المرسلة، لكن حقلًا واحدًا على الأقل من الحقول الأخرى التي أرسلتها لم يتطابق (مثل لقب مكتوب بشكل مختلف في سجلات البنك، على سبيل المثال). يذكر outcome_detail أسماء الحقول التي فشلت.
  • NO_MATCH - إما ألا يحتفظ البنك بحساب بهذه المواصفات، أو أن الحساب موجود لكنه يعود إلى شخص آخر. وكلتا الحالتين إجابة قاطعة عن الشخص.
لا تُحتسب مطابقة لم تطلبها ولا تُعرض في النتيجة. يجيب AVS بـ N عن كل حقل لم يُرسل، ولذلك لا تظهر surname_match وinitials_match وemail_match وphone_match وaccount_type_match في source_data إلا عند إرسال المدخل المقابل لها. وبالتالي فإن إرسال national_id وbank_account_number وbank_name فقط ما زال يُنتج نتيجة MATCH كاملة.

قيم bank_name وaccount_type المقبولة

bank_name وaccount_type قيم محددة مسبقًا. يُرفض أي قيمة خارج أي من القائمتين قبل تنفيذ الاستعلام، فيتسبب لك الخطأ الإملائي في رحلة ذهاب وإياب بدلًا من رسوم. account_type اختياري، ويقبل القيم التالية دون التمييز بين الأحرف الكبيرة والصغيرة: current · savings · transmission · subscriptionShare · notKnown احذفه عندما لا تعرف نوع الحساب. عندئذ ترسل Didit القيمة notKnown، وينجح الطلب، وتعود account_type_match بالقيمة false لأنه لم يكن هناك ما يُقارَن به. أما أي قيمة أخرى، مثل checking أو cheque أو bond، فتُرفض برمز الحالة 400 الذي يسرد القيم المقبولة. bank_name حقل إلزامي، وتُعد هذه القيم مؤكدة القبول (دون التمييز بين الأحرف الكبيرة والصغيرة): ABSA · Capitec · FNB · Nedbank · Standard Bank · Investec · African Bank · Discovery Bank · Old Mutual · Bank Zero · Tyme · Grindrod تشمل الحسابات الاستهلاكية لدى جميع هذه البنوك، بما فيها Capitec. أرسل الاسم المختصر تمامًا كما هو مدرج: Capitec وليس Capitec Bank، وTyme وليس TymeBank. تظهر للبنك غير المعترف به نتيجة REGISTRY_ERROR، ويذكر outcome_detail الحقل الذي رفضه المصدر.

التمييز بين الحساب غير الموجود والمصدر غير المتاح

هذه نتائج HTTP مختلفة، لذلك لا حاجة إلى تحليل نصوص الأخطاء:
  • الحساب غير موجود - 200 OK، وmatch_type: "no_match"، وoutcome_code: "NO_MATCH"، وsource_data.account_found: false. وهذه إجابة حقيقية من البنك. تُحتسب الرسوم، ويُطبَّق إجراء “لا تطابق” لديك.
  • لم يستجب المصدر - 502 Bad Gateway مع validation_errors[].code بالقيمة empty_provider_response وretryable: true. لم يُثبت شيء عن الشخص، ولا تُحتسب أي رسوم، ويمكن إعادة الطلب بأمان.
  • رفض المصدر تنفيذ الاستعلام - 400 Bad Request مع validation_errors[].code بالقيمة provider_rejected_input وretryable: false. لم يبحث المصدر أبدًا، لأنه لم يقبل ما أُرسل إليه. صحّح البيانات؛ فإعادة إرسال القيم نفسها لن تنجح. لا تُحتسب أي رسوم.
  • أجاب المصدر ورفض مدخلاتك - 502 Bad Gateway مع validation_errors[].code بالقيمة provider_invalid_input (مثل رقم حساب لا يجتاز فحص التنسيق الخاص بالبنك). لا جدوى من إعادة المحاولة قبل تصحيح المدخلات، ولا تُحتسب أي رسوم.
  • لم يغادر طلبك Didit أصلًا - 400 Bad Request يسرد الحقل الذي يجب تصحيحه. لا تُحتسب أي رسوم.
ولا تُعد إلا الحالة الأولى إجابةً عن الشخص. تعامل مع 502 على أنها عابرة: فـ AVS يمرّر الطلب إلى بنك صاحب الحساب بدلًا من قراءة سجل، ولذلك فهو الأبطأ بين خدمات جنوب أفريقيا. أعد المحاولة مع تأخير تدريجي.

متابعة القراءة

آخر تعديل في ٧ نوفمبر ٢٠٢٦