#P1792
POST /b2c/v1/trade/completion
Trade Completion & Issuance
این اندپوینت برای تکمیل فرآیند خرید استفاده میشود.
زمانی که پرداخت (آنلاین یا کیف پول) تایید شد، این متد برای صدور فاکتور (Factor)، بروزرسانی اطلاعات مسافران، ثبت تراکنشهای مالی (Pledgers/Pays) و ارسال SMS نهایی به کاربر فراخوانی میگردد.
Finalize Order
URL:
/b2c/v1/trade/completionMethod: POST
Controller: V1TradeController@storeTradeAfterPay
Middleware:
authWithJwt (Required)Transaction: Atomic (DB::transaction)
Request Body Parameters
این متد یک آبجکت JSON پیچیده شامل اطلاعات پرداخت و جزئیات درخواست را دریافت میکند.
| Parameter | Type | Required | Description |
|---|---|---|---|
| branch | Integer | Yes | شناسه شعبه (Branch ID) برای تعیین تنظیمات مالی و اعتباری. |
| payment | Object | Yes | اطلاعات مربوط به پرداخت انجام شده (مبلغ، درگاه و...). |
| request | Object | Yes | شامل جزئیات اصلی سفارش:
|
Step-by-Step Logic Breakdown
۱. ایجاد فاکتور (Factor Creation)
یک رکورد در جدول factors ایجاد میشود:
- Serial: تولید سریال یکتا بر اساس شعبه.
- Slug: شناسه یکتای 8 کاراکتری برای پیگیری (Reference ID).
- Status: وضعیت پیشفرض
3(صادر شده/موفق) تنظیم میشود. - Colleague Auth: اگر کاربر B2B باشد، شناسه همکار ثبت میشود.
۲. مدیریت مسافران (Passengers Upsert)
سیستم روی آرایه request['passengers'] حلقه میزند:
- اطلاعات هویتی (نام، نام خانوادگی، کد ملی، پاسپورت، تاریخ انقضا و...) در جدول
customersبروزرسانی (Update) میشوند. - تاریخ تولد و انقضای پاسپورت استانداردسازی میشود (حذف کاراکترهای اضافی).
- رابطه (Relationship) بین مسافر اصلی و همراهان تنظیم میشود.
۳. مدیریت مالی و تعهدات (Pledgers & Pays)
این بخش مشخص میکند "چه کسی پول را میدهد":
- حالت B2B (همکار): اگر
pledgersارسال شده باشد، رکوردهایی در جدولpledgersوpays(نوع contract) ثبت میشود تا بدهی همکار مشخص شود. - حالت B2C (عادی): اگر متعهدی نباشد، خودِ اپراتور/کاربر جاری به عنوان متعهد (type='operator') در نظر گرفته میشود.
۴. پردازش آیتمها (Items Processing)
بر اساس نوع سرویس (aircraft, train, accommodation):
- Aircraft: وضعیت بلیط بررسی شده، سن مسافر (برای تشخیص Infant) محاسبه میشود و آیتم در
factor_itemsدرج میشود. - Hub Reservation: اگر سرویس از نوع
airplusHubباشد، درخواست به جدولhub_reservationاضافه شده و مبلغ خرید به عنوان Debit (بدهی) در جدولwalletشعبه ثبت میشود. - Train/Hotel: مشابه پرواز، اطلاعات رزرو پردازش و ذخیره میشوند.
- Temporary Update: وضعیت رزرو موقت (در جدول
temporary_reservations) به تکمیل شده تغییر میکند.
۵. ارسال اعلان (Notification)
اگر notices: true باشد:
- یک متن پیامک (Magic Text) به صورت تصادفی انتخاب میشود (مثلاً: "سفری هیجان انگیز").
- لینک فاکتور (
/f/{slug}) تولید میشود. - جاب
SendNotificationبه صفfastJobارسال میشود. - لاگ سیستمی در
snailJobثبت میگردد.
Response Examples
پاسخ موفق (Success - 200 OK)
{
"status": true,
"time": 1702123456,
"payment": {
"amount": 15000000,
"method": "wallet"
},
"reference_id": "8XKA9L2P", // شناسه فاکتور (Factor Slug)
"details": false // یا آرایهای از خطاها در صورت وجود مشکل جزئی
}
پاسخ موفق همراه با هشدار (Success with Warnings)
اگر خرید کلی انجام شود اما برخی آیتمها (مثلاً یکی از پروازها) رزرو نشوند:
{
"status": true,
"time": 1702123456,
"reference_id": "8XKA9L2P",
"details": [
{
"local_id": 101,
"message": "ظرفیت این کلاس پروازی تکمیل شده است."
}
]
}
پاسخ خطا (Failure)
{
"status": false,
"code": "1004-500",
"message": "1004-500 : خطای داخلی سرور در هنگام ثبت رکورد",
"trace": "..."
}