You are here

public function ExpressCheckout::capturePayment in Commerce PayPal 8

Captures the given authorized payment.

Only payments in the 'authorization' state can be captured.

Parameters

\Drupal\commerce_payment\Entity\PaymentInterface $payment: The payment to capture.

\Drupal\commerce_price\Price $amount: The amount to capture. If NULL, defaults to the entire payment amount.

Throws

\Drupal\commerce_payment\Exception\PaymentGatewayException Thrown when the transaction fails for any reason.

Overrides SupportsAuthorizationsInterface::capturePayment

File

src/Plugin/Commerce/PaymentGateway/ExpressCheckout.php, line 284

Class

ExpressCheckout
Provides the Paypal Express Checkout payment gateway.

Namespace

Drupal\commerce_paypal\Plugin\Commerce\PaymentGateway

Code

public function capturePayment(PaymentInterface $payment, Price $amount = NULL) {
  $this
    ->assertPaymentState($payment, [
    'authorization',
  ]);

  // If not specified, capture the entire amount.
  $amount = $amount ?: $payment
    ->getAmount();
  $amount = $this->rounder
    ->round($amount);

  // GetExpressCheckoutDetails API Operation (NVP).
  // Shows information about an Express Checkout transaction.
  $paypal_response = $this
    ->doCapture($payment, $amount
    ->getNumber());
  if ($paypal_response['ACK'] == 'Failure') {
    $message = $paypal_response['L_LONGMESSAGE0'];
    throw new PaymentGatewayException($message, $paypal_response['L_ERRORCODE0']);
  }
  $payment
    ->setState('completed');
  $payment
    ->setAmount($amount);

  // Update the remote id for the captured transaction.
  $payment
    ->setRemoteId($paypal_response['TRANSACTIONID']);
  $payment
    ->save();
}