Class DefaultPayPalCheckoutTransactionService

java.lang.Object
com.broadleafcommerce.paypal.micro.gateway.service.DefaultPayPalCheckoutTransactionService
All Implemented Interfaces:
com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService, com.broadleafcommerce.paymentgateway.service.PaymentGatewayTypeAware, PayPalCheckoutTransactionService

public class DefaultPayPalCheckoutTransactionService extends Object implements PayPalCheckoutTransactionService
Author:
Nathan Moore
  • Constructor Summary

    Constructors
    Constructor
    Description
    DefaultPayPalCheckoutTransactionService(PayPalCheckoutProvider paypalCheckoutService, PayPalApiProvider apiProvider, PayPalOrderService payPalOrderService, PayPalCheckoutApiProperties properties, org.springframework.retry.support.RetryTemplate retryTemplate, PayPalUtils utils)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    addAssertionHeaderForRefundOnBehalfOf(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    This is only needed when using the Marketplaces and Platforms solution from PayPal.
    com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    authorize(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    authorizeAndCapture(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    authorizeOrder(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    Executes an DefaultTransactionTypes.AUTHORIZE transaction based on the provided PaymentRequest
    com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    capture(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    captureAuthorization(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    Executes a DefaultTransactionTypes.CAPTURE for the provided Authorization
    captureOrder(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    Executes an DefaultTransactionTypes.AUTHORIZE_AND_CAPTURE transaction based on the provided PaymentRequest.
     
     
     
     
     
    protected org.springframework.retry.support.RetryTemplate
     
    protected PayPalUtils
     
    protected boolean
    Since PayPal uses a 400 HTTP response for many different types of failures, this method leverages the errorCode to determine if there was an error in the processing of the payment.
    protected boolean
    Since PayPal uses a 400 HTTP response for many different types of failures, this method leverages the errorCode to determine if there was an error in the processing of the payment method.
    protected void
    processException(@NonNull Exception e, @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentResponse paymentResponse, @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    This method is responsible for levering the exception, paymentRequest, & transactionType to populate the paymentResponse instead of allowing the exception to be thrown.
    com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    refund(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    refundPayment(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    Executes a DefaultTransactionTypes.REFUND for the captured payment.
    retrieveAuthorization(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    reverseAuthorize(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
     
    voidAuthorization(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    Executes a DefaultTransactionTypes.REVERSE_AUTH for the provided Authorization object.
    protected com.broadleafcommerce.paymentgateway.domain.PaymentResponse
    voidAuthorization(@NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest, @NonNull com.broadleafcommerce.paymentgateway.domain.enums.TransactionType transactionType)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService

    detachedCredit, identifyParentTransactionReferenceIfExists, identifyTransactionReferenceIdOverrideForInitialTransaction, identifyTransactionTypeFromTransactionResults
  • Constructor Details

  • Method Details

    • authorize

      public com.broadleafcommerce.paymentgateway.domain.PaymentResponse authorize(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Specified by:
      authorize in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService
    • capture

      public com.broadleafcommerce.paymentgateway.domain.PaymentResponse capture(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Specified by:
      capture in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService
    • authorizeAndCapture

      public com.broadleafcommerce.paymentgateway.domain.PaymentResponse authorizeAndCapture(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Specified by:
      authorizeAndCapture in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService
    • reverseAuthorize

      public com.broadleafcommerce.paymentgateway.domain.PaymentResponse reverseAuthorize(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Specified by:
      reverseAuthorize in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService
    • refund

      public com.broadleafcommerce.paymentgateway.domain.PaymentResponse refund(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Specified by:
      refund in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTransactionService
    • addAssertionHeaderForRefundOnBehalfOf

      protected void addAssertionHeaderForRefundOnBehalfOf(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      This is only needed when using the Marketplaces and Platforms solution from PayPal. Specifically, see Issuing a Refund.

      Adds the PayPal-Auth-Assertion header to the paymentRequest to ensure it's included for refund requests, otherwise, the request will be considered unauthorized when attempting to refund on behalf of a seller.

      Parameters:
      paymentRequest - PaymentRequest DTO.
    • voidAuthorization

      protected com.broadleafcommerce.paymentgateway.domain.PaymentResponse voidAuthorization(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest, @NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.enums.TransactionType transactionType)
    • captureAuthorization

      protected PayPalCaptureAuthResponse captureAuthorization(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Executes a DefaultTransactionTypes.CAPTURE for the provided Authorization
      Parameters:
      paymentRequest - The request payload that should be used to form the transaction
      Returns:
      a PayPalCaptureAuthResponse
    • authorizeOrder

      protected PayPalAuthorizeResponse authorizeOrder(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Executes an DefaultTransactionTypes.AUTHORIZE transaction based on the provided PaymentRequest
      Parameters:
      paymentRequest - The request payload that should be used to form the transaction
      Returns:
      an PayPalAuthorizeResponse representing the final state of the transaction
    • retrieveAuthorization

      protected PayPalAuthorizationRetrievalResponse retrieveAuthorization(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
    • captureOrder

      protected PayPalCaptureOrderResponse captureOrder(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Executes an DefaultTransactionTypes.AUTHORIZE_AND_CAPTURE transaction based on the provided PaymentRequest. For PayPal, this captures the Order immediately with no authorization.
      Parameters:
      paymentRequest - The request payload that should be used to form the transaction
      Returns:
      a PayPalCaptureOrderResponse
    • voidAuthorization

      protected PayPalVoidAuthResponse voidAuthorization(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Executes a DefaultTransactionTypes.REVERSE_AUTH for the provided Authorization object. For PayPal, this means voiding the original authorization.
      Parameters:
      paymentRequest - The request payload that should be used to form the transaction
      Returns:
      the PayPalVoidAuthResponse
    • refundPayment

      protected PayPalRefundResponse refundPayment(@NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      Executes a DefaultTransactionTypes.REFUND for the captured payment.
      Parameters:
      paymentRequest - The request payload that should be used to form the transaction
      Returns:
      a PayPalRefundResponse
    • processException

      protected void processException(@NonNull @NonNull Exception e, @NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentResponse paymentResponse, @NonNull @NonNull com.broadleafcommerce.paymentgateway.domain.PaymentRequest paymentRequest)
      This method is responsible for levering the exception, paymentRequest, & transactionType to populate the paymentResponse instead of allowing the exception to be thrown.
      Parameters:
      e - the exception indicating a failed payment gateway transaction
      paymentResponse - the object that will hold the transaction results
      paymentRequest - the request that was used to execute the transaction
    • isPaymentMethodDecline

      protected boolean isPaymentMethodDecline(String errorCode)
      Since PayPal uses a 400 HTTP response for many different types of failures, this method leverages the errorCode to determine if there was an error in the processing of the payment method. For example, an incorrect card number, expiration date, etc.
      Parameters:
      errorCode - the error code returned by PayPal
      Returns:
      whether or not the failure was due to the payment method being declined
      See Also:
      • DefaultTransactionFailureTypes.INVALID_PAYMENT_METHOD
    • isPaymentDecline

      protected boolean isPaymentDecline(String errorCode)
      Since PayPal uses a 400 HTTP response for many different types of failures, this method leverages the errorCode to determine if there was an error in the processing of the payment. For example, a credit card decline should be considered a processing failure, whereas a request validation issue would not.
      Parameters:
      errorCode - the error code returned by PayPal
      Returns:
      whether or not the failure was due to the payment method being declined
    • getGatewayType

      public String getGatewayType()
      Specified by:
      getGatewayType in interface com.broadleafcommerce.paymentgateway.service.PaymentGatewayTypeAware
    • getPaypalCheckoutService

      protected PayPalCheckoutProvider getPaypalCheckoutService()
    • getApiProvider

      protected PayPalApiProvider getApiProvider()
    • getPayPalOrderService

      protected PayPalOrderService getPayPalOrderService()
    • getProperties

      protected PayPalCheckoutApiProperties getProperties()
    • getRetryTemplate

      protected org.springframework.retry.support.RetryTemplate getRetryTemplate()
    • getUtils

      protected PayPalUtils getUtils()