Skip to main content
#P1713

POST /v2/credit-card

Credit Card: Issue Request

این اندپوینت وظیفه احراز هویت پیشرفته و صدور کارت اعتباری برای مسافر را بر عهده دارد.
در این فرآیند، اطلاعات هویتی و مالکیتی سیم‌کارت از طریق سرویس‌های شاهکار و ثبت‌احوال (Jibit) استعلام شده و در صورت تأیید، یک کارت بانکی مجازی با الگوریتم استاندارد بانکی تولید و ۵۰,۰۰۰ ریال از کیف پول اپراتور کسر می‌گردد.

Request Overview

URL: /v2/credit-card
Method: POST
Controller: CreditCards@createCreditCard
Middleware: authWithJwt

Access Control

  • نیاز به توکن احراز هویت (JWT).
  • اپراتور باید دسترسی به شعبه (`branch`) ارسال شده را داشته باشد.

Body Parameters

Field Type Description
passenger integer (الزامی) شناسه مسافر (Customer ID) که باید در سیستم فعال باشد و نام/نام خانوادگی فارسی داشته باشد.
branch integer (الزامی) شناسه شعبه صادرکننده (جهت تولید پیش‌شماره کارت).
mobile string (اختیاری) شماره موبایل جهت استعلام مالکیت. اگر ارسال نشود، از شماره موبایل پروفایل مسافر استفاده می‌شود.
identity_code string (اختیاری) کدملی جهت استعلام. اگر ارسال نشود، از کدملی پروفایل مسافر استفاده می‌شود.
operator object (تزریق سیستمی) آبجکت اپراتور که معمولاً توسط میدل‌ور به ریکوئست اضافه می‌شود (جهت ثبت در تراکنش کیف پول).

Logic Details

فرآیند صدور کارت دارای منطق پیچیده اعتبارسنجی به شرح زیر است:

  1. اعتبارسنجی اولیه:
    • مسافر باید وجود داشته باشد، وضعیت آن فعال (`status=1`) باشد و نام/نام‌خانوادگی فارسی پر شده باشد.
    • فرمت شماره موبایل و کد ملی (الگوریتم چک‌دیجیت) بررسی می‌شود.
    • بررسی تکراری نبودن: اگر مسافر از قبل کارت فعال (وضعیت ۱ یا ۳) داشته باشد، خطا بازگردانده می‌شود.
  2. استعلام تطابق هویتی (Jibit Identity Check):
    این مرحله تنها در صورتی اجرا می‌شود که مسافر قبلاً احراز نشده باشد (`identity_check IS NULL`).
    • سرویس getIdentitySimilarity فراخوانی می‌شود.
    • اگر درصد تشابه نام و نام خانوادگی کمتر از 90% باشد، خطا بازگردانده می‌شود.
    • نتیجه استعلام در دیتابیس مشتری (`identity_check` و `identity_data`) کش می‌شود.
  3. استعلام مالکیت سیم‌کارت (Shahkar):
    • سرویس getMatchingService برای تطابق کدملی و موبایل فراخوانی می‌شود.
    • در صورت عدم تطابق مالکیت، فرآیند متوقف شده و خطا برمی‌گردد.
  4. تولید شماره کارت (Luhn Algorithm):
    • پیش‌شماره (BIN): بر اساس کد شعبه ساخته می‌شود.
      اگر شعبه >= 90 باشد: 990 + branch+10
      در غیر این صورت: 9900 + branch+10
    • ساختار: [BIN] + [AccountType:1] + [PassengerID:9digits]
    • ارقام باقی‌مانده تصادفی تولید شده و رقم آخر (Check Digit) با فرمول Luhn محاسبه می‌شود.
    • CVV2 تصادفی و انقضا ۳ ساله تنظیم می‌شود.
  5. عملیات مالی و ذخیره‌سازی:
    • ثبت کارت در جدول credit_cards.
    • کسر مبلغ 50,000 ریال از کیف پول اپراتور با عنوان "بابت استعلام هویت مسافر".
    • ارسال پیامک اطلاع‌رسانی به مسافر از طریق صف fastJob.

Response Structure

پاسخ موفق

  • Status Code: 201 Created
  • Body: Empty (بدون محتوا).

پاسخ‌های خطا (نمونه)

{
  "error": {
    "code": 1000, // یا کدهای خطای جیبیت
    "message": "اطلاعات هویتی مسافر با اطلاعات هویتی موجود در سیستم ثبت احوال مطابقت ندارد."
  },
  "meta": {
    "timestamp": 1715001200
  }
}

کدهای وضعیت HTTP:

  • 422 Unprocessable Entity: خطای اعتبارسنجی ورودی، نقص اطلاعات پروفایل یا عدم تطابق هویتی.
  • 500 Internal Server Error: خطای سیستمی یا خطای اتصال به جیبیت.

Flowchart

Start Request
Validate Inputs & Passenger Profile
Card Exists?
Yes
Error: Active Card
↓ (No)
Identity Check is Null?
Yes
Jibit Identity API
Check Name Similarity
Similiarity > 90%?
(No) -> Error 422
No (Already Checked)
Jibit Shahkar API
Match Mobile & NationalCode
Match OK?
No
Error: Ownership
↓ (Yes)
Generate Card
Calc BIN + Luhn Check Digit
Finalize
1. Insert Card
2. Deduct Wallet (50k)
3. Queue SMS
Return 201 Created