Sonata\Component\Payment\PaymentHandler::handleError PHP Method

handleError() public method

public handleError ( Request $request, Sonata\Component\Basket\BasketInterface $basket )
$request Symfony\Component\HttpFoundation\Request
$basket Sonata\Component\Basket\BasketInterface
    public function handleError(Request $request, BasketInterface $basket)
    {
        // retrieve the transaction
        $transaction = $this->createTransaction($request);
        $order = $this->getValidOrder($transaction);
        $event = new PaymentEvent($order, $transaction);
        $this->getEventDispatcher()->dispatch(PaymentEvents::PRE_ERROR, $event);
        if ($order->isCancellable()) {
            $order->setStatus(OrderInterface::STATUS_STOPPED);
        }
        $transaction->setState(TransactionInterface::STATE_OK);
        $transaction->setStatusCode(TransactionInterface::STATUS_CANCELLED);
        // save the payment transaction
        $this->transactionManager->save($transaction);
        $this->orderManager->save($order);
        // rebuilt from the order information
        $this->getPayment($transaction->getPaymentCode())->getTransformer('order')->transformIntoBasket($order, $basket);
        $event = new PaymentEvent($order, $transaction);
        $this->getEventDispatcher()->dispatch(PaymentEvents::POST_ERROR, $event);
        $this->notificationBackend->createAndPublish('sonata_payment_order_process', array('order_id' => $order->getId(), 'transaction_id' => $transaction->getId()));
        return $order;
    }

Usage Example

 /**
  * @expectedException \Doctrine\ORM\EntityNotFoundException
  */
 public function testHandleErrorEntityNotFoundException()
 {
     $payment = $this->getMock('Sonata\\Component\\Payment\\PaymentInterface');
     $payment->expects($this->once())->method('getOrderReference')->will($this->returnValue('42'));
     $om = $this->getMock('Sonata\\Component\\Order\\OrderManagerInterface');
     $om->expects($this->once())->method('findOneBy')->will($this->returnValue(null));
     $ps = $this->getMock('Sonata\\Component\\Payment\\PaymentSelectorInterface');
     $ps->expects($this->exactly(2))->method('getPayment')->will($this->returnValue($payment));
     $ref = $this->getMock('Sonata\\Component\\Generator\\ReferenceInterface');
     $tm = $this->getMock('Sonata\\Component\\Payment\\TransactionManagerInterface');
     $tm->expects($this->once())->method('create')->will($this->returnValue(new Transaction()));
     $nb = $this->getMockBuilder('Sonata\\NotificationBundle\\Backend\\RuntimeBackend')->disableOriginalConstructor()->getMock();
     $handler = new PaymentHandler($om, $ps, $ref, $tm, $nb);
     $request = new Request();
     $basket = $this->getMock('Sonata\\Component\\Basket\\BasketInterface');
     $errorOrder = $handler->handleError($request, $basket);
     $this->assertEquals($errorOrder, null);
 }