Class DefaultPaymentTransactionExecutionService

java.lang.Object
com.broadleafcommerce.cartoperation.service.payment.DefaultPaymentTransactionExecutionService
All Implemented Interfaces:
PaymentTransactionExecutionService

public class DefaultPaymentTransactionExecutionService extends Object implements PaymentTransactionExecutionService
This service is meant to coordinate the execution of payment transactions against the cart's PaymentSummaries in the context of a checkout submission.
Author:
Chris Kittrell (ckittrell)
  • Constructor Details

  • Method Details

    • executeCartPaymentTransactions

      public CheckoutProcessDto executeCartPaymentTransactions(@NonNull @NonNull CheckoutProcessDto processDto, @NonNull @NonNull Map<String,String> securityCodes, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: PaymentTransactionExecutionService
      Executes set of payment transactions against the cart's PaymentSummaries.
      Specified by:
      executeCartPaymentTransactions in interface PaymentTransactionExecutionService
      Parameters:
      processDto - The CheckoutProcessDto that we're attempting to checkout with and contains the related PaymentSummaries
      securityCodes - The map of card security codes keyed by payment id for processing saved payments
      contextInfo - The context of the user's request.
      Returns:
      The most up-to-date CheckoutProcessDto following the execution of the transaction
    • sortPayments

      protected List<PaymentSummary> sortPayments(@NonNull @NonNull List<PaymentSummary> payments, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Given a list of PaymentSummaries, sorts them in order of which should be executed first based on the PaymentSummary.getGatewayType().

      This is used to order the cart's payments to produce the most favorable conditions when executing transactions against the payment, and primarily meant to help mitigate the challenges of multi-payment scenarios.

      For example, if you have a payment method whose transactions are very challenging to reverse (in the case of a checkout failure), then it's best to order that payment last. If the PaymentTransactionExecutionActivity is the last activity in the workflow and the payment with the challenging reversal is processed last, then the reversal will actually never be needed. Instead, either this payment's transaction will pass and the checkout completes, or the transaction fails and only the workflow's previously completed work may need to be rolled back.

      Parameters:
      payments - The un-ordered list of cart payments
      contextInfo - Context information surrounding sandboxing and multitenant state
      Returns:
      The sorted list of cart payments
    • sortPayments

      @Deprecated protected List<PaymentSummary> sortPayments(List<PaymentSummary> payments)
      Deprecated.
      since 1.7.2, in favor of sortPayments(List, ContextInfo)
      Hook used to order the cart's payments to produce the most favorable conditions when executing transactions against the payment. This is primarily meant to help mitigate the challenges of multi-payment scenarios. For example, if you have a payment method whose transactions are very challenging to roll back (in the case of a checkout failure), then it's best to order that payment last. If the PaymentTransactionExecutionActivity is the last activity in the workflow and the payment with the challenging rollback is processed last, then the rollback will actually never occur. Instead, either this payment's transaction will pass and the checkout completes, or the transaction fails and only previously completed work may need to be rolled back.
      Parameters:
      payments - The un-ordered list of cart payments
      Returns:
      The sorted list of cart payments
    • getCheckoutTransactionType

      protected String getCheckoutTransactionType(@NonNull @NonNull String gatewayType, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Based on the provided PaymentGatewayType, determine which TransactionType should be used to execute the payment stage of the checkout.
      Parameters:
      gatewayType - The payment gateway's unique identifier that should be used to lookup the desired transaction type
      Returns:
      The desired transaction type for the gateway
    • getApplicationIdFromContext

      @Nullable protected String getApplicationIdFromContext(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • getTenantIdFromContext

      @Nullable protected String getTenantIdFromContext(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • shouldLookup3DSTransactionResults

      protected boolean shouldLookup3DSTransactionResults(@NonNull @NonNull PaymentSummary paymentSummary, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • lookup3DSTransactionResults

      protected CheckoutProcessDto lookup3DSTransactionResults(@NonNull @NonNull CheckoutProcessDto processDto, @NonNull @NonNull PaymentSummary paymentSummary, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • shouldExecutePaymentTransaction

      protected boolean shouldExecutePaymentTransaction(@NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String checkoutTransactionType)
      Determine whether to execute a transaction for this payment.
      Parameters:
      paymentSummary - the payment summary to be evaluated
      checkoutTransactionType - The type of transaction that is to be executed.
      Returns:
      true if a transaction should be executed against this payment, false otherwise
    • executePaymentTransaction

      protected CheckoutProcessDto executePaymentTransaction(@NonNull @NonNull CheckoutProcessDto processDto, @NonNull @NonNull PaymentSummary paymentSummary, @Nullable String securityCode, @NonNull @NonNull String checkoutTransactionType, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Executes a payment transaction against the provided PaymentSummary.
      Parameters:
      processDto - The CheckoutProcessDto used to execute the payments
      paymentSummary - The PaymentSummary of the payment that will be acted upon by the transaction.
      securityCode - The payment method security code that may be required to execute the transaction.
      checkoutTransactionType - The type of transaction that is to be executed.
      contextInfo - The context of the user's request.
      Returns:
      The most up-to-date cart following the execution of the transaction
      Throws:
      PaymentTransactionFailureException - if the transaction was not successfully executed, either due to a transaction failure or an unexpected exception.
    • executePaymentTransaction

      protected TransactionExecutionResponse executePaymentTransaction(@NonNull @NonNull String checkoutTransactionType, @NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull TransactionExecutionRequest request, @Nullable String lockToken, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) throws UnsupportedOperationException
      Executes a payment transaction based on the given checkout transaction type against the given PaymentSummary.
      Parameters:
      checkoutTransactionType - the type of transaction that is to be executed
      paymentSummary - the PaymentSummary to execute the transaction against
      request - the TransactionExecutionRequest to execute
      lockToken - the token that owns the payment lock
      contextInfo - the context of the user's request
      Returns:
      a TransactionExecutionResponse representing the result of the transaction execution
      Throws:
      UnsupportedOperationException - if the given checkout transaction type is not supported
    • buildTransactionExecutionRequest

      protected TransactionExecutionRequest buildTransactionExecutionRequest(@NonNull @NonNull com.broadleafcommerce.cart.client.domain.Cart cart, @NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String requestId, @Nullable String securityCode)
      Builds a TransactionExecutionRequest to execute a transaction against the provided PaymentSummary.
      Parameters:
      cart - The cart that is being checked out & that owns the related PaymentSummary.
      paymentSummary - The PaymentSummary of the payment that will be acted upon by executing a transaction.
      requestId - The id representing this request to checkout.
      securityCode - The payment method security code that may be required to execute the transaction.
      Returns:
      A TransactionExecutionRequest based on the provided PaymentSummary.
    • buildTransactionFailureDetails

      protected List<PaymentTransactionFailureDetail> buildTransactionFailureDetails(@NonNull @NonNull TransactionExecutionResponse response)
      Builds a list of PaymentTransactionFailureDetails based on the TransactionExecutionResponse that was returned from PaymentTransactionServices.
      Parameters:
      response - The TransactionExecutionResponse returned from PaymentTransaction from PaymentTransactionServices.
      Returns:
      a list of PaymentTransactionFailureDetails based on the TransactionExecutionResponse that was returned from PaymentTransactionServices.
    • shouldClaimTransactionsForRequest

      protected boolean shouldClaimTransactionsForRequest(@NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String checkoutTransactionType)
    • claimTransactionsForRequest

      protected CheckoutProcessDto claimTransactionsForRequest(@NonNull @NonNull CheckoutProcessDto processDto, @NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String checkoutTransactionType, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • paymentHasCheckoutAmountAwaitingResult

      protected boolean paymentHasCheckoutAmountAwaitingResult(@NonNull @NonNull PaymentSummary paymentSummary, @NonNull @NonNull String checkoutTransactionType)
      Determines if the given PaymentSummary has any amount awaiting result based on the given checkout transaction type.
      Parameters:
      paymentSummary - the PaymentSummary to check against
      checkoutTransactionType - the checkout transaction type for this payment
      Returns:
      true if the given PaymentSummary has any amount awaiting result, otherwise false
    • getTransactionExecutionProvider

      protected PaymentTransactionExecutionProvider getTransactionExecutionProvider()
    • getPaymentProvider

      protected PaymentProvider<PaymentSummary> getPaymentProvider()
    • getProperties

      protected CartOperationCheckoutProperties getProperties()
    • getTypeFactory

      protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
    • getPaymentPriorityStrategy

      protected PaymentPriorityStrategy getPaymentPriorityStrategy()
    • setPaymentPriorityStrategy

      @Autowired public void setPaymentPriorityStrategy(PaymentPriorityStrategy paymentPriorityStrategy)
    • getPaymentTransactionExecutionProvider

      @Deprecated protected PaymentTransactionExecutionProvider getPaymentTransactionExecutionProvider()
      Deprecated.
      since 1.7.6, in favor of existing transactionExecutionProvider
    • setPaymentTransactionExecutionProvider

      @Deprecated @Autowired public void setPaymentTransactionExecutionProvider(PaymentTransactionExecutionProvider paymentTransactionExecutionProvider)
      Deprecated.
      since 1.7.6, in favor of existing transactionExecutionProvider
    • getCreditAccountTransactionExecutionProvider

      @Deprecated protected CreditAccountTransactionExecutionProvider getCreditAccountTransactionExecutionProvider()
      Deprecated.
      since 1.8.1, no longer used as store credit balance validation is moved to CartPaymentMethodValidationActivity
    • setCreditAccountTransactionExecutionProvider

      @Deprecated @Autowired public void setCreditAccountTransactionExecutionProvider(CreditAccountTransactionExecutionProvider creditAccountTransactionExecutionProvider)
      Deprecated.
      since 1.8.1, no longer used as store credit balance validation is moved to CartPaymentMethodValidationActivity