You are here

public function PaymentOptionsBuilder::selectDefaultOption in Commerce Core 8.2

Selects the default payment option for the given order.

Priority: 1) The order's payment method 2) The order's payment gateway (if it does not support payment methods) 3) First defined option.

Parameters

\Drupal\commerce_order\Entity\OrderInterface $order: The order.

array $options: The options.

Return value

\Drupal\commerce_payment\PaymentOption The selected option.

Overrides PaymentOptionsBuilderInterface::selectDefaultOption

File

modules/payment/src/PaymentOptionsBuilder.php, line 151

Class

PaymentOptionsBuilder

Namespace

Drupal\commerce_payment

Code

public function selectDefaultOption(OrderInterface $order, array $options) {

  /** @var \Drupal\commerce_payment\Entity\PaymentGatewayInterface $order_payment_gateway */
  $order_payment_gateway = $order
    ->get('payment_gateway')->entity;

  /** @var \Drupal\commerce_payment\Entity\PaymentMethodInterface $order_payment_method */
  $order_payment_method = $order
    ->get('payment_method')->entity;
  $default_option_id = NULL;
  if ($order_payment_method) {
    $default_option_id = $order_payment_method
      ->id();
  }
  elseif ($order_payment_gateway && !$order_payment_gateway instanceof SupportsStoredPaymentMethodsInterface) {
    $default_option_id = $order_payment_gateway
      ->id();
  }

  // The order doesn't have a payment method/gateway specified, or it has, but it is no longer available.
  if (!$default_option_id || !isset($options[$default_option_id])) {
    $option_ids = array_keys($options);
    $default_option_id = reset($option_ids);
  }
  return $options[$default_option_id];
}