/**
  * Builds form given return, success and fail urls
  *
  * @return \Symfony\Component\Form\FormView
  */
 public function buildForm()
 {
     $orderId = $this->paymentBridge->getOrderId();
     $extraData = $this->paymentBridge->getExtraData();
     $formBuilder = $this->formFactory->createNamedBuilder(null);
     if (array_key_exists('transaction_type', $extraData)) {
         $Ds_Merchant_TransactionType = $extraData['transaction_type'];
     } else {
         $Ds_Merchant_TransactionType = '0';
     }
     /*
      * Creates the return route for Redsys
      */
     $Ds_Merchant_MerchantURL = $this->urlFactory->getReturnRedsysUrl($orderId);
     /*
      * Creates the return route, when coming back
      * from Redsys web checkout and proccess is Ok
      */
     $Ds_Merchant_UrlOK = $this->urlFactory->getReturnUrlOkForOrderId($orderId);
     /*
      * Creates the cancel payment route, when coming back
      * from Redsys web checkout and proccess is error
      */
     $Ds_Merchant_UrlKO = $this->urlFactory->getReturnUrlKoForOrderId($orderId);
     $Ds_Merchant_Amount = $this->paymentBridge->getAmount();
     $Ds_Merchant_Order = $this->formatOrderNumber($this->paymentBridge->getOrderNumber());
     $Ds_Merchant_MerchantCode = $this->merchantCode;
     $Ds_Merchant_Currency = $this->currencyTranslation($this->paymentBridge->getCurrency());
     $Ds_Merchant_Terminal = $extraData['terminal'];
     $merchantParameters = [];
     $merchantParameters['DS_MERCHANT_AMOUNT'] = $Ds_Merchant_Amount;
     $merchantParameters['DS_MERCHANT_MERCHANTCODE'] = $Ds_Merchant_MerchantCode;
     $merchantParameters['DS_MERCHANT_CURRENCY'] = $Ds_Merchant_Currency;
     $merchantParameters['DS_MERCHANT_TERMINAL'] = $Ds_Merchant_Terminal;
     $merchantParameters['DS_MERCHANT_ORDER'] = $Ds_Merchant_Order;
     $merchantParameters['DS_MERCHANT_MERCHANTURL'] = $Ds_Merchant_MerchantURL;
     $merchantParameters['DS_MERCHANT_URLOK'] = $Ds_Merchant_UrlOK;
     $merchantParameters['DS_MERCHANT_URLKO'] = $Ds_Merchant_UrlKO;
     $merchantParameters['DS_MERCHANT_TRANSACTIONTYPE'] = $Ds_Merchant_TransactionType;
     if (array_key_exists('product_description', $extraData)) {
         $merchantParameters['DS_MERCHANT_PRODUCTDESCRIPTION'] = $extraData['product_description'];
     }
     if (array_key_exists('merchant_titular', $extraData)) {
         $merchantParameters['DS_MERCHANT_TITULAR'] = $extraData['merchant_titular'];
     }
     if (array_key_exists('merchant_name', $extraData)) {
         $merchantParameters['DS_MERCHANT_MERCHANTNAME'] = $extraData['merchant_name'];
     }
     if (array_key_exists('merchant_data', $extraData)) {
         $merchantParameters['DS_MERCHANT_MERCHANTDATA'] = $extraData['merchant_data'];
     }
     $merchantParameters = base64_encode(json_encode($merchantParameters));
     $Ds_Merchant_MerchantSignature = $this->redsysSignature->sign($Ds_Merchant_Order, $this->secretKey, $merchantParameters);
     $formBuilder->setAction($this->url)->setMethod('POST')->add('DS_MERCHANTPARAMETERS', 'hidden', array('data' => $merchantParameters))->add('DS_SIGNATUREVERSION', 'hidden', array('data' => $this->redsysSignature->getSignatureVersion()))->add('DS_SIGNATURE', 'hidden', array('data' => $Ds_Merchant_MerchantSignature));
     return $formBuilder->getForm()->createView();
 }
 /**
  * Builds form given return, success and fail urls
  *
  * @return \Symfony\Component\Form\FormView
  */
 public function buildForm()
 {
     $orderId = $this->paymentBridge->getOrderId();
     $extraData = $this->paymentBridge->getExtraData();
     $formBuilder = $this->formFactory->createNamedBuilder(null);
     if (array_key_exists('transaction_type', $extraData)) {
         $Ds_Merchant_TransactionType = $extraData['transaction_type'];
     } else {
         $Ds_Merchant_TransactionType = '0';
     }
     /*
      * Creates the return route for Redsys
      */
     $Ds_Merchant_MerchantURL = $this->urlFactory->getReturnRedsysUrl();
     /*
      * Creates the return route, when coming back
      * from Redsys web checkout and proccess is Ok
      */
     $Ds_Merchant_UrlOK = $this->urlFactory->getReturnUrlOkForOrderId($orderId);
     /*
      * Creates the cancel payment route, when coming back
      * from Redsys web checkout and proccess is error
      */
     $Ds_Merchant_UrlKO = $this->urlFactory->getReturnUrlKoForOrderId($orderId);
     $Ds_Merchant_Amount = $this->paymentBridge->getAmount();
     $Ds_Merchant_Order = $this->formatOrderNumber($this->paymentBridge->getOrderNumber());
     $Ds_Merchant_MerchantCode = $this->merchantCode;
     $Ds_Merchant_Terminal = $this->merchantTerminal;
     $Ds_Merchant_Currency = $this->currencyTranslation($this->paymentBridge->getCurrency());
     $Ds_Signature_version = "HMAC_SHA256_V1";
     $this->setParameter("DS_MERCHANT_AMOUNT", $Ds_Merchant_Amount);
     $this->setParameter("DS_MERCHANT_ORDER", $Ds_Merchant_Order);
     $this->setParameter("DS_MERCHANT_MERCHANTCODE", $Ds_Merchant_MerchantCode);
     $this->setParameter("DS_MERCHANT_CURRENCY", $Ds_Merchant_Currency);
     $this->setParameter("DS_MERCHANT_TERMINAL", $Ds_Merchant_Terminal);
     $this->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $Ds_Merchant_TransactionType);
     if (array_key_exists('product_description', $extraData)) {
         $this->setParameter("Ds_Merchant_ProductDescription", $extraData['product_description']);
     }
     if (array_key_exists('merchant_titular', $extraData)) {
         $this->setParameter("Ds_Merchant_Titular", $extraData['merchant_titular']);
     }
     if (array_key_exists('merchant_name', $extraData)) {
         $this->setParameter("Ds_Merchant_MerchantName", $extraData['merchant_name']);
     }
     $this->setParameter("DS_MERCHANT_MERCHANTURL", $Ds_Merchant_MerchantURL);
     $this->setParameter("DS_MERCHANT_URLOK", $Ds_Merchant_UrlOK);
     $this->setParameter("DS_MERCHANT_URLKO", $Ds_Merchant_UrlKO);
     $Ds_Merchant_MerchantSignature = $this->shopSignature($Ds_Merchant_Order, $this->secretKey);
     $formBuilder->setAction($this->url)->setMethod('POST')->add('Ds_SignatureVersion', 'hidden', array("data" => $Ds_Signature_version))->add('Ds_MerchantParameters', 'hidden', array("data" => $this->merchantParams()))->add('Ds_Signature', 'hidden', array("data" => $Ds_Merchant_MerchantSignature));
     return $formBuilder->getForm()->createView();
 }
 /**
  * Builds form given return, success and fail urls
  *
  * @return \Symfony\Component\Form\FormView
  */
 public function buildForm()
 {
     $orderId = $this->paymentBridge->getOrderId();
     $extraData = $this->paymentBridge->getExtraData();
     $formBuilder = $this->formFactory->createNamedBuilder(null);
     if (array_key_exists('transaction_type', $extraData)) {
         $Ds_Merchant_TransactionType = $extraData['transaction_type'];
     } else {
         $Ds_Merchant_TransactionType = '0';
     }
     /*
      * Creates the return route for Redsys
      */
     $Ds_Merchant_MerchantURL = $this->urlFactory->getReturnRedsysUrl();
     /*
      * Creates the return route, when coming back
      * from Redsys web checkout and proccess is Ok
      */
     $Ds_Merchant_UrlOK = $this->urlFactory->getReturnUrlOkForOrderId($orderId);
     /*
      * Creates the cancel payment route, when coming back
      * from Redsys web checkout and proccess is error
      */
     $Ds_Merchant_UrlKO = $this->urlFactory->getReturnUrlKoForOrderId($orderId);
     $Ds_Merchant_Amount = $this->paymentBridge->getAmount();
     $Ds_Merchant_Order = $this->formatOrderNumber($this->paymentBridge->getOrderNumber());
     $Ds_Merchant_MerchantCode = $this->merchantCode;
     $Ds_Merchant_Currency = $this->currencyTranslation($this->paymentBridge->getCurrency());
     $Ds_Merchant_MerchantSignature = $this->shopSignature($Ds_Merchant_Amount, $Ds_Merchant_Order, $Ds_Merchant_MerchantCode, $Ds_Merchant_Currency, $Ds_Merchant_TransactionType, $Ds_Merchant_MerchantURL, $this->secretKey);
     $Ds_Merchant_Terminal = $extraData['terminal'];
     $formBuilder->setAction($this->url)->setMethod('POST')->add('Ds_Merchant_Amount', 'hidden', array('data' => $Ds_Merchant_Amount))->add('Ds_Merchant_MerchantSignature', 'hidden', array('data' => $Ds_Merchant_MerchantSignature))->add('Ds_Merchant_MerchantCode', 'hidden', array('data' => $this->merchantCode))->add('Ds_Merchant_Currency', 'hidden', array('data' => $Ds_Merchant_Currency))->add('Ds_Merchant_Terminal', 'hidden', array('data' => $Ds_Merchant_Terminal))->add('Ds_Merchant_Order', 'hidden', array('data' => $Ds_Merchant_Order))->add('Ds_Merchant_MerchantURL', 'hidden', array('data' => $Ds_Merchant_MerchantURL))->add('Ds_Merchant_UrlOK', 'hidden', array('data' => $Ds_Merchant_UrlOK))->add('Ds_Merchant_UrlKO', 'hidden', array('data' => $Ds_Merchant_UrlKO));
     /* Optional form fields */
     if (array_key_exists('transaction_type', $extraData)) {
         $formBuilder->add('Ds_Merchant_TransactionType', 'hidden', array('data' => $Ds_Merchant_TransactionType));
     }
     if (array_key_exists('product_description', $extraData)) {
         $formBuilder->add('Ds_Merchant_ProductDescription', 'hidden', array('data' => $extraData['product_description']));
     }
     if (array_key_exists('merchant_titular', $extraData)) {
         $formBuilder->add('Ds_Merchant_Titular', 'hidden', array('data' => $extraData['merchant_titular']));
     }
     if (array_key_exists('merchant_name', $extraData)) {
         $formBuilder->add('Ds_Merchant_MerchantName', 'hidden', array('data' => $extraData['merchant_name']));
     }
     if (array_key_exists('merchant_data', $extraData)) {
         $formBuilder->add('Ds_Merchant_MerchantData', 'hidden', array('data' => $extraData['merchant_data']));
     }
     return $formBuilder->getForm()->createView();
 }
 /**
  * Test form creation
  */
 public function testFormCreation()
 {
     $amount = 100;
     $formData = array('Ds_Merchant_Amount' => $amount, 'Ds_Merchant_MerchantSignature' => 'CB43B12351A9826D9640CC285CBDFD8CA6A5994C', 'Ds_Merchant_MerchantCode' => $this::merchantCode, 'Ds_Merchant_Currency' => '978', 'Ds_Merchant_Terminal' => $this::terminal, 'Ds_Merchant_Order' => '342', 'Ds_Merchant_MerchantURL' => '/payment/redsys/result', 'Ds_Merchant_UrlOK' => '/payment/redsys/checkout/ok', 'Ds_Merchant_UrlKO' => '/payment/redsys/checkout/ko', 'Ds_Merchant_TransactionType' => $this::transactionType, 'Ds_Merchant_ProductDescription' => $this::prodDesc, 'Ds_Merchant_Titular' => $this::titular, 'Ds_Merchant_MerchantName' => $this::name);
     $this->paymentBridge->expects($this->once())->method('getExtraData')->will($this->returnValue(array('terminal' => $this::terminal, 'transaction_type' => $this::transactionType, 'product_description' => $this::prodDesc, 'merchant_titular' => $this::titular, 'merchant_name' => $this::name)));
     $this->paymentBridge->expects($this->once())->method('getAmount')->will($this->returnValue($amount));
     $this->paymentBridge->expects($this->once())->method('getOrderNumber')->will($this->returnValue('342'));
     $this->paymentBridge->expects($this->once())->method('getCurrency')->will($this->returnValue('EUR'));
     $this->urlFactory->expects($this->once())->method('getReturnUrlOkForOrderId')->will($this->returnValue('/payment/redsys/checkout/ok'));
     $this->urlFactory->expects($this->once())->method('getReturnUrlKoForOrderId')->will($this->returnValue('/payment/redsys/checkout/ko'));
     $this->urlFactory->expects($this->once())->method('getReturnRedsysUrl')->will($this->returnValue('/payment/redsys/result'));
     $formView = $this->redsysFormTypeWrapper->buildForm();
     $children = $formView->children;
     foreach (array_keys($formData) as $key) {
         $this->assertArrayHasKey($key, $children);
         $message = $formData[$key] . ':::' . $children[$key]->vars['value'];
         $this->assertEquals($formData[$key], $children[$key]->vars['value'], $message);
     }
 }