amazonAuthorizationDetailsFactory = $amazonAuthorizationDetailsFactory; $this->authorization = $authorization; $this->collectionFactory = $collectionFactory; $this->storeManager = $storeManager; } /** * {@inheritDoc} */ public function supports(array $ipnData) { return (isset($ipnData['NotificationType']) && 'PaymentAuthorize' === $ipnData['NotificationType']); } /** * {@inheritDoc} */ public function process(array $ipnData) { $details = $this->amazonAuthorizationDetailsFactory->create( [ 'details' => $ipnData['AuthorizationDetails'] ] ); $collection = $this->collectionFactory ->create() ->addFieldToFilter( PendingAuthorizationInterface::AUTHORIZATION_ID, [ 'eq' => $details->getAuthorizeTransactionId() ] ) ->setPageSize(1) ->setCurPage(1); $collection->getSelect() ->join(['so' => $collection->getTable('sales_order')], 'main_table.order_id = so.entity_id', []) ->where('so.store_id = ?', $this->storeManager->getStore()->getId()); if (count($items = $collection->getItems())) { $pendingAuthorization = current($items); $this->authorization->setThrowExceptions(true); $this->authorization->updateAuthorization($pendingAuthorization->getId(), $details); } } }