/** * 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); } }