amazonOrderDetailsFactory = $amazonOrderDetailsFactory; $this->collectionFactory = $collectionFactory; $this->authorization = $authorization; $this->storeManager = $storeManager; } /** * {@inheritDoc} */ public function supports(array $ipnData) { return (isset($ipnData['NotificationType']) && 'OrderReferenceNotification' === $ipnData['NotificationType']); } /** * {@inheritDoc} */ public function process(array $ipnData) { $details = $this->amazonOrderDetailsFactory->create([ 'details' => $ipnData['OrderReference'] ]); $collection = $this->collectionFactory ->create() ->addFieldToFilter(PendingAuthorizationInterface::PROCESSED, ['eq' => 1]) ->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()) ->join(['ao' => $collection->getTable(OrderLink::TABLE_NAME)], 'main_table.order_id = ao.order_id', []) ->where('ao.amazon_order_reference_id = ?', $details->getOrderReferenceId()); if (count($items = $collection->getItems())) { $pendingAuthorization = current($items); $this->authorization->setThrowExceptions(true); $this->authorization->updateAuthorization($pendingAuthorization->getId(), null, $details); } } }