#P1715
GET /v2/credit-card
Credit Card: Show Details
این اندپوینت برای مشاهده جزئیات یک کارت اعتباری خاص استفاده میشود.
ویژگی منحصربهفرد این متد، حساسیت به مالکیت (Ownership Awareness) است. سیستم بررسی میکند که آیا درخواستکننده (Operator) همان صاحب کارت است یا خیر. اگر مالک باشد، اطلاعات محرمانه (CVV2، تاریخ انقضا و شماره کامل) نمایش داده میشود؛ در غیر این صورت، دادهها ماسک میشوند.
Request Overview
URL:
/v2/credit-cardMethod: GET
Controller: CreditCards@showCreditCard
Middleware: authWithJwt
Access Control
- نیاز به توکن احراز هویت (JWT).
- دسترسی به اطلاعات کامل (CVV2/Expire) فقط مخصوص صاحب کارت است.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | (اختیاری*) شناسه منحصربهفرد کارت اعتباری. (معمولاً یا این فیلد یا passenger_id باید ارسال شود). |
| passenger_id | integer | (اختیاری*) شناسه مسافر. برای یافتن کارت فعال یک مسافر خاص استفاده میشود. |
* توجه: اگرچه پارامترها اختیاری (Optional) تعریف شدهاند، اما برای دریافت خروجی معتبر باید حداقل یکی از آنها ارسال شود تا کوئری نتیجهای برگرداند.
Logic Details & Security
منطق پردازش شامل مراحل زیر است:
- جستجو و اتصال (Query & Join):
- جستجو در جدول
credit_cardsبر اساسidیاpassenger_id. - اتصال (Left Join) به جدول
customersبرای دریافت نام مسافر. - دریافت اولین رکورد منطبق (
first()).
- جستجو در جدول
- بررسی مالکیت (Ownership Check):
- سیستم شناسه کاربری که لاگین کرده (
$request->operator->id) را با شناسه صاحب کارت (passenger_id) مقایسه میکند.
- سیستم شناسه کاربری که لاگین کرده (
- سطحبندی نمایش دادهها (Visibility Logic):
- حالت ۱: کاربر مالک کارت است
- شماره کارت: کامل نمایش داده میشود (از دیتابیس خوانده میشود).
- فیلدهای حساس:
cvv2وexpire_dateبه پاسخ اضافه میشوند.
- حالت ۲: کاربر مالک نیست (مثلاً ادمین یا اپراتور دیگر)
- شماره کارت: توسط تابع
Functions::creditCardSecurityماسک میشود. - فیلدهای حساس:
cvv2وexpire_dateارسال نمیشوند.
- شماره کارت: توسط تابع
- حالت ۱: کاربر مالک کارت است
Response Structure
حالت اول: پاسخ به مالک کارت (Owner View)
{
"payload": {
"id": 105,
"status": 1,
"card": {
"number": "6219861012345678", // Full Number
"withdrawal_limit": false,
"blocked_amount": false,
"cvv2": "452", // Visible
"expire_date": "1405/02" // Visible
},
"passenger": {
"id": 2045,
"first_name": "علی",
"last_name": "محمدی"
}
},
"meta": { "timestamp": 1715005000 }
}
حالت دوم: پاسخ به سایرین (Admin/Public View)
{
"payload": {
"id": 105,
"status": 1,
"card": {
"number": "6219********5678", // Masked Number
"withdrawal_limit": false,
"blocked_amount": false
// CVV2 and Expire Date are OMITTED
},
"passenger": {
"id": 2045,
"first_name": "علی",
"last_name": "محمدی"
}
},
"meta": { "timestamp": 1715005000 }
}
خطای ۴۲۲ (پیدا نشد)
اگر با پارامترهای ارسالی کارتی پیدا نشود:
{
"error": {
"code": 1000,
"message": "کارت اعتباری پیدا نشد."
},
"meta": { ... }
}
Flowchart
Start Request
↓
Find Card (ID or PassengerID)
↓
Found?
No
Return 422 Error
↓ Yes
Is Operator == Passenger?
Yes (Owner)
Full Access
Show Full Number
Add CVV2 & Expire
Show Full Number
Add CVV2 & Expire
No (Admin)
Restricted Access
Mask Number (****)
Hide Sensitive Data
Mask Number (****)
Hide Sensitive Data
↓
Return JSON Payload