logger = $logger; $this->subjectReader = $subjectReader; $this->coreHelper = $coreHelper; $this->pendingAuthorizationFactory = $pendingAuthorizationFactory; } /** * @param array $handlingSubject * @param array $response * @throws \Exception */ public function handle(array $handlingSubject, array $response) { $paymentDO = $this->subjectReader->readPayment($handlingSubject); $payment = $paymentDO->getPayment(); if ($response['status']) { $payment->setTransactionId($response['capture_transaction_id']); $payment->setParentTransactionId($response['authorize_transaction_id']); if ($response['timeout']) { $order = $this->subjectReader->getOrder(); $this->pendingAuthorizationFactory->create() ->setAuthorizationId($response['authorize_transaction_id']) ->setCaptureId($response['capture_transaction_id']) ->setCapture(true) ->save(); $payment->setIsTransactionPending(true); $order->setState($order::STATE_PAYMENT_REVIEW)->setStatus($order::STATE_PAYMENT_REVIEW); $payment->setIsTransactionClosed(false); } else { $payment->setIsTransactionClosed(true); } if (!isset($handlingSubject['partial_capture']) || !$handlingSubject['partial_capture']) { $quoteLink = $this->subjectReader->getQuoteLink(); $quoteLink->setConfirmed(true)->save(); } } } }