Skip to main content
#P1465

* POST /api/v2/online/accommodation/check_status

Route InfoAccommodation Check Status (V2)

Endpoint:
POST
Delegates
to:BaseService::checkAccommodationStatus(type, accommodation,
MethodEndpointControllerInputPurpose
POST/api/v2/online/accommodation/check_status
Controller: OnlineController@checkAccommodationStatus
JSON Bodyبررسی و قفل رزرو (Booking Lock) در Providerهای Tport, Sepehr, AirPlus, SnappTrip
agentDetails)
Auth: authWithJwt

Logic

Description

تابع بزرگاین و چندحالته است:اندپوینت براساس پارامتر جهت بررسی وضعیت رزرو اقامتگاه در نسخه دوم سیستم آنلاین طراحی شده است. مسیر پردازش بسته به نوع سرویس ($type (one of [tport, airplus, sepehr, snapptrip]) رزرو قفل می‌شود. برای هر سرویس داده‌های mapped (ID های mapping_accommodation و roomtypes و board_type) گرفته می‌شود و سپس:

متفاوت
بوده
    و
  • Tport: فراخوانی دو API calculate_price و save_normal_reserve → تولید LockId.
  • نتایج
  • AirPlus: ولیدیشن مسافر (کدملی/پاسپورت/تاریخ سن/ظرفیت) و مقایسه Lock موقت با DB charters.
  • نهایی
  • Sepehr: خواندن مستقیم از Lock Data ذخیره‌شده.
  • SnappTrip: ایجاد booking با API create_book و برگشت reservation_code.
  • شامل
وضعیت،
تغییر

در نهایت اطلاعات قفل در جدول قیمت، کد لاک موقت یا پیام خطا – در جدول temporary_reservations ثبت  ثبت می‌گردد.گردند.

Input

Request Example


POST /v2/online/accommodation/check_status
{
  "type": "tport"airplus",
  "accommodation": {
    "id":331, 1549,
    "room_type"checkin":{ "id":11,"board_type_list":{"id":5,"service":"tport"}}}2025-01-15",
    "agentDetails"checkout":{ "mobile"2025-01-20",
    "rooms": 2,
    "0912xxxxxx","email"adults":"agent@test.ir" 4
  }
}
  

Response

 Example

{
  "status": "success",
  "changed": true,false,
  "data"lock_id": {
   "lock_data": {"Status":true,"Service":"tport","LockId":7139841,"total_payable":4120000}TMP-7634",
  "payable": false,5840000,
  "credit"errors": false,
   "error": false[]
}
  }

Security

Technical

JWT معتبر + دسترسی ماژول Online لازم است. همه‌ی پارامترها اعتبارسنجی می‌شوند.

Logic

Dependencies

Client → send request /v2/online/accommodation/check_status
Parse Request → extract type و accommodation
Branch by type (Tport / Airplus / Sepehr / Snapptrip)
↙ ↓ ↘
Tport → call calculate_price() → save_normal_reserve() → return lock_id
Airplus → validate passengers → check charter capacity handle codes 1005–1026
Sepehr → use saved temporary lock if exists
Snapptrip → call create_book() → return reservation_code
Save result snapshot → temporary_reservations
Return response: {status, changed, lock_id, payable, errors[]}

Error Conditions

  • TportApi1005, SepehrApi, AirPlusApi, SnappTripApi – ظرفیت پر شده است
  • mapping_accommodations1010, mapping_roomtypes, mapping_board_type – اتاق در تاریخ انتخابی یافت نشد
  • ReservationController::capacityItemCharter(), taxesItemCharter(), financialCalculation()1026 – اطلاعات ناقص مسافران
  • در سایر موارد پاسخ شامل UserController::upsertPassenger()errors[]
  • temporary_reservations DB tableبا جزئیات دقیق می‌شود.

Performance

Notes

با درجه وابستگی به APIهای خارجی، میانگین پاسخ ۳–۸ ثانیه است. برای AirPlus بیشترین بار اعتبارسنجی داخلی دارد.

در

Error Handling

صورت

کدهای خطا از ۱۰۱۱ تا ۱۰۲۶ مطابق ReservationController::staticGetErrorDetails() برمی‌گردند.

فعال
{"changed":false,"data":{"error":[{"code":1011,"message":"کدملی نامعتبر است"}]}}
بودن

Side Effects

ماژول

ثبت داده در جدول temporary_reservations. در صورت موفقیت، LockId روی Booking با تاریخ expire موقت ذخیره ، هر درخواست تکراری (با داده‌ی یکسان) پیش از تریگر مجدد منطق بررسی از کش Redis مورد بررسی قرار می‌شود.گیرد.

Audit Trail

در لاگ system_logs با نوع "AccommodationLockAttempt" و نتیجه Success/Failed ذخیره می‌شود.

Improvement

  • مدیریت queue برای API های بیرونی.
  • افزودن timeout و retry برای Tport و SnappTrip.
  • بازگردانی LockTTL در خروجی (زمان اعتبار قفل).

Conclusion

این تابع قلب مرحله‌ی «رزرو موقت و پیش‌خرید» در pipeline رزرو آنلاین است و پس از آن تابع نهایی storeTrade() برای ثبت قطعی فراخوانی می‌شود.