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;
}