authCommand = $authCommand; parent::__construct( $context, $registry, $extensionFactory, $customAttributeFactory, $paymentData, $scopeConfig, $logger, $proFactory, $storeManager, $urlBuilder, $cartFactory, $checkoutSession, $exception, $transactionRepository, $transactionBuilder, $resource, $resourceCollection, $data ); } /** * Creates an authorization of requested amount. * * @param OrderInterface $order * @return $this * @throws LocalizedException */ public function authorizeOrder(OrderInterface $order) { $baseTotalDue = $order->getBaseTotalDue(); /** @var $payment Payment */ $payment = $order->getPayment(); if (!$payment || !$this->isOrderAuthorizationAllowed($payment)) { throw new LocalizedException(__('Authorization is not allowed.')); } $orderTransaction = $this->getOrderTransaction($payment); $api = $this->_callDoAuthorize($baseTotalDue, $payment, $orderTransaction->getTxnId()); $this->_pro->importPaymentInfo($api, $payment); $payment->resetTransactionAdditionalInfo() ->setIsTransactionClosed(false) ->setTransactionId($api->getTransactionId()) ->setParentTransactionId($orderTransaction->getTxnId()); $transaction = $payment->addTransaction(Transaction::TYPE_AUTH, null, true); $message = $this->authCommand->execute($payment, $baseTotalDue, $payment->getOrder()); $message = $payment->prependMessage($message); $payment->addTransactionCommentsToOrder($transaction, $message); $payment->setAmountAuthorized($order->getTotalDue()); $payment->setBaseAmountAuthorized($baseTotalDue); return $this; } /** * Checks if payment has authorization transactions. * * @param Payment $payment * @return bool */ private function hasAuthorization(Payment $payment): bool { return (bool) ($payment->getAmountAuthorized() ?? 0); } /** * Checks if payment authorization allowed. * * @param Payment $payment * @return bool * @throws LocalizedException */ public function isOrderAuthorizationAllowed(Payment $payment): bool { if ($payment->getMethod() === Config::METHOD_EXPRESS && $payment->getMethodInstance()->getConfigPaymentAction() === AbstractMethod::ACTION_ORDER ) { return !$this->hasAuthorization($payment); } return false; } }