Class DefaultTransactionExecutionRequestValidator

java.lang.Object
com.broadleafcommerce.paymenttransaction.service.DefaultTransactionExecutionRequestValidator
All Implemented Interfaces:
TransactionExecutionRequestValidator

public class DefaultTransactionExecutionRequestValidator extends Object implements TransactionExecutionRequestValidator
  • Field Details

    • TRANSACTION_AMOUNT_MUST_BE_POSITIVE

      public static final String TRANSACTION_AMOUNT_MUST_BE_POSITIVE
      See Also:
    • TRANSACTION_AMOUNT_MUST_BE_POSITIVE_OR_ZERO

      public static final String TRANSACTION_AMOUNT_MUST_BE_POSITIVE_OR_ZERO
      See Also:
    • TRANSACTION_CURRENCY_MUST_MATCH_PAYMENT_CURRENCY

      public static final String TRANSACTION_CURRENCY_MUST_MATCH_PAYMENT_CURRENCY
      See Also:
    • TRANSACTION_AMOUNT_MUST_BE_VALID_FOR_PAYMENT

      public static final String TRANSACTION_AMOUNT_MUST_BE_VALID_FOR_PAYMENT
      See Also:
    • TRANSACTION_AMOUNT_MUST_BE_EQUAL_TO_AVAILABLE

      public static final String TRANSACTION_AMOUNT_MUST_BE_EQUAL_TO_AVAILABLE
      See Also:
    • TRANSACTION_SOURCE_REQUIRED

      public static final String TRANSACTION_SOURCE_REQUIRED
      See Also:
    • TRANSACTION_SOURCE_ENTITY_TYPE_REQUIRED

      public static final String TRANSACTION_SOURCE_ENTITY_TYPE_REQUIRED
      See Also:
    • TRANSACTION_SOURCE_ENTITY_ID_REQUIRED

      public static final String TRANSACTION_SOURCE_ENTITY_ID_REQUIRED
      See Also:
    • DETACHED_CREDIT_AMOUNT_MUST_BE_LESS_THAN_OR_EQUAL_TO_THE_PARENT_TRANSACTION_AMOUNT

      public static final String DETACHED_CREDIT_AMOUNT_MUST_BE_LESS_THAN_OR_EQUAL_TO_THE_PARENT_TRANSACTION_AMOUNT
      See Also:
  • Constructor Details

  • Method Details

    • validate

      public void validate(@NonNull @NonNull TransactionExecutionRequest request, @NonNull @NonNull Payment payment, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: TransactionExecutionRequestValidator
      Checks whether or not the TransactionExecutionRequest is valid.
      Specified by:
      validate in interface TransactionExecutionRequestValidator
      Parameters:
      request - The TransactionExecutionRequest to be checked.
      payment - The related Payment that the request will act against.
      contextInfo - Context information related to multitenancy.
    • validateTransactionType

      protected void validateTransactionType(@NonNull @NonNull TransactionExecutionRequest request, @NonNull @NonNull Payment payment, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • validateTransactionAmount

      protected void validateTransactionAmount(@NonNull @NonNull TransactionExecutionRequest request, @NonNull @NonNull Payment payment)
      Validates that the transaction amount is valid for the given transaction type.

      Only the AUTHORIZE transaction type is allowed to have a zero-dollar amount ($0.00), which is used by some Payment Service Providers (PSPs) for saved payment method verification, account validation, and generating multi-use tokens without charging the customer's bank.

      For all other transaction types (such as CAPTURE, AUTHORIZE_AND_CAPTURE, or REFUND), zero-dollar transactions are invalid as they would attempt to collect or return `$0.00` from/to a bank account (which doesn't make sense and is rejected by gateways). Therefore, these other types must have an amount strictly greater than zero.

      Parameters:
      request - the transaction execution request containing the amount and type to validate
      payment - the payment against which the transaction is being executed
      Throws:
      InvalidTransactionExecutionRequestException - if the transaction amount is negative, or is zero for a non-AUTHORIZE transaction type, or if currencies do not match
    • getAmountAvailableForTransactionType

      @Deprecated(forRemoval=true) protected javax.money.MonetaryAmount getAmountAvailableForTransactionType(@NonNull @NonNull Payment payment, @NonNull @NonNull String transactionType)
      Deprecated, for removal: This API element is subject to removal in a future version.
    • getAmountAvailableForTransactionType

      protected javax.money.MonetaryAmount getAmountAvailableForTransactionType(@NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String transactionType)
    • canTransactionAmountBeLessThanAvailableAmount

      @Deprecated(forRemoval=true) protected boolean canTransactionAmountBeLessThanAvailableAmount(TransactionExecutionRequest request, Payment payment)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Determines if the transaction amount can be less than the available amount.
      Parameters:
      request - the TransactionExecutionRequest being validated
      payment - the Payment being executed against
      Returns:
      true if the transaction can be less than the available amount, otherwise false
    • canTransactionAmountBeLessThanAvailableAmount

      protected boolean canTransactionAmountBeLessThanAvailableAmount(TransactionExecutionRequest request, PaymentSummary paymentSummary)
      Determines if the transaction amount can be less than the available amount.
      Parameters:
      request - the TransactionExecutionRequest being validated
      paymentSummary - the PaymentSummary being executed against
      Returns:
      true if the transaction can be less than the available amount, otherwise false
    • validateParentTransaction

      protected void validateParentTransaction(@NonNull @NonNull TransactionExecutionRequest request, @NonNull @NonNull Payment payment)
    • validateParentTransactionType

      protected void validateParentTransactionType(PaymentTransaction parentTransaction, @NonNull @NonNull String transactionType)
    • validateParentTransactionAmounts

      protected void validateParentTransactionAmounts(List<TransactionWithExecutableAmount> parentTransactionWithExecutableAmounts, @NonNull @NonNull javax.money.MonetaryAmount transactionAmount)
      Validates the total amount from parent transactions is sufficient for the given transactionAmount.
      Parameters:
      parentTransactionWithExecutableAmounts - A list of TransactionWithExecutableAmounts representing all the parent transactions.
      transactionAmount - The amount to validate
      See Also:
    • validateParentTransactionCurrency

      protected void validateParentTransactionCurrency(PaymentTransaction parentTransaction, @NonNull @NonNull javax.money.MonetaryAmount transactionAmount)
    • buildInvalidParentTransactionTypeMessage

      protected String buildInvalidParentTransactionTypeMessage(@NonNull @NonNull String transactionType, @NonNull @NonNull PaymentTransaction parentTransaction, @NonNull @NonNull String... expectedParentTransactionTypes)
    • validateSource

      protected void validateSource(@NonNull @NonNull TransactionExecutionRequest request, @NonNull @NonNull Payment payment, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • getPaymentTransactionService

      protected PaymentTransactionService<PaymentTransaction> getPaymentTransactionService()
    • getPaymentSummaryService

      protected PaymentSummaryService getPaymentSummaryService()
    • getTransactionExecutionUtil

      protected TransactionExecutionUtil getTransactionExecutionUtil()