public function createPayment(OrderInterface $order, $moduleName, $methodName, array $details = []) { try { $this->entityManager->beginTransaction(); $payment = new Payment(); $payment->setOrder($order); $payment->setCurrency($order->getCurrency()); $payment->setAmount($order->getPrice()); $payment->setPaymentModule($this->entityManager->getReference("AgitOrderBundle:PaymentModule", $moduleName)); $payment->setPaymentMethod($this->entityManager->getReference("AgitOrderBundle:PaymentMethod", $methodName)); $payment->setCode(StringHelper::createRandomString(8, "un")); $payment->setCreated(new DateTime()); $payment->setDetails($details); $payment->setStatus(Payment::STATUS_OPEN); $order->addPayment($payment); $this->persistPayment($payment); $this->eventDispatcher->dispatch("agit.payment.created", new PaymentEvent($payment)); $this->entityManager->commit(); } catch (Exception $e) { $this->entityManager->rollback(); throw $e; } return $payment; }