Chuyển tới nội dung chính

add_passenger_fee

Thêm phí ghế, hành lý hoặc phí khác cho một hành khách trên một chặng và thu khoản phí đó. Với user_request_id và user_request_fee_id, đây cũng là cách admin áp dụng một khoản phí của user request RESOLVED — bước cuối của luồng user request. Mỗi khoản phí của một yêu cầu được áp dụng bằng một lần gọi riêng.

Đây là một GraphQL mutation trả về Passenger, và cần role ADMIN.

Input​

input: AddPassengerFeeInput!

TrườngKiểuBắt buộcMô tả
booking_history_idStringCóBooking cần thêm phí.
fee_typeFeeTypeCóBAGGAGE, SEAT hoặc OTHER. Với khoản phí của user request, phải đúng loại của khoản đó.
departure_eticket_idStringMột trong haiE-ticket của hành khách ở chặng đi.
arrival_eticket_idStringMột trong haiE-ticket của hành khách ở chặng về.
baggageAddBaggageInputKhi BAGGAGE, không kèm user requestHành lý cần thêm.
seatSeatInputKhi SEAT, không kèm user requestGhế cần thêm.
other_feeOtherFeeInputKhi OTHER, không kèm user requestKhoản phí cần thêm.
user_request_idStringKhôngUser request RESOLVED có khoản phí cần áp dụng. Cần kèm user_request_fee_id.
user_request_fee_id mớiStringKhi có user_request_idKhoản phí của yêu cầu đó cần áp dụng. Mỗi khoản chỉ áp dụng được một lần.

E-ticket xác định cả hành khách lẫn chặng. Nếu gửi cả hai, e-ticket chặng đi được dùng.

Áp dụng khoản phí của user request​

Khoản phí chỉ được chấp nhận khi thỏa tất cả điều kiện sau:

  • Yêu cầu ở trạng thái RESOLVED.
  • Thuộc cùng booking với booking_history_id, và cùng hành khách với e-ticket.
  • Khoản phí thuộc fees của yêu cầu, chưa paid, và đúng chặng của e-ticket.
  • fee_type đúng loại của khoản phí.

Khi đó, API hoạt động khác đi:

Không kèm user requestKèm khoản phí của user request
Dữ liệu ghế / hành lý / phí khácBắt buộc; quyết định thứ được thêmLấy từ khoản phí; baggage, seat và other_fee trong input bị bỏ qua
Thu của công tyGiá của khoản phícorporate_amount của khoản phí, đổi sang VND (0 nghĩa là không thu)
Giá booking tăng thêmGiá của khoản phíToàn bộ price của khoản phí
Sau đóKhông có gì mớiKhoản phí thành paid, và khoản thanh toán được thêm vào extra_purchase_ids của nó

Phần của người yêu cầu (price - corporate_amount) đã được thanh toán bằng begin_personal_payment, trước khi phê duyệt.

Mutation
mutation {
add_passenger_fee(input: {
booking_history_id: "..."
fee_type: SEAT
departure_eticket_id: "..."
user_request_id: "3JMY..."
user_request_fee_id: "3Jwm...seat"
}) { id }
}

Khi thanh toán thất bại​

Nếu thanh toán bị từ chối, khoản phí vẫn chưa thanh toán và admin có thể thử lại. Mã lỗi của chính store service được trả về, ví dụ not_enough khi số dư công ty không đủ.

Nếu không kết nối được tới dịch vụ thanh toán, API trả về payment_unreachable và khoản phí vẫn được đánh dấu là đã thanh toán, vì có thể tiền đã bị trừ. Hãy hỏi đội backend trước khi thử lại.

Mã lỗi​

Mã lỗi của khoản phí user request:

Mã lỗiÝ nghĩa
user_request_not_founduser_request_id không tồn tại.
<status>_user_requestYêu cầu không ở RESOLVED — ví dụ confirmed_user_request.
user_request_fee_id_requiredGửi user_request_id mà không có user_request_fee_id.
user_request_fee_not_foundKhoản phí không thuộc các khoản của yêu cầu.
paid_user_request_feeKhoản phí đã được áp dụng.
user_request_fee_type_mismatchfee_type không đúng loại của khoản phí.
user_request_booking_mismatchYêu cầu thuộc booking khác.
user_request_passenger_mismatchYêu cầu dành cho hành khách khác.
user_request_leg_mismatchKhoản phí thuộc chặng còn lại.
payment_unreachableDịch vụ thanh toán không phản hồi; có thể tiền đã bị trừ.

Mã lỗi của chính khoản phí:

Mã lỗiÝ nghĩa
MISSING_DEPARTURE_ARRIVAL_ETICKET_IDKhông gửi e-ticket id nào.
not_foundbooking_history_id không tồn tại.
INVALID_ETICKET_IDKhông hành khách nào trong booking có e-ticket đó.
missing_fee_dataThiếu input tương ứng với fee_type — baggage, seat hoặc other_fee.
invalid_transaction_timetransaction_time nằm trong tương lai.
invalid_dataHành lý không lớn hơn hành lý hành khách đang có ở chặng đó.
already_has_seatHành khách đã có ghế ở chặng đó.

API này cũng có thể trả về Lỗi middleware.