diff --git a/app/[lang]/(live)/(public)/hotelreservation/(payment-callback)/payment-callback/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(payment-callback)/payment-callback/page.tsx
index 4b4cd0bd7..2b91bcc19 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(payment-callback)/payment-callback/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(payment-callback)/payment-callback/page.tsx
@@ -30,7 +30,6 @@ export default async function PaymentCallbackPage({
const lang = params.lang
const status = searchParams.status
const confirmationNumber = searchParams.confirmationNumber
- const hotelId = searchParams.hotel
if (status === "success" && confirmationNumber) {
const confirmationUrl = `${bookingConfirmation(lang)}?${BOOKING_CONFIRMATION_NUMBER}=${confirmationNumber}`
@@ -42,6 +41,8 @@ export default async function PaymentCallbackPage({
const returnUrl = payment(lang)
const searchObject = new URLSearchParams()
+ let errorMessage = undefined
+
if (confirmationNumber) {
try {
const bookingStatus = await serverClient().booking.status({
@@ -51,37 +52,26 @@ export default async function PaymentCallbackPage({
// TODO: how to handle errors for multiple rooms?
const error = bookingStatus.errors.find((e) => e.errorCode)
+ errorMessage =
+ error?.description ??
+ `No error message found for booking ${confirmationNumber}, status: ${status}`
+
searchObject.set(
"errorCode",
error
? error.errorCode.toString()
: PaymentErrorCodeEnum.Failed.toString()
)
- trackPaymentEvent({
- event: "paymentFail",
- hotelId,
- errorMessage:
- bookingStatus?.metadata?.errorMessage ??
- `No error message found for booking ${confirmationNumber}, status: ${status}`,
- })
} catch (error) {
console.error(
`[payment-callback] failed to get booking status for ${confirmationNumber}, status: ${status}`
)
if (status === "cancel") {
searchObject.set("errorCode", PaymentErrorCodeEnum.Cancelled.toString())
- trackPaymentEvent({
- event: "paymentCancel",
- hotelId,
- })
}
if (status === "error") {
searchObject.set("errorCode", PaymentErrorCodeEnum.Failed.toString())
- trackPaymentEvent({
- event: "paymentFail",
- hotelId,
- errorMessage: `Failed to get booking status for ${confirmationNumber}, status: ${status}`,
- })
+ errorMessage = `Failed to get booking status for ${confirmationNumber}, status: ${status}`
}
}
}
@@ -90,6 +80,8 @@ export default async function PaymentCallbackPage({
)
}
diff --git a/components/HotelReservation/EnterDetails/Payment/PaymentCallback/index.tsx b/components/HotelReservation/EnterDetails/Payment/PaymentCallback/index.tsx
index 8fd613d5e..88d2e2581 100644
--- a/components/HotelReservation/EnterDetails/Payment/PaymentCallback/index.tsx
+++ b/components/HotelReservation/EnterDetails/Payment/PaymentCallback/index.tsx
@@ -7,15 +7,20 @@ import { detailsStorageName } from "@/stores/enter-details"
import { createQueryParamsForEnterDetails } from "@/components/HotelReservation/SelectRate/RoomSelection/utils"
import LoadingSpinner from "@/components/LoadingSpinner"
+import { trackPaymentEvent } from "@/utils/tracking"
import type { PersistedState } from "@/types/stores/enter-details"
export default function PaymentCallback({
returnUrl,
searchObject,
+ status,
+ errorMessage,
}: {
returnUrl: string
searchObject: URLSearchParams
+ status: "error" | "success" | "cancel"
+ errorMessage?: string
}) {
const router = useRouter()
@@ -29,11 +34,25 @@ export default function PaymentCallback({
searchObject
)
+ if (status === "cancel") {
+ trackPaymentEvent({
+ event: "paymentCancel",
+ hotelId: detailsStorage.booking.hotel,
+ })
+ }
+ if (status === "error") {
+ trackPaymentEvent({
+ event: "paymentFail",
+ hotelId: detailsStorage.booking.hotel,
+ errorMessage,
+ })
+ }
+
if (searchParams.size > 0) {
router.replace(`${returnUrl}?${searchParams.toString()}`)
}
}
- }, [returnUrl, router, searchObject])
+ }, [returnUrl, router, searchObject, status, errorMessage])
return
}