Class DefaultPaymentTransactionExecutionService

    • Method Detail

      • 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.
      • 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.
      • 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
      • getTypeFactory

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

        @Autowired
        public void setPaymentPriorityStrategy​(PaymentPriorityStrategy paymentPriorityStrategy)