fix: Show the Stripe payment error message and change the status to 400 for charge card issues (#22463)
* fix: show stripe payment error message * Update PaymentService.ts * Update chargeCard.handler.ts * Update chargeCard.handler.ts * Update PaymentService.ts * update * update
This commit is contained in:
1 parent
a84e8987cb
commit
fb59342de4
6 files changed
+48
-13
No files matched your search
@@ -6,6 +6,7 @@ import z from "zod";
|
||||
import { sendAwaitingPaymentEmailAndSMS } from "@calcom/emails";
|
||||
import { ErrorCode } from "@calcom/lib/errorCodes";
|
||||
import { getErrorFromUnknown } from "@calcom/lib/errors";
|
||||
import { ErrorWithCode } from "@calcom/lib/errors";
|
||||
import logger from "@calcom/lib/logger";
|
||||
import { safeStringify } from "@calcom/lib/safeStringify";
|
||||
import prisma from "@calcom/prisma";
|
||||
@@ -296,7 +297,28 @@ export class PaymentService implements IAbstractPaymentService {
|
||||
return paymentData;
|
||||
} catch (error) {
|
||||
log.error("Stripe: Could not charge card for payment", _bookingId, safeStringify(error));
|
||||
throw new Error(ErrorCode.ChargeCardFailure);
|
||||
|
||||
const errorMappings = {
|
||||
"your card was declined": "your_card_was_declined",
|
||||
"your card does not support this type of purchase":
|
||||
"your_card_does_not_support_this_type_of_purchase",
|
||||
"amount must convert to at least": "amount_must_convert_to_at_least",
|
||||
};
|
||||
|
||||
let userMessage = "could_not_charge_card";
|
||||
|
||||
if (error instanceof Error) {
|
||||
const errorMessage = error.message.toLowerCase();
|
||||
|
||||
for (const [key, message] of Object.entries(errorMappings)) {
|
||||
if (errorMessage.includes(key)) {
|
||||
userMessage = message;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new ErrorWithCode(ErrorCode.ChargeCardFailure, userMessage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ const test400Codes = [
|
||||
ErrorCode.BookingNotAllowedByRestrictionSchedule,
|
||||
ErrorCode.BookerLimitExceeded,
|
||||
ErrorCode.BookerLimitExceededReschedule,
|
||||
ErrorCode.ChargeCardFailure,
|
||||
];
|
||||
|
||||
const test404Codes = [
|
||||
@@ -33,7 +34,6 @@ const test409Codes = [
|
||||
ErrorCode.NotEnoughAvailableSeats,
|
||||
ErrorCode.BookingConflict,
|
||||
ErrorCode.PaymentCreationFailure,
|
||||
ErrorCode.ChargeCardFailure,
|
||||
];
|
||||
|
||||
describe("getServerErrorFromUnknown", () => {
|
||||
|
||||
@@ -112,6 +112,7 @@ function getStatusCode(cause: Error | ErrorWithCode): number {
|
||||
case ErrorCode.BookerLimitExceeded:
|
||||
case ErrorCode.BookerLimitExceededReschedule:
|
||||
case ErrorCode.EventTypeNoHosts:
|
||||
case ErrorCode.ChargeCardFailure:
|
||||
return 400;
|
||||
// 409 Conflict
|
||||
case ErrorCode.NoAvailableUsersFound:
|
||||
@@ -122,7 +123,6 @@ function getStatusCode(cause: Error | ErrorWithCode): number {
|
||||
case ErrorCode.NotEnoughAvailableSeats:
|
||||
case ErrorCode.BookingConflict:
|
||||
case ErrorCode.PaymentCreationFailure:
|
||||
case ErrorCode.ChargeCardFailure:
|
||||
return 409;
|
||||
// 404 Not Found
|
||||
case ErrorCode.EventTypeNotFound:
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import appStore from "@calcom/app-store";
|
||||
import dayjs from "@calcom/dayjs";
|
||||
import { sendNoShowFeeChargedEmail } from "@calcom/emails";
|
||||
import { ErrorCode } from "@calcom/lib/errorCodes";
|
||||
import { ErrorWithCode } from "@calcom/lib/errors";
|
||||
import { getTranslation } from "@calcom/lib/server/i18n";
|
||||
import type { PrismaClient } from "@calcom/prisma";
|
||||
import type { EventTypeMetadata } from "@calcom/prisma/zod-utils";
|
||||
@@ -141,9 +143,13 @@ export const chargeCardHandler = async ({ ctx, input }: ChargeCardHandlerOptions
|
||||
|
||||
return paymentData;
|
||||
} catch (err) {
|
||||
let errorMessage = `Error processing payment with error ${err}`;
|
||||
if (err instanceof ErrorWithCode && err.code === ErrorCode.ChargeCardFailure) {
|
||||
errorMessage = err.message;
|
||||
}
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: `Error processing payment with error ${err}`,
|
||||
code: "BAD_REQUEST",
|
||||
message: tOrganizer(errorMessage),
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user