Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 21 Next »

Context

Iberia proposes the inclusion of new error messages in the error detailing flow, following the established processes in stories:

The objective is to enhance error communication between the backend and frontend.

✅ Proposed Solution

To address these issues, we propose the creation of new error classes in the backend that will be sent to the frontend. This implementation will include specific error codes for different scenarios, such as payment cancellations, instead of using generic codes. This change will allow the frontend to display more informative and contextualized error messages, improving clarity and the overall user experience.

Backend

After the solution approval, will need to update the below documents with new classes, code errors, and any important things.

Payment method

Paycomet Code

Public Message (Logs/Amplitude)

Error Code

Class Error

Documentation

Card

100

Expired credit card

PAYMENT.2.100.103

ExpiredCardError

Represents an error when the card has expired

Card

105

Insufficient funds

PAYMENT.2.100.104

NoFundsCardError

Represents an error when the card does not have enough funds in order to perform the payment

Card

127

Invalid parameter

PAYMENT.2.001.001

InvalidParameterError

Represents an error when there is an invalid parameter

Card

137

Credit card not valid

PAYMENT.2.100.106

CardNotValidError

Represents an error when the card declined for various reasons

Card

141

Amount zero or not valid

PAYMENT.2.100.107

AmountNotValidError

Represents an error when the amount is zero or not valid

Card

143

Authentification error

PAYMENT.4.001.001

AuthenticationError

Represents errors related to security and authentication within the payment system.
Invalid access tokens, and other related security and authentication problems.

Card

195

Requires SCA authentication

PAYMENT.4.001.002

ScaAuthenticationError

Represents an error a Strong Customer Authentication error.

SCA (Strong Customer Authentication) is a requirement of the European directive PSD2 (Revised Payment Services Directive) aimed at enhancing the security of online financial transactions

Card

500

General PSP error

PAYMENT.4.000

PspError2

General, unspecified payment error.

Card

506

Confirmation data not valid

PAYMENT.4.006.001

ConfirmationDataNotValidError

Represents an error when confirmation data is not valid

Card

510

Refund is not possible

PAYMENT.4.010.001

RefundNotPossibleError

Represents an error when the refund is not possible

Card

535

General PSP error

PAYMENT.4.000

PspError2

General, unspecified payment error.

Card

549

General PSP error

PAYMENT.4.000

PspError2

General, unspecified payment error.

Card

555

Could not find the previous operation

PAYMENT.4.009.001

CouldNotFindPreviousOperationError

Represents an error when could not find the previous operation

Card

569

Denied operation

PAYMENT.4.010

OperationDeniedError

Represents an error when the operation cannot be performed

Card

1019

Operation timeout exceeded

PAYMENT.4.011

TimeOutConnectionError

Represents an error when there is a timeout

Card

1026

Duplicated external reference

PAYMENT.4.006.002

DuplicatedExternalReferenceError

Represents an error when there is a duplicated external reference

Card

1038

Field DS_MERCHANT_AMOUNT incorrect

PAYMENT.4.009.002

FieldDsMerchantAmountIncorrectError

Represents an error when the field DS_MERCHANT_AMOUNT is incorrect

Card

1099

General PSP error

PAYMENT.4.000

PspError2

General, unspecified payment error.

Card

1186

Maximum limit not allowed

PAYMENT.2.102.004

CardLimitExceededError

Represents an error when the card amount/number of transaction limit has been exceeded

Card

1191

Day / IP address limit (all cards) not allowed

PAYMENT.2.102.004

CardLimitExceededError

Represents an error when the card amount/number of transaction limit has been exceeded

Card

1194

Card brands not allowed

PAYMENT.2.100.006

CardTypeNotAllowedError

Represents an error when the card type (type/brand/etc.) is not allowed for this transaction

Card

1197

Denied. Filter: Card country issuer not allowed

PAYMENT.2.102.005

CardCountryNotAllowed

Represents an error when the card / issuing bank country is not allowed for the transaction

Card

1254

Commerce with secure cardholder and cardholder without secure purchase key

PAYMENT.4.001.004

CardholderSecurePurchaseKeyError

Represents an error when there is a commerce with secure cardholder and cardholder without secure purchase key

Card

1326

Denial by security controls on the processor

PAYMENT.2.002

FraudError

Represents errors generated when a transaction is suspected of being fraudulent. This class extends `ExternalError` to encapsulate fraud-related issues, including abnormal user behavior, suspicious transaction patterns, and other indicators of potential fraud. It is designed to aid in the identification and management of transactions that may pose a risk to the payment system

Card

1327

3DS authentication process error

PAYMENT.2.101.003

ThreeDsChallengeFailedError

Represents an error when the 3DS Challenge failed

Payment Link

1417

PayPal - The instrument presented has been declined. Please select another one.

PAYMENT.2.100.105

DeclinedCardError

Represents an error when the card declined for various reasons

Created classes:

  1. AuthSecurityError

  2. ExternalError

  3. FraudError

  4. PspError

  5. ExternalValidationError

Classes will be created:

  1. AmountNotValidError

  2. AuthenticationError

  3. CardCountryNotAllowed

  4. CardLimitExceededError

  5. CardNotValidError

  6. CardTypeNotAllowedError

  7. CardholderSecurePurchaseKeyError

  8. ConfirmationDataNotValidError

  9. CouldNotFindPreviousOperationError

  10. DataExternalValidationError

  11. DeclinedCardError

  12. DuplicatedExternalReferenceError

  13. ExpiredCardError

  14. FieldDsMerchantAmountIncorrectError

  15. InvalidParameterError

  16. NoFundsCardError

  17. OperationDeniedError

  18. RefundNotPossibleError

  19. ScaAuthenticationError

  20. TimeOutConnectionError

  21. ThreeDsChallengeFailedError

New classes to be created

Class name

Parent class

Severity

Description

AmountNotValidError

NoFundsCardError

2

The amount is zero or not valid

AuthenticationError

AuthSecurityError

4

The user cannot be authenticated

CardCountryNotAllowed

PaymentRestrictionError

2

The card / issuing bank country is not allowed for the transaction.

CardLimitExceededError

PaymentRestrictionError

2

The card amount/number of transaction limit has been exceeded

CardNotValidError

CardError

2

The card declined for various reasons

CardTypeNotAllowedError

CardError

2

The card type (type/brand/etc.) is not allowed for this transaction

CardholderSecurePurchaseKeyError

AuthSecurityError

4

There is a commerce with secure cardholder and cardholder without secure purchase key

ConfirmationDataNotValidError

ExternalError

4

Confirmation data not valid

CouldNotFindPreviousOperationError

DataExternalValidationError

4

Could not find the previous operation

DataExternalValidationError

ExternalValidationError

4

The data sent to the PSP is not correct. It might have missing or incorrect parameters

DeclinedCardError

CardError

2

The card declined for various reasons

DuplicatedExternalReferenceError

ExternalError

4

There is a duplicated external reference

ExpiredCardError

CardError

2

The card has expired

FieldDsMerchantAmountIncorrectError

DataExternalValidationError

4

The field DS_MERCHANT_AMOUNT is incorrect

InvalidParameterError

ExternalValidationError

2

There is an invalid parameter

NoFundsCardError

CardError

2

The card does not have enough funds in order to perform the payment

OperationDeniedError

ExternalValidationError

4

The operation cannot be performed

RefundNotPossibleError

OperationDeniedError

4

A refund is not possible

ScaAuthenticationError

AuthSecurityError

4

An error a Strong Customer Authentication error.

SCA (Strong Customer Authentication) is a requirement of the European directive PSD2 (Revised Payment Services Directive) aimed at enhancing the security of online financial transactions. SCA mandates that, for authenticating a payment, payment service providers must use at least two of the following three authentication factors:

  • Something you know: such as a password or PIN.

  • Something you have: like a mobile phone, security token, or debit/credit card.

  • Something you are: such as biometrics, like fingerprints or facial recognition.

TimeOutConnectionError

ConnectionError

4

An error when the 3DS Challenge failed

ThreeDsChallengeFailedError

PaymentProcessingError

2

An error when there is a timeout

intl-packages

  • Will be created new classes in the path:

    • intl-packages/packages/psp-base/src/errors/psp-error-2/

 AmountNotValidError details
import { HttpStatus } from '@nestjs/common';
import { RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';
import { NoFundsCardError } from './no-founds-card-error';

export class AmountNotValidError extends NoFundsCardError {
  /**
   * Represents an error when the amount is zero or not valid.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.AMOUNT_NOT_VALID_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 AuthenticationError details
import { HttpStatus } from '@nestjs/common';
import { AuthSecurityError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class AuthenticationError extends AuthSecurityError2 {
  /**
   * Represents an error when the user cannot be authenticated.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.AUTHENTICATION_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CardCountryNotAllowed details
import { HttpStatus } from '@nestjs/common';
import { PaymentRestrictionError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class CardCountryNotAllowed extends PaymentRestrictionError2 {
  /**
   * Represents an error when the card / issuing bank country is not allowed for the transaction.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CARD_COUNTRY_NOT_ALLOWED_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CardLimitExceededError details
import { HttpStatus } from '@nestjs/common';
import { PaymentRestrictionError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class CardLimitExceededError extends PaymentRestrictionError2 {
  /**
   * Represents an error when the card amount/number of transaction limit has been exceeded.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CARD_LIMIT_EXCEEDED_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CardNotValidError details
import { HttpStatus } from '@nestjs/common';
import { CardError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class CardNotValidError extends CardError2 {
  /**
   * Represents an error when the card declined for various reasons.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CARD_NOT_VALID_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CardTypeNotAllowedError details
import { HttpStatus } from '@nestjs/common';
import { CardError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class CardTypeNotAllowedError extends CardError2 {
  /**
   * Represents an error when the card type (type/brand/etc.) is not allowed for this transaction.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CARD_TYPE_NOT_ALLOWED_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CardholderSecurePurchaseKeyError details
import { HttpStatus } from '@nestjs/common';
import { AuthSecurityError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class CardholderSecurePurchaseKeyError extends AuthSecurityError2 {
  /**
   * Represents an error when there is a commerce with secure
   * cardholder and cardholder without secure purchase key.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CARDHOLDER_SECURE_PURCHASE_KEY_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 ConfirmationDataNotValidError details
import { HttpStatus } from '@nestjs/common';
import { ExternalError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class ConfirmationDataNotValidError extends ExternalError2 {
  /**
   * Represents an error when confirmation data not valid.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.CONFIRMATION_DATA_NOT_VALID_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 CouldNotFindPreviousOperationError details
import { HttpStatus } from '@nestjs/common';
import { RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';
import { DataExternalValidationError } from './data-external-validation-error';

export class CouldNotFindPreviousOperationError extends DataExternalValidationError {
  /**
   * Represents an error when could not find the previous operation.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.COULD_NOT_FIND_PREVIOUS_OPERATION_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 DataExternalValidationError details
import { HttpStatus } from '@nestjs/common';
import { ExternalValidationError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class DataExternalValidationError extends ExternalValidationError2 {
  /**
   * Represents an error when the data sent to the PSP is not correct.
   * It might have missing or incorrect parameters.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.DATA_EXTERNAL_VALIDATION_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 DeclinedCardError details
import { HttpStatus } from '@nestjs/common';
import { CardError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class DeclinedCardError extends CardError2 {
  /**
   * Represents an error when the card declined for various reasons.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.DECLINED_CARD_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 DuplicatedExternalReferenceError details
import { HttpStatus } from '@nestjs/common';
import { ExternalError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class DuplicatedExternalReferenceError extends ExternalError2 {
  /**
   * Represents an error when there is a duplicated external reference.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.DUPLICATED_EXTERNAL_REFERENCE_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 ExpiredCardError details
import { HttpStatus } from '@nestjs/common';
import { CardError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class ExpiredCardError extends CardError2 {
  /**
   * Represents an error when the card has expired.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.EXPIRED_CARD_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 FieldDsMerchantAmountIncorrectError details
import { HttpStatus } from '@nestjs/common';
import { RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';
import { DataExternalValidationError } from './data-external-validation-error';

export class FieldDsMerchantAmountIncorrectError extends DataExternalValidationError {
  /**
   * Represents an error when the field DS_MERCHANT_AMOUNT is incorrect.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.FIELD_DS_MERCHANT_AMOUNT_INCORRECT_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 InvalidParameterError details
import { HttpStatus } from '@nestjs/common';
import { ExternalValidationError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class InvalidParameterError extends ExternalValidationError2 {
  /**
   * Represents an error when there is an invalid parameter.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.INVALID_PARAMETER_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 NoFundsCardError details
import { HttpStatus } from '@nestjs/common';
import { CardError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class NoFundsCardError extends CardError2 {
  /**
   * Represents an error when the card does not have enough funds in order to perform the payment.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.NO_FUNDS_CARD_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 OperationDeniedError details
import { HttpStatus } from '@nestjs/common';
import { ExternalValidationError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class OperationDeniedError extends ExternalValidationError2 {
  /**
   * Represents an error when the operation cannot be performed.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.OPERATION_DENIED_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 RefundNotPossibleError details
import { HttpStatus } from '@nestjs/common';
import { RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';
import { OperationDeniedError } from './operation-denied-error';

export class RefundNotPossibleError extends OperationDeniedError {
  /**
   * Represents an error when the refund is not possible.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.REFUND_NOT_POSSIBLE_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 ScaAuthenticationError details
import { HttpStatus } from '@nestjs/common';
import { AuthSecurityError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class ScaAuthenticationError extends AuthSecurityError2 {
  /**
   * Represents an error a Strong Customer Authentication error.
   *
   * SCA (Strong Customer Authentication) is a requirement of the European directive
   * PSD2 (Revised Payment Services Directive) aimed at enhancing the security of
   * online financial transactions. SCA mandates that, for authenticating a payment,
   * payment service providers must use at least
   * two of the following three authentication factors:
   * - Something you know: such as a password or PIN.
   * - Something you have: like a mobile phone, security token, or debit/credit card.
   * - Something you are: such as biometrics, like fingerprints or facial recognition.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.SCA_AUTHENTICATION_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 ThreeDsChallengeFailedError details
import { HttpStatus } from '@nestjs/common';
import { PaymentProcessingError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class ThreeDsChallengeFailedError extends PaymentProcessingError2 {
  /**
   * Represents an error when the 3DS Challenge failed.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.THREE_DS_CHALLENGE_FAILED_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}
 TimeOutConnectionError details
import { HttpStatus } from '@nestjs/common';
import { ConnectionError2, RbiPaymentErrorCodes, TPspError2 } from '../psp-error-2';

export class TimeOutConnectionError extends ConnectionError2 {
  /**
   * Represents an error when there is a timeout.
   *
   * @param params - The error parameters.
   * @param [params.httpStatus] - The HTTP status code to be returned in the response.
   * @param [params.message] - A human-readable message that provides details about the payment processing issue.
   * @param [params.metadata] - Optional metadata that may include additional context or details about the error.
   * @param [params.originalError] - The original error that caused this error.
   */
  constructor(params?: TPspError2) {
    const {
      httpStatus = HttpStatus.UNPROCESSABLE_ENTITY,
      metadata,
      rbiErrorCode = RbiPaymentErrorCodes.TIME_OUT_CONNECTION_ERROR,
    } = params ?? {};
    super({ ...params, httpStatus, metadata, rbiErrorCode });
  }
}

  • Export the classes:

    • path: intl-packages/packages/psp-base/src/errors/psp-error-2/index.ts

  • Will create the new error codes:

    • path: intl-packages/packages/psp-base/src/errors/psp-error-2/psp-error-2.ts

      • Code Errors:

 GenericRbiPaymentErrorCodes details
const GenericRbiPaymentErrorCodes = {
  ...
  DATA_EXTERNAL_VALIDATION_ERROR: '4.009',
  OPERATION_DENIED_ERROR: '4.010',
  TIME_OUT_CONNECTION_ERROR: '4.011',
} as const;
 SpecificRbiPaymentErrorCodes details
const SpecificRbiPaymentErrorCodes = {
  ...
  AMOUNT_NOT_VALID_ERROR: '2.100.107',
  AUTHENTICATION_ERROR: '4.001.001',
  EXPIRED_CARD_ERROR: '2.100.103',
  NO_FUNDS_CARD_ERROR: '2.100.104',
  DECLINED_CARD_ERROR: '2.100.105',
  CARD_NOT_VALID_ERROR: '2.100.106',
  CARD_LIMIT_EXCEEDED_ERROR: '2.102.004',
  CARD_TYPE_NOT_ALLOWED_ERROR: '2.100.006',
  CARD_COUNTRY_NOT_ALLOWED_ERROR: '2.102.005',
  SCA_AUTHENTICATION_ERROR: '4.001.002',
  THREE_DS_CHALLENGE_FAILED_ERROR: '2.101.003',
  INVALID_PARAMETER_ERROR: '2.001.001',
  CONFIRMATION_DATA_NOT_VALID_ERROR: '4.006.001',
  REFUND_NOT_POSSIBLE_ERROR: '4.010.001',
  COULD_NOT_FIND_PREVIOUS_OPERATION_ERROR: '4.009.001',
  DUPLICATED_EXTERNAL_REFERENCE_ERROR: '4.006.002',
  FIELD_DS_MERCHANT_AMOUNT_INCORRECT_ERROR: '4.009.002',
  CARDHOLDER_SECURE_PURCHASE_KEY_ERROR: '4.001.003',
} as const;

Frontend

TODO

(warning) Potential Challenges

N/A

💰 Cost

Describe any additional cost this solution may imply.

🎛️ Configuration

For this feature work, need to enable this feature flag: enable-rbi-error-2

📈 Metrics

Measure the number of cancellations made by the user.

🗓️ Delivery Plan

Link to the task or list of all the tasks required to deliver the solution, along with its progress.

🧑‍🚒 QA Plan

N/A

⚠️ Call-outs

Tip: Document here any improvement or discussion regarding the feature

  • No labels