#P1801
GET /b2c/v1/online/flight/class/{calculation_id}
Get Flight Class Data
این اندپوینت برای واکشی اطلاعات کامل یک کلاس پروازی از روی شناسه محاسبه (`calculation_id`) طراحی شده است. داده بازگشتی شامل جزئیات فنی، مالی، مارکاپها و تخفیفها برای سنین مختلف (Adult/Child/Infant) است. درصورت معتبر بودن شناسه، داده از سرویس AirPlusApi با متد search واکشی میشود و پس از بررسی فیلترهای application_filter و پردازش مارکاپها توسط LibBaseService::checkSearchFlightItem() به صورت JSON بازگردانده میشود.
Endpoint Info
URL:
/b2c/v1/online/flight/class/{calculation_id}Method: GET
Controller:
V1OnlineController@getFlightClassDataService:
AirPlusApi & LibBaseService::checkSearchFlightItemAuth: Public (Without JWT)
Path Parameters
| پارامتر | نوع | اجباری | توضیح |
|---|---|---|---|
| calculation_id | integer | ✅ | شناسه محاسبهٔ نرخ که از جدول charter_calculations_route استخراج میشود. مقدار واقعی فیلد در DB برابر calculation_id - 10000 است. |
Query Parameters
| پارامتر | نوع | اجباری | توضیح |
|---|---|---|---|
| branch | string | ✅ | شناسهٔ شعبه فعلی برای تنظیم مسیر فروش (مثل b2c-shiraz). |
| group | string | ❌ | گروه کاربری فعلی. مقادیر مجاز: b2c, b2b, b2e, agency. |
| level | integer | ❌ | سطح کاربر در گروه (پیشفرض ۱). |
Logic Flow
📩 دریافت ورودی
calculation_id و پارامترهای branch, group, level↓
۱. بررسی وجود رکورد محاسبه:
جستجو در جدول
جستجو در جدول
charter_calculations_route با شرطهای:id = calculation_id - 10000 و status = 1 → واکشی main_id.↓
۲. فراخوانی AirPlusApi:
متد
متد
sendRequest('search') با پارامترهای زیر:- charter_id = main_id
- calculation_id = calculation_id - 10000
- all_routes = true
Data.Information[0] شامل کلاسهای پروازی است.↓
۳. اجرای منطق پردازش کلاسها:
انتقال داده به
انتقال داده به
LibBaseService::checkSearchFlightItem() برای:- مرتبسازی کلاسها بر اساس قیمت، ظرفیت، و ویژگیهای Remarks.
- اعمال مارکاپها و تخفیفها بر اساس گروه کاربر و نوع پرواز.
- بررسی
application_filterبرای اعتبار مبدا/مقصد، ایرلاین و حالتهای allowed/unallowed.
↓
✅ در صورت موفقیت، دادهٔ نهایی کلاسها در قالب
payload بازگردانده میشود.↓
❌ در صورت عدم پیدا شدن رکورد محاسبه، پاسخ خطا با کد 404 و message "آیتم مورد نظر یافت نشد." برگردانده میشود.
Response Samples
✅ موفق (پردازش کلاسهای پروازی)
{
"payload": {
"Airline": { "iata": "W5", "title": "Mahan Air" },
"Origin": { "iata": "THR" },
"Destination": { "iata": "MHD" },
"FlightNumber": "W51234",
"FlightType": "Charter",
"Classes": [
{
"CabinType": "Economy",
"Financial": {
"Adult": {
"BaseFare": 950000,
"Tax": 50000,
"Payable": 1000000,
"Markup": {
"percent": 10,
"price": 100000,
"final": 1100000,
"discount": { "percent": 0, "price": 0 }
}
}
},
"AvailableSeat": 4,
"Remarks": {
"Inbound": { "Special": 0, "TourRequirement": false }
}
}
]
},
"meta": { "timestamp": 1733750500 }
}
❌ خطا – آیتم یافت نشد
{
"error": {
"code": 1001,
"message": ".آیتم مورد نظر یافت نشد"
},
"meta": { "timestamp": 1733750510 }
}
Technical Notes
- مارکاپها از
HubController::markups($branch)خوانده میشوند و طبق گروه و سطح کاربر اعمال میشوند. - محاسبات تخفیف شامل فیلدهای
discount.percentوdiscount.valueبرای هر سن مسافر است. - فیلترهای سیستم (جدول
application_filter): بسته به نوع پرواز (system/charter/any) و وضعیت (allowed/unallowed) ترتیب اجرا دارند. - در صورتی که دادهای با شرایط فیلتر تطابق نداشته باشد، تابع
checkSearchFlightItemمقدارfalseبازمیگرداند. - در خروجی API، مقادیر مالی هر رده سنی شامل
BaseFare,Tax,TotalFare,Payable,MarkupوCommissionاست.