/** * Retrieves the order matching $transaction and adds it to $transaction * * @param TransactionInterface $transaction The request's transaction (will be linked to the order in the process) * * @return \Sonata\Component\Order\OrderInterface * @throws \Doctrine\ORM\EntityNotFoundException * @throws InvalidTransactionException */ protected function getValidOrder(TransactionInterface $transaction) { $payment = $this->getPayment($transaction->getPaymentCode()); // retrieve the related order $reference = $payment->getOrderReference($transaction); if (!$reference) { throw new InvalidTransactionException(); } $order = $this->orderManager->findOneby(array('reference' => $reference)); if (!$order) { throw new EntityNotFoundException(sprintf('Order %s', $reference)); } $transaction->setOrder($order); // control the handshake value if (!$payment->isRequestValid($transaction)) { throw new InvalidTransactionException($order->getReference()); } return $order; }