/**
  * @param Request $request
  * @return Response
  */
 public function processNotification(Request $request)
 {
     if ($this->logger) {
         $this->logger->info(print_r($request->query->all(), true));
     }
     if (!$request->query->has('transactionid')) {
         return new Response('Failed: No transactionid');
     }
     try {
         $financialTransaction = $this->entityManager->getRepository('JMS\\Payment\\CoreBundle\\Entity\\FinancialTransaction')->findOneByTrackingId($request->query->get('transactionid'));
         /**
          * @var \JMS\Payment\CoreBundle\Entity\Payment $payment
          */
         if (null !== $financialTransaction) {
             /**
              * @var \JMS\Payment\CoreBundle\Entity\FinancialTransaction $financialTransaction
              */
             $payment = $financialTransaction->getPayment();
             if ($payment->getState() === PaymentInterface::STATE_APPROVING) {
                 $instruction = $payment->getPaymentInstruction();
                 $result = $this->pluginController->approveAndDeposit($payment->getId(), $financialTransaction->getRequestedAmount());
                 if ($this->logger) {
                     $status = array(null, 'STATUS_FAILED', 'STATUS_PENDING', 'STATUS_SUCCESS', 'STATUS_UNKNOWN');
                     $this->logger->info('Result -> ' . $status[$result->getStatus()]);
                 }
                 if (Result::STATUS_SUCCESS === $result->getStatus()) {
                     $this->pluginController->closePaymentInstruction($instruction);
                     if ($this->logger) {
                         $this->logger->info('closePaymentInstruction');
                     }
                 }
             } else {
                 if ($this->logger) {
                     $states = array(null, 'STATE_APPROVED', 'STATE_APPROVING', 'STATE_CANCELED', 'STATE_EXPIRED', 'STATE_FAILED', 'STATE_NEW', 'STATE_DEPOSITING', 'STATE_DEPOSITED');
                     $this->logger->info('Payment state is not STATE_APPROVING but  -> ' . $states[$payment->getState()]);
                 }
             }
         }
         return new Response('OK', 201);
     } catch (\Exception $e) {
         if ($this->logger) {
             $this->logger->info($e->getMessage());
         }
         return new Response('[failed]', 500);
     }
 }
 public function createPayment($instructionId, $amount)
 {
     $payment = parent::createPayment($instructionId, $amount);
     $this->entityManager->persist($payment);
     $this->entityManager->flush();
     return $payment;
 }