/**
  * Builds form given return, success and fail urls.
  *
  * @return FormView
  */
 public function buildForm()
 {
     $formBuilder = $this->formFactory->createNamedBuilder(null);
     $orderId = $this->paymentBridge->getOrderId();
     $orderCurrency = $this->paymentBridge->getCurrency();
     $this->checkCurrency($orderCurrency);
     /**
      * Creates the success return route, when coming back
      * from PayPal web checkout.
      */
     $successReturnUrl = $this->urlFactory->getSuccessReturnUrlForOrderId($orderId);
     /**
      * Creates the cancel payment route, when cancelling
      * the payment process from PayPal web checkout.
      */
     $cancelReturnUrl = $this->urlFactory->getCancelReturnUrlForOrderId($orderId);
     /**
      * Creates the IPN payment notification route,
      * which is triggered after PayPal processes the
      * payment and returns the validity of the transaction.
      *
      * For forther information
      *
      * https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNandPDTVariables/
      * https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/
      */
     $processUrl = $this->urlFactory->getProcessUrlForOrderId($orderId);
     $formBuilder->setAction($this->urlFactory->getApiEndpoint())->setMethod('POST')->add('business', 'hidden', ['data' => $this->business])->add('return', 'hidden', ['data' => $successReturnUrl])->add('cancel_return', 'hidden', ['data' => $cancelReturnUrl])->add('notify_url', 'hidden', ['data' => $processUrl])->add('currency_code', 'hidden', ['data' => $orderCurrency])->add('env', 'hidden', ['data' => '']);
     /**
      * Create a PayPal cart line for each order line.
      *
      * Project specific PaymentBridgeInterface::getExtraData
      * should return an array of this form
      *
      *   ['items' => [
      *       0 => [ 'item_name' => 'Item 1', 'amount' => 1234, 'quantity' => 2 ],
      *       1 => [ 'item_name' => 'Item 2', 'amount' => 2345, 'quantity' => 1 ],
      *   ]]
      *
      * The 'items' key consists of an array with the basic information
      * of each line of the order. Amount is the price of the product,
      * not the total of the order line
      */
     $cartData = $this->paymentBridge->getExtraData();
     $itemsData = $cartData['items'];
     $iteration = 1;
     foreach ($itemsData as $orderLine) {
         $formBuilder->add('item_name_' . $iteration, 'hidden', ['data' => $orderLine['item_name']])->add('amount_' . $iteration, 'hidden', ['data' => $orderLine['amount'] / 100])->add('quantity_' . $iteration, 'hidden', ['data' => $orderLine['quantity']]);
         ++$iteration;
     }
     if (isset($cartData['discount_amount_cart'])) {
         $formBuilder->add('discount_amount_cart', 'hidden', ['data' => $cartData['discount_amount_cart'] / 100]);
     }
     return $formBuilder->getForm()->createView();
 }
Example #2
0
 /**
  * Generate log transaction file for KCC
  *
  * @return string TBK Session Id
  */
 public function processPayment()
 {
     $orderId = $this->paymentBridge->getOrderId();
     $amount = $this->paymentBridge->getAmount();
     $sessionId = $orderId . date('Ymdhis');
     // Generate session log file for KCC
     $file = fopen($this->kccPath . '/log/datos' . $sessionId . '.log', 'w');
     $line = $amount . ';' . $orderId;
     fwrite($file, $line);
     fclose($file);
     return $sessionId;
 }
 /**
  * Payment execution.
  *
  * @param Request $request Request element
  *
  * @return RedirectResponse
  */
 public function resultAction(Request $request)
 {
     $redirectRoute = $this->redirectionRoutes->getRedirectionRoute('success');
     try {
         $this->redsysManager->processResult($request->request->all());
     } catch (PaymentException $e) {
         /**
          * Must redirect to fail route.
          */
         $redirectRoute = $this->redirectionRoutes->getRedirectionRoute('failure');
     }
     $redirectUrl = $this->urlGenerator->generate($redirectRoute->getRoute(), $redirectRoute->getRouteAttributes($this->paymentBridge->getOrderId()));
     return new RedirectResponse($redirectUrl);
 }
 /**
  * Tries to process a payment through Pagosonline
  *
  * @param PagosonlineMethod $paymentMethod Payment method
  * @param float             $amount        Amount
  *
  * @return PagosonlineManager Self object
  *
  * @throws PaymentAmountsNotMatchException
  * @throws PaymentOrderNotFoundException
  * @throws PaymentException
  */
 public function processPayment(PagosonlineMethod $paymentMethod, $amount)
 {
     /// first check that amounts are the same
     $paymentBridgeAmount = (double) $this->paymentBridge->getAmount();
     /**
      * If both amounts are different, execute Exception
      */
     if (abs($amount - $paymentBridgeAmount) > 1.0E-5) {
         throw new PaymentAmountsNotMatchException();
     }
     /**
      * At this point, order must be created given a cart, and placed in PaymentBridge
      *
      * So, $this->paymentBridge->getOrder() must return an object
      */
     $this->paymentEventDispatcher->notifyPaymentOrderLoad($this->paymentBridge, $paymentMethod);
     /**
      * Order Not found Exception must be thrown just here
      */
     if (!$this->paymentBridge->getOrder()) {
         throw new PaymentOrderNotFoundException();
     }
     $this->paymentEventDispatcher->notifyPaymentOrderCreated($this->paymentBridge, $paymentMethod);
     $extraData = $this->paymentBridge->getExtraData();
     $object_ws = new \stdClass();
     $object_ws->cuentaId = $this->accountId;
     $object_ws->referencia = $this->paymentBridge->getOrderId() . '#' . date('Ymdhis');
     $object_ws->descripcion = $this->paymentBridge->getOrderDescription();
     $object_ws->valor = $this->paymentBridge->getAmount();
     $object_ws->iva = $extraData['vat'];
     $object_ws->baseDevolucionIva = $extraData['refund_vat'];
     $object_ws->isoMoneda4217 = $this->paymentBridge->getCurrency();
     $object_ws->numeroCuotas = $paymentMethod->getCardQuota();
     $object_ws->nombreComprador = $extraData['customer_firstname'] . $extraData['customer_lastname'];
     $object_ws->emailComprador = $extraData['customer_email'];
     $object_ws->franquicia = $paymentMethod->getCardType();
     $object_ws->numero = $paymentMethod->getCardNum();
     $object_ws->codigoSeguridad = $paymentMethod->getCardSecurity();
     $object_ws->nombreTarjetaHabiente = $paymentMethod->getCardName();
     $object_ws->fechaExpiracion = $paymentMethod->getCardExpYear() . '/' . $paymentMethod->getCardExpMonth();
     $object_ws->validarModuloAntiFraude = true;
     $object_ws->reportarPaginaConfirmacion = false;
     //Antifraude
     $object_ws->ciudadCorrespondencia = $extraData['correspondence_city'];
     $object_ws->cookie = $paymentMethod->getCookie();
     $object_ws->direccionCorrespondencia = $extraData['correspondence_address'];
     $object_ws->ipComprador = $paymentMethod->getClientIp();
     $object_ws->paisCorrespondencia = 'CO';
     $object_ws->userAgent = $paymentMethod->getUserAgent();
     $autWS = $this->pagosonlineComm->solicitarAutorizacion($object_ws);
     $this->logger->addInfo($paymentMethod->getPaymentName(), get_object_vars($object_ws));
     $paymentMethod->setPagosonlineTransactionId($autWS->transaccionId);
     $paymentMethod->setPagosonlineReference($autWS->referencia);
     $this->processTransaction($autWS, $paymentMethod);
     return $this;
 }
 /**
  * @param array() $items
  * @param array() $buyer
  * @param array() $creditCard
  * @param string  $cardType
  *
  * @return object
  */
 private function processSoap($items, $buyer, $creditCard, $cardType)
 {
     $provider = $this->apiPrefix . $cardType;
     $subject = '';
     $message = '';
     if ($this->dineromail_api_debug) {
         // this is a debug environment
         //to debug dineromail API, we use the credit card select
         //to map success/fail values to pass to the transaction_id
         //field, which dineromail API uses
         switch ($cardType) {
             case 'VISA':
                 // OK
                 $merchantTransactionId = '1';
                 break;
             case 'MASTER':
                 // DENIED
                 $merchantTransactionId = '2';
                 break;
             case 'AMEX':
                 // ERROR
                 $merchantTransactionId = '3';
                 break;
             default:
                 // ERROR
                 $merchantTransactionId = '4';
                 break;
         }
     } else {
         $merchantTransactionId = $this->paymentBridge->getOrderId() . '#' . date('Ymdhis');
     }
     $uniqueMessageId = date('Ymdhis') . str_pad(rand(0, 999), 3, '0', STR_PAD_LEFT);
     $stringItems = '';
     $soapItems = array();
     foreach ($items as &$item) {
         /* UGLY HACK NEEDED UNTIL PAYMENTBRIDGE HIERARCHY WILL BE REFACTORED */
         $item['Amount'] = number_format($item['Amount'] / 100, 2, '.', '');
         $stringItems .= $item['Amount'] . $item['Code'] . $item['Currency'] . $item['Description'] . $item['Name'] . $item['Quantity'];
         $soapItems[] = $this->soapVar($item, 'Item');
     }
     $stringBuyer = $buyer['Name'] . $buyer['LastName'] . $buyer['Email'] . $buyer['Address'] . $buyer['Phone'] . $buyer['Country'] . $buyer['City'];
     $stringCreditCard = $creditCard['Installment'] . $creditCard['CreditCardNumber'] . $creditCard['Holder'] . $creditCard['ExpirationDate'] . $creditCard['SecurityCode'] . $creditCard['DocumentNumber'] . $creditCard['Address'] . $creditCard['AddressNumber'] . $creditCard['AddressComplement'] . $creditCard['ZipCode'] . $creditCard['Neighborhood'] . $creditCard['City'] . $creditCard['State'] . $creditCard['Country'];
     $cadena = $merchantTransactionId . $uniqueMessageId . $stringItems . $stringBuyer . $stringCreditCard . $provider . $subject . $message . $this->apiPassword;
     $hash = MD5($cadena);
     $client = new \SoapClient($this->wsdl, array('trace' => 1, 'exceptions' => 1));
     $soapCredentials = $this->soapVar(array('APIUserName' => $this->apiUserName, 'APIPassword' => $this->apiPassword), 'APICredential');
     $soapBuyer = $this->soapVar($buyer, 'Buyer');
     $soapCreditCard = $this->soapVar($creditCard, 'CreditCard');
     $request = array('Credential' => $soapCredentials, 'Crypt' => false, 'MerchantTransactionId' => $merchantTransactionId, 'Items' => $soapItems, 'Buyer' => $soapBuyer, 'Provider' => $provider, 'CreditCard' => $soapCreditCard, 'Subject' => $subject, 'Message' => $message, 'UniqueMessageId' => $uniqueMessageId, 'Hash' => $hash);
     $this->logger->addInfo('Request Send DineromailApi' . 'processTransaction Response', $request);
     return $client->DoPAymentWithCreditCard($request)->DoPaymentWithCreditCardResult;
 }
Example #6
0
 /**
  * Tries to process a payment through Banwire
  *
  * @param BanwireMethod $paymentMethod Payment method
  * @param float         $amount        Amount
  *
  * @return BanwireManager Self object
  *
  * @throws PaymentAmountsNotMatchException
  * @throws PaymentOrderNotFoundException
  * @throws PaymentException
  */
 public function processPayment(BanwireMethod $paymentMethod, $amount)
 {
     /**
      * first check that amounts are the same
      */
     $paymentBridgeAmount = intval($this->paymentBridge->getAmount());
     /**
      * If both amounts are different, execute Exception
      */
     if ($amount != $paymentBridgeAmount) {
         throw new PaymentAmountsNotMatchException(sprintf('Amounts differ. Requested: [%s] but in PaymentBridge: [%s].', $amount, $paymentBridgeAmount));
     }
     /**
      * At this point, order must be created given a cart, and placed in PaymentBridge
      *
      * So, $this->paymentBridge->getOrder() must return an object
      */
     $this->paymentEventDispatcher->notifyPaymentOrderLoad($this->paymentBridge, $paymentMethod);
     /**
      * Order Not found Exception must be thrown just here
      */
     if (!$this->paymentBridge->getOrder()) {
         throw new PaymentOrderNotFoundException();
     }
     $this->paymentEventDispatcher->notifyPaymentOrderCreated($this->paymentBridge, $paymentMethod);
     $extraData = $this->paymentBridge->getExtraData();
     $carExp = substr($paymentMethod->getCardExpYear(), -2);
     $params = array('response_format' => 'JSON', 'user' => $this->user, 'reference' => $this->paymentBridge->getOrderId() . '#' . date('Ymdhis'), 'currency' => $this->paymentBridge->getCurrency(), 'ammount' => number_format($this->paymentBridge->getAmount() / 100, 2), 'concept' => $this->paymentBridge->getOrderDescription(), 'card_num' => $paymentMethod->getCardNum(), 'card_name' => $paymentMethod->getCardName(), 'card_type' => $paymentMethod->getCardType(), 'card_exp' => $paymentMethod->getCardExpMonth() . '/' . $carExp, 'card_ccv2' => $paymentMethod->getCardSecurity(), 'address' => $extraData['correspondence_address'], 'post_code' => $extraData['customer_postal_code'], 'phone' => $extraData['customer_phone'], 'mail' => $extraData['customer_email']);
     $host = $this->api;
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $host);
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; WINDOWS; .NET CLR 1.1.4322)');
     curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_TIMEOUT, 30);
     curl_setopt($ch, CURLOPT_HEADER, 0);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
     if (defined('CURLOPT_ENCODING')) {
         curl_setopt($ch, CURLOPT_ENCODING, "");
     }
     $responseApi = curl_exec($ch);
     $this->processTransaction($responseApi, $paymentMethod);
     return $this;
 }
 /**
  * Payment execution.
  *
  * @param Request $request Request element
  *
  * @return RedirectResponse
  *
  * @throws PaymentException
  */
 public function executeAction(Request $request)
 {
     /**
      * @var FormInterface $form
      */
     $form = $this->formFactory->create('stripe_view');
     $form->handleRequest($request);
     $redirect = $this->redirectionRoutes->getRedirectionRoute('success');
     try {
         if (!$form->isValid()) {
             throw new PaymentException();
         }
         $data = $form->getData();
         $paymentMethod = $this->createStripeMethod($data);
         $this->stripeManager->processPayment($paymentMethod, $data['amount']);
     } catch (Exception $e) {
         /**
          * Must redirect to fail route.
          */
         $redirect = $this->redirectionRoutes->getRedirectionRoute('failure');
     }
     $redirectUrl = $this->urlGenerator->generate($redirect->getRoute(), $redirect->getRouteAttributes($this->paymentBridge->getOrderId()));
     return new RedirectResponse($redirectUrl);
 }
 /**
  * Free Payment execution.
  *
  * @return RedirectResponse
  */
 public function executeAction()
 {
     $this->freePaymentManager->processPayment();
     $successUrl = $this->urlGenerator->generate($this->successRedirectionRoute->getRoute(), $this->successRedirectionRoute->getRouteAttributes($this->paymentBridge->getOrderId()));
     return new RedirectResponse($successUrl);
 }
Example #9
0
 /**
  * Builds form given session ID and success and fail routes
  *
  * @param string $sessionId Session ID
  * @param string $okRoute   Ok route
  * @param string $failRoute Fail route
  *
  * @return FormBuilderInterface
  */
 public function buildForm($sessionId, $okRoute, $failRoute)
 {
     $formBuilder = $this->formFactory->createNamedBuilder(null)->setAction($this->cgiUri . '/tbk_bp_pago.cgi')->setMethod('POST')->add('TBK_TIPO_TRANSACCION', 'hidden', array('data' => 'TR_NORMAL'))->add('TBK_MONTO', 'hidden', array('data' => $this->paymentBridge->getAmount()))->add('TBK_ORDEN_COMPRA', 'hidden', array('data' => $this->paymentBridge->getOrderId()))->add('TBK_ID_SESION', 'hidden', array('data' => $sessionId))->add('TBK_URL_EXITO', 'hidden', array('data' => $okRoute))->add('TBK_URL_FRACASO', 'hidden', array('data' => $failRoute));
     return $formBuilder;
 }