#P1713
POST /v2/credit-card
Credit Card: Issue Request
این اندپوینت وظیفه احراز هویت پیشرفته و صدور کارت اعتباری برای مسافر را بر عهده دارد.
در این فرآیند، اطلاعات هویتی و مالکیتی سیمکارت از طریق سرویسهای شاهکار و ثبتاحوال (Jibit) استعلام شده و در صورت تأیید، یک کارت بانکی مجازی با الگوریتم استاندارد بانکی تولید و ۵۰,۰۰۰ ریال از کیف پول اپراتور کسر میگردد.
Request Overview
URL:
/v2/credit-cardMethod: 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
فرآیند صدور کارت دارای منطق پیچیده اعتبارسنجی به شرح زیر است:
- اعتبارسنجی اولیه:
- مسافر باید وجود داشته باشد، وضعیت آن فعال (`status=1`) باشد و نام/نامخانوادگی فارسی پر شده باشد.
- فرمت شماره موبایل و کد ملی (الگوریتم چکدیجیت) بررسی میشود.
- بررسی تکراری نبودن: اگر مسافر از قبل کارت فعال (وضعیت ۱ یا ۳) داشته باشد، خطا بازگردانده میشود.
- استعلام تطابق هویتی (Jibit Identity Check):
این مرحله تنها در صورتی اجرا میشود که مسافر قبلاً احراز نشده باشد (`identity_check IS NULL`).- سرویس
getIdentitySimilarityفراخوانی میشود. - اگر درصد تشابه نام و نام خانوادگی کمتر از 90% باشد، خطا بازگردانده میشود.
- نتیجه استعلام در دیتابیس مشتری (`identity_check` و `identity_data`) کش میشود.
- سرویس
- استعلام مالکیت سیمکارت (Shahkar):
- سرویس
getMatchingServiceبرای تطابق کدملی و موبایل فراخوانی میشود. - در صورت عدم تطابق مالکیت، فرآیند متوقف شده و خطا برمیگردد.
- سرویس
- تولید شماره کارت (Luhn Algorithm):
- پیششماره (BIN): بر اساس کد شعبه ساخته میشود.
اگر شعبه >= 90 باشد:990+branch+10
در غیر این صورت:9900+branch+10 - ساختار: [BIN] + [AccountType:1] + [PassengerID:9digits]
- ارقام باقیمانده تصادفی تولید شده و رقم آخر (Check Digit) با فرمول Luhn محاسبه میشود.
- CVV2 تصادفی و انقضا ۳ ساله تنظیم میشود.
- پیششماره (BIN): بر اساس کد شعبه ساخته میشود.
- عملیات مالی و ذخیرهسازی:
- ثبت کارت در جدول
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
Check Name Similarity
Similiarity > 90%?
(No) -> Error 422
No (Already Checked)
↓
Jibit Shahkar API
Match Mobile & NationalCode
Match Mobile & NationalCode
Match OK?
No
Error: Ownership
↓ (Yes)
Generate Card
Calc BIN + Luhn Check Digit
Calc BIN + Luhn Check Digit
↓
Finalize
1. Insert Card
2. Deduct Wallet (50k)
3. Queue SMS
1. Insert Card
2. Deduct Wallet (50k)
3. Queue SMS
↓
Return 201 Created