/** * @param Request $request * * @return RedirectResponse * * @Method("POST") */ public function executeAction(Request $request) { $form = $this->get('form.factory')->create('dineromail_api_view'); $form->handleRequest($request); if ($form->isValid()) { $data = $form->getData(); $paymentMethod = new DineromailApiMethod(); $paymentMethod->setCardType($data['card_type'])->setCardName($data['card_name'])->setCardNum($data['card_num_1'] . $data['card_num_2'] . $data['card_num_3'] . $data['card_num_4'])->setCardExpMonth($data['card_exp_month'])->setCardExpYear($data['card_exp_year'])->setCardSecurity($data['card_ccv2'])->setCardQuota($data['card_quotas']); try { $this->get('dineromail_api.manager')->processPayment($paymentMethod, $data['amount']); $redirectUrl = $this->container->getParameter('dineromail_api.success.route'); $redirectAppend = $this->container->getParameter('dineromail_api.success.order.append'); $redirectAppendField = $this->container->getParameter('dineromail_api.success.order.field'); } catch (PaymentException $e) { /** * Must redirect to fail route */ $redirectUrl = $this->container->getParameter('dineromail_api.fail.route'); $redirectAppend = $this->container->getParameter('dineromail_api.fail.order.append'); $redirectAppendField = $this->container->getParameter('dineromail_api.fail.order.field'); } } else { /** * If form is not valid, fail return page */ $redirectUrl = $this->container->getParameter('dineromail_api.fail.route'); $redirectAppend = $this->container->getParameter('dineromail_api.fail.order.append'); $redirectAppendField = $this->container->getParameter('dineromail_api.fail.order.field'); } $redirectData = $redirectAppend ? array($redirectAppendField => $this->get('payment.bridge')->getOrderId()) : array(); return $this->redirect($this->generateUrl($redirectUrl, $redirectData)); }
/** * * @param $result \soap response * @param DineromailApiMethod $paymentMethod Payment method * * @throws \PaymentSuite\PaymentCoreBundle\Exception\PaymentException * @return DineromailApiMethod Self object * */ private function processTransaction($result, DineromailApiMethod $paymentMethod) { $this->logger->addInfo($paymentMethod->getPaymentName() . 'processTransaction Result', get_object_vars($result)); $paymentMethod->setDineromailApiReference($result->MerchantTransactionId); $paymentMethod->setDineromailApiTransactionId($result->TransactionId); /** * Payment paid done * * Paid process has ended ( No matters result ) */ $this->paymentEventDispatcher->notifyPaymentOrderDone($this->paymentBridge, $paymentMethod); switch ($result->Status) { case 'OK': case 'COMPLETED': $this->paymentEventDispatcher->notifyPaymentOrderSuccess($this->paymentBridge, $paymentMethod); break; case 'PENDING': break; default: $this->paymentEventDispatcher->notifyPaymentOrderFail($this->paymentBridge, $paymentMethod); throw new PaymentException(); } return $this; }