public function redirectAction() { $this->helper = Mage::helper('devopensource_redsys'); $_order = new Mage_Sales_Model_Order(); $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); $_order->loadByIncrementId($orderId); $nameStore = Mage::getStoreConfig('payment/redsys/namestore', Mage::app()->getStore()); $merchantcode = Mage::getStoreConfig('payment/redsys/merchantcode', Mage::app()->getStore()); $sha256key = Mage::getStoreConfig('payment/redsys/sha256key', Mage::app()->getStore()); $terminal = Mage::getStoreConfig('payment/redsys/terminal', Mage::app()->getStore()); $transaction = Mage::getStoreConfig('payment/redsys/transaction', Mage::app()->getStore()); $productsDescription = $this->helper->getDescriptionOrder($_order); $urlStore = $this->helper->getUrlStore(); $language = $this->helper->getLanguages(); $currency = $this->helper->getCurrency(); $this->helper->stateInTpv($_order); $transaction_amount = number_format($_order->getBaseGrandTotal(), 2, '', ''); $amount = (double) $transaction_amount; $payMethods = "C"; $urlOK = Mage::getBaseUrl() . 'redsys/index/success'; $urlKO = Mage::getBaseUrl() . 'redsys/index/cancel'; $redsys = new RedsysAPI(); $redsys->setParameter("DS_MERCHANT_AMOUNT", $amount); $redsys->setParameter("DS_MERCHANT_ORDER", strval($orderId)); $redsys->setParameter("DS_MERCHANT_MERCHANTCODE", $merchantcode); $redsys->setParameter("DS_MERCHANT_CURRENCY", $currency); $redsys->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $transaction); $redsys->setParameter("DS_MERCHANT_TERMINAL", $terminal); $redsys->setParameter("DS_MERCHANT_MERCHANTURL", $urlStore); $redsys->setParameter("DS_MERCHANT_URLOK", $urlOK); $redsys->setParameter("DS_MERCHANT_URLKO", $urlKO); $redsys->setParameter("Ds_Merchant_ConsumerLanguage", $language); $redsys->setParameter("Ds_Merchant_ProductDescription", $productsDescription); $redsys->setParameter("Ds_Merchant_Titular", $nameStore); $redsys->setParameter("Ds_Merchant_MerchantName", $nameStore); $redsys->setParameter("Ds_Merchant_PayMethods", $payMethods); $version = "HMAC_SHA256_V1"; $paramsBase64 = $redsys->createMerchantParameters(); $signatureMac = $redsys->createMerchantSignature($sha256key); echo ' <form action="' . $this->helper->getUrlEnviroment() . '" method="post" id="redsys" name="redsys"> <input type="hidden" name="Ds_SignatureVersion" value="' . $version . '" /> <input type="hidden" name="Ds_MerchantParameters" value="' . $paramsBase64 . '" /> <input type="hidden" name="Ds_Signature" value="' . $signatureMac . '" /> </form> <h3> ' . $this->__('Redirecting the TPV please wait...') . '</h3> <script type="text/javascript"> document.redsys.submit(); </script>'; }
public function setParameters() { $api = new RedsysAPI(); $id = time(); $api->setParameter("DS_MERCHANT_AMOUNT", $this->_importe); $api->setParameter("DS_MERCHANT_ORDER", strval($id)); $api->setParameter("DS_MERCHANT_MERCHANTCODE", $this->_fuc); $api->setParameter("DS_MERCHANT_CURRENCY", $this->_moneda); $api->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $this->_tipoTransaccion); $api->setParameter("DS_MERCHANT_TERMINAL", $this->_terminal); $api->setParameter("DS_MERCHANT_MERCHANTURL", $this->_urlNotificacion); $api->setParameter("DS_MERCHANT_URLOK", $this->_setUrlOk); $api->setParameter("DS_MERCHANT_URLKO", $this->_urlKo); $this->params = $api->createMerchantParameters(); $this->_firma = $api->createMerchantSignature($this->_clave); }
public function getPostData($order, $amount, $transactionType = 0) { $api = new RedsysAPI(); $api->setParameter('Ds_Merchant_Amount', $amount); $api->setParameter('Ds_Merchant_Currency', $this->_settings->currency); $api->setParameter('Ds_Merchant_Order', $order); $api->setParameter('Ds_Merchant_MerchantCode', $this->_settings->merchantCode); $api->setParameter('Ds_Merchant_MerchantURL', $this->_settings->merchantUrl); $api->setParameter('Ds_Merchant_UrlOK', $this->_settings->urlOk); $api->setParameter('Ds_Merchant_UrlKO', $this->_settings->urlKo); $api->setParameter('Ds_Merchant_MerchantName', $this->_settings->merchantName); $api->setParameter('Ds_Merchant_ConsumerLanguage', $this->_settings->consumerLanguage); $api->setParameter('Ds_Merchant_Terminal', $this->_settings->terminal); $api->setParameter('Ds_Merchant_TransactionType', $transactionType); $parameters = $api->createMerchantParameters(); $signature = $api->createMerchantSignature($this->_settings->secretKey); return array('Ds_SignatureVersion' => $this->_hash_version, 'Ds_MerchantParameters' => $parameters, 'Ds_Signature' => $signature); }
/** * Load the payment form * * @param object $booking * @return object */ public function loadForm($booking) { // action $test = $this->params->get('test', 0); $action = $test ? 'https://sis-t.redsys.es:25443/sis/realizarPago' : 'https://sis.redsys.es/sis/realizarPago'; // urls $urlMer = JRoute::_('index.php?Itemid=' . CHLib::input()->get('Itemid') . '&view=notify', true, JFactory::getURI()->isSSL() ? 1 : -1); $urlOK = JRoute::_('index.php?Itemid=' . CHLib::input()->get('Itemid') . '&view=return', true, JFactory::getURI()->isSSL() ? 1 : -1); // carga redsys api $redsys_api_object = new RedsysAPI(); // parametros foreach (['Ds_Merchant_Titular' => $booking->customer->first_name . ' ' . $booking->customer->last_name, 'Ds_Merchant_Amount' => round($booking->amounts->deposit * 100), 'Ds_Merchant_MerchantData' => $booking->booking_id, 'Ds_Merchant_MerchantCode' => $this->params->get('MerchantCode'), 'Ds_Merchant_Terminal' => $this->params->get('Terminal'), 'Ds_Merchant_Currency' => '978', 'Ds_Merchant_MerchantURL' => $urlMer, 'Ds_Merchant_UrlKO' => $urlOK, 'Ds_Merchant_UrlOK' => $urlOK, 'Ds_Merchant_MerchantName' => $this->params->get('MerchantName'), 'Ds_Merchant_Order' => date('ymdHis'), 'Ds_Merchant_ConsumerLanguage' => $this->getLangCode(), 'Ds_Merchant_TransactionType' => '0', 'Ds_Merchant_PayMethods' => 'T'] as $key => $value) { $redsys_api_object->setParameter($key, $value); } $parameters = $redsys_api_object->createMerchantParameters(); // signature $signature = $redsys_api_object->createMerchantSignature($this->params->get('Signature')); // form $form = (object) ['action' => $action, 'method' => 'post', 'iframe' => $this->params->get('iframe', 1), 'fields' => ['Ds_SignatureVersion' => 'HMAC_SHA256_V1', 'Ds_MerchantParameters' => $parameters, 'Ds_Signature' => $signature]]; return $form; }
$miObj->setParameter("DS_MERCHANT_ORDER", strval($id)); $miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $fuc); $miObj->setParameter("DS_MERCHANT_CURRENCY", $moneda); $miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $trans); $miObj->setParameter("DS_MERCHANT_TERMINAL", $terminal); $miObj->setParameter("DS_MERCHANT_MERCHANTURL", $url); $miObj->setParameter("DS_MERCHANT_URLOK", $urlOKKO); $miObj->setParameter("DS_MERCHANT_URLKO", $urlOKKO); //Datos de configuración $version = "HMAC_SHA256_V1"; $kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'; //Clave recuperada de CANALES // Se generan los parámetros de la petición $request = ""; $params = $miObj->createMerchantParameters(); $signature = $miObj->createMerchantSignature($kc); ?> <html lang="es"> <head> </head> <body> <form name="frm" action="http://sis-d.redsys.es/sis/realizarPago" method="POST" target="_blank"> Ds_Merchant_SignatureVersion <input type="text" name="Ds_SignatureVersion" value="<?php echo $version; ?> "/></br> Ds_Merchant_MerchantParameters <input type="text" name="Ds_MerchantParameters" value="<?php echo $params; ?> "/></br> Ds_Merchant_Signature <input type="text" name="Ds_Signature" value="<?php
public function redirectAction() { $logActivo = Mage::getStoreConfig('payment/redsys/logactivo', Mage::app()->getStore()); //Obtenemos los valores de la configuración del módulo $entorno = Mage::getStoreConfig('payment/redsys/entorno', Mage::app()->getStore()); $nombre = Mage::getStoreConfig('payment/redsys/nombre', Mage::app()->getStore()); $codigo = Mage::getStoreConfig('payment/redsys/num', Mage::app()->getStore()); $clave256 = Mage::getStoreConfig('payment/redsys/clave256', Mage::app()->getStore()); $terminal = Mage::getStoreConfig('payment/redsys/terminal', Mage::app()->getStore()); $moneda = Mage::getStoreConfig('payment/redsys/moneda', Mage::app()->getStore()); $trans = Mage::getStoreConfig('payment/redsys/trans', Mage::app()->getStore()); $notif = Mage::getStoreConfig('payment/redsys/notif', Mage::app()->getStore()); $ssl = Mage::getStoreConfig('payment/redsys/ssl', Mage::app()->getStore()); $error = Mage::getStoreConfig('payment/redsys/error', Mage::app()->getStore()); $idiomas = Mage::getStoreConfig('payment/redsys/idiomas', Mage::app()->getStore()); $tipopago = Mage::getStoreConfig('payment/redsys/tipopago', Mage::app()->getStore()); $correo = Mage::getStoreConfig('payment/redsys/correo', Mage::app()->getStore()); $mensaje = Mage::getStoreConfig('payment/redsys/mensaje', Mage::app()->getStore()); //Obtenemos datos del pedido $_order = new Mage_Sales_Model_Order(); $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); $_order->loadByIncrementId($orderId); //Actualizamos estado del pedido a "pendiente" //INI MOD #7506 //Si se modifica el estado aquí el pedido vuelve a pending cuando el usuario //pulsa el botón de atrás de su navegador // $state = 'new'; // $status = 'pending'; // $comment = 'Redsys ha actualizado el estado del pedido con el valor "' . $status . '"'; // $isCustomerNotified = true; // $_order->setState($state, $status, $comment, $isCustomerNotified); // $_order->save(); //FIN MOD #7506 //Datos del cliente $customer = Mage::getSingleton('customer/session')->getCustomer(); //Datos de los productos del pedido $productos = ''; $items = $_order->getAllVisibleItems(); foreach ($items as $itemId => $item) { $productos .= $item->getName(); $productos .= "X" . $item->getQtyToInvoice(); $productos .= "/"; } //Formateamos el precio total del pedido $transaction_amount = number_format($_order->getBaseGrandTotal(), 2, '', ''); //Establecemos los valores del cliente y el pedido $numpedido = str_pad($orderId, 12, "0", STR_PAD_LEFT); $cantidad = (double) $transaction_amount; $titular = $customer->getFirstname() . " " . $customer->getMastname() . " " . $customer->getLastname() . "/ Correo:" . $customer->getEmail(); //Generamos el urlTienda -> respuesta ON-LINE que deberá ser la establecida bajo las pautas de WooCommerce if ($ssl == "0") { $urltienda = Mage::getBaseUrl() . 'redsys/index/notify'; } else { $urltienda = Mage::getBaseUrl() . 'redsys/index/notify'; } // INI MOD #7375 $urlok = Mage::getBaseUrl() . 'redsys/index/success'; $urlko = Mage::getBaseUrl() . 'redsys/index/cancel'; // FIN MOD #7375 // // Obtenemos el valor de la config del idioma if ($idiomas == "0") { $idioma_tpv = "0"; } else { $idioma_web = substr(Mage::getStoreConfig('general/locale/code', Mage::app()->getStore()->getId()), 0, 2); switch ($idioma_web) { case 'es': $idioma_tpv = '001'; break; case 'en': $idioma_tpv = '002'; break; case 'ca': $idioma_tpv = '003'; break; case 'fr': $idioma_tpv = '004'; break; case 'de': $idioma_tpv = '005'; break; case 'nl': $idioma_tpv = '006'; break; case 'it': $idioma_tpv = '007'; break; case 'sv': $idioma_tpv = '008'; break; case 'pt': $idioma_tpv = '009'; break; case 'pl': $idioma_tpv = '011'; break; case 'gl': $idioma_tpv = '012'; break; case 'eu': $idioma_tpv = '013'; break; default: $idioma_tpv = '002'; } } // Obtenemos el código ISO del tipo de moneda // INI MOD #7375 if ($moneda == "0") { $moneda = "978"; } else { if ($moneda == "1") { $moneda = "840"; } else { if ($moneda == "2") { $moneda = "826"; } else { $moneda = "978"; } } } // FIN MOD #7375 // Obtenemos los tipos de pago permitidos if ($tipopago == "0") { $tipopago = " "; } else { if ($tipopago == "1") { $tipopago = "C"; } else { $tipopago = "T"; } } $miObj = new RedsysAPI(); $miObj->setParameter("DS_MERCHANT_AMOUNT", $cantidad); $miObj->setParameter("DS_MERCHANT_ORDER", strval($numpedido)); $miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $codigo); $miObj->setParameter("DS_MERCHANT_CURRENCY", $moneda); $miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $trans); $miObj->setParameter("DS_MERCHANT_TERMINAL", $terminal); $miObj->setParameter("DS_MERCHANT_MERCHANTURL", $urltienda); // INI MOD #7375 $miObj->setParameter("DS_MERCHANT_URLOK", $urlok); $miObj->setParameter("DS_MERCHANT_URLKO", $urlko); // FIN MOD #7375 $miObj->setParameter("Ds_Merchant_ConsumerLanguage", $idioma_tpv); $miObj->setParameter("Ds_Merchant_ProductDescription", $productos); $miObj->setParameter("Ds_Merchant_Titular", $nombre); $miObj->setParameter("Ds_Merchant_MerchantData", sha1($urltienda)); $miObj->setParameter("Ds_Merchant_MerchantName", $nombre); $miObj->setParameter("Ds_Merchant_PayMethods", $tipopago); $miObj->setParameter("Ds_Merchant_Module", "magento_redsys_2.8.3"); //Datos de configuración $version = getVersionClave(); //Clave del comercio que se extrae de la configuración del comercio // Se generan los parámetros de la petición $request = ""; $paramsBase64 = $miObj->createMerchantParameters(); $signatureMac = $miObj->createMerchantSignature($clave256); $this->escribirLog('Redsys: Redirigiendo a TPV pedido: ' . strval($numpedido), $logActivo); // Obtenemos el valor de la consulta para saber el entorno del TPV. if ($entorno == "1") { echo '<form action="http://sis-d.redsys.es/sis/realizarPago/utf-8" method="post" id="redsys_form" name="redsys_form">'; } else { if ($entorno == "2") { echo '<form action="https://sis-i.redsys.es:25443/sis/realizarPago/utf-8" method="post" id="redsys_form" name="redsys_form">'; } else { if ($entorno == "3") { echo '<form action="https://sis-t.redsys.es:25443/sis/realizarPago/utf-8" method="post" id="redsys_form" name="redsys_form">'; } else { echo '<form action="https://sis.redsys.es/sis/realizarPago/utf-8" method="post" id="redsys_form" name="redsys_form">'; } } } // Establecemos el valor de los input echo ' <input type="hidden" name="Ds_SignatureVersion" value="' . $version . '" /> <input type="hidden" name="Ds_MerchantParameters" value="' . $paramsBase64 . '" /> <input type="hidden" name="Ds_Signature" value="' . $signatureMac . '" /> </form> <h3> Cargando el TPV... Espere por favor. </h3> <script type="text/javascript"> document.redsys_form.submit(); </script> '; }
/** * This function calls the Redsys servers and sends them information * about the payment. */ function doTransferCheckout(&$params, $component = 'contribute') { $config = CRM_Core_Config::singleton(); if ($component != 'contribute' && $component != 'event') { CRM_Core_Error::fatal(ts('Component is invalid')); } $url = $component == 'event' ? 'civicrm/event/register' : 'civicrm/contribute/transact'; $cancel = $component == 'event' ? '_qf_Register_display' : '_qf_Main_display'; $returnURL = CRM_Utils_System::url($url, "_qf_ThankYou_display=1&qfKey={$params['qfKey']}", TRUE, NULL, FALSE); $cancelUrlString = "{$cancel}=1&cancel=1&qfKey={$params['qfKey']}"; if (CRM_Utils_Array::value('is_recur', $params)) { $cancelUrlString .= "&isRecur=1&recurId={$params['contributionRecurID']}&contribId={$params['contributionID']}"; } $cancelURL = CRM_Utils_System::url($url, $cancelUrlString, TRUE, NULL, FALSE); $merchantUrl = $config->userFrameworkBaseURL . 'civicrm/payment/ipn?processor_name=Redsys&mode=' . $this->_mode . '&md=' . $component . '&qfKey=' . $params["qfKey"]; $miObj = new RedsysAPI(); $miObj->setParameter("DS_MERCHANT_AMOUNT", $params["amount"] * 100); $miObj->setParameter("DS_MERCHANT_ORDER", strval(self::formatAmount($params["contributionID"], 12))); $miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $this->_paymentProcessor["user_name"]); $miObj->setParameter("DS_MERCHANT_CURRENCY", self::REDSYS_CURRENCY_EURO); $miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", self::REDSYS_TRANSACTION_TYPE_OPERATION_STANDARD); $miObj->setParameter("DS_MERCHANT_TERMINAL", 1); $miObj->setParameter("DS_MERCHANT_MERCHANTURL", $merchantUrl); $miObj->setParameter("DS_MERCHANT_URLOK", $returnURL); $miObj->setParameter("DS_MERCHANT_URLKO", $cancelURL); $miObj->setParameter("DS_MERCHANT_PRODUCTDESCRIPTION", $params["contributionType_name"]); $miObj->setParameter("DS_MERCHANT_TITULAR", $params["first_name"] . " " . $params["last_name"]); $miObj->setParameter("DS_MERCHANT_CONSUMERLANGUAGE", self::REDSYS_LANGUAGE_SPANISH); $version = "HMAC_SHA256_V1"; $signature = $miObj->createMerchantSignature($this->_paymentProcessor["password"]); // Print the tpl to redirect and send POST variables to RedSys Getaway $template = CRM_Core_Smarty::singleton(); $tpl = 'CRM/Core/Payment/Redsys.tpl'; $template->assign('signature', $signature); $redsysParamsJSON = $miObj->createMerchantParameters(); $template->assign('redsysParamsJSON', $redsysParamsJSON); $template->assign('version', $version); $template->assign('redsysURL', $this->_paymentProcessor["url_site"]); print $template->fetch($tpl); CRM_Utils_System::civiExit(); }
public function checkoutAction() { if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['productos']) && !empty($_POST['productos'])) { $hash_compra = md5(uniqid(time())); foreach ($_POST['productos'] as $pro) { $_SESSION['productos'][$pro['idproducto']] = array($pro['q'], $pro['size'], $pro['color']); } $miObj = new RedsysAPI(); // Valores de entrada $fuc = "999008881"; $terminal = "871"; $moneda = "978"; $trans = "0"; $url = URL; $urlKO = URL . "client/ko"; $urlOK = URL . "client/ok"; $id = $hash_compra; $amount = number_format($_POST['amount'], 2, '', ''); // Se Rellenan los campos $miObj->setParameter("DS_MERCHANT_AMOUNT", $amount); $miObj->setParameter("DS_MERCHANT_ORDER", strval($id)); $miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $fuc); $miObj->setParameter("DS_MERCHANT_CURRENCY", $moneda); $miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $trans); $miObj->setParameter("DS_MERCHANT_TERMINAL", $terminal); $miObj->setParameter("DS_MERCHANT_MERCHANTURL", $url); $miObj->setParameter("DS_MERCHANT_URLOK", $urlOK); $miObj->setParameter("DS_MERCHANT_URLKO", $urlKO); //Datos de configuración $version = "HMAC_SHA256_V1"; $kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'; //Clave recuperada de CANALES // Se generan los parámetros de la petición $request = ""; $params = $miObj->createMerchantParameters(); $signature = $miObj->createMerchantSignature($kc); return require VIEWS . 'client/confirmpay.php'; } if (self::getSession('username')) { $productos = $this->_generate_products(); return require VIEWS . 'client/checkout.php'; } return header('location: /'); }
5 - Recurrent Transaction 6 - Successive Transaction 7 - Authentication 8 - Confirmation of Authentication */ $currency = $processor_data['processor_params']['currency']; $merchant = $processor_data['processor_params']['merchant_id']; $terminal = $processor_data['processor_params']['terminal']; $transaction_type = 0; // authorization $clave = $processor_data['processor_params']['clave']; $postfix = fn_date_format(time(), '%S'); if (strlen($order_id) > 6) { $order_n = $order_id . $postfix . ($order_info['repaid'] ? 'x' . $order_info['repaid'] : ''); } else { $order_n = str_repeat('0', 6 - strlen($order_id)) . $order_id . $postfix . ($order_info['repaid'] ? 'x' . $order_info['repaid'] : ''); } $amount = $currency == '978' ? $order_info['total'] * 100 : $order_info['total']; $url_merchant = fn_url("payment_notification.result?payment=servired&order_id={$order_id}{$postfix}", AREA, 'current'); $url_ok = fn_url("payment_notification.notify?payment=servired&order_id={$order_id}{$postfix}", AREA, 'current'); $url_nok = fn_url("payment_notification.failed?payment=servired&order_id={$order_id}{$postfix}", AREA, 'current'); $api_request_parameters = array('Ds_Merchant_Amount' => $amount, 'Ds_Merchant_Order' => $order_n, 'Ds_Merchant_MerchantCode' => $merchant, 'Ds_Merchant_Currency' => $currency, 'Ds_Merchant_TransactionType' => $transaction_type, 'Ds_Merchant_Terminal' => $terminal, 'Ds_Merchant_MerchantURL' => $url_merchant, 'Ds_Merchant_UrlOK' => $url_ok, 'Ds_Merchant_UrlKO' => $url_nok); foreach ($api_request_parameters as $key => $value) { $redsys_api->setParameter($key, $value); } $merchant_parameters = $redsys_api->createMerchantParameters(); $signature = $redsys_api->createMerchantSignature($clave); $post_data = array('Ds_SignatureVersion' => 'HMAC_SHA256_V1', 'Ds_MerchantParameters' => $merchant_parameters, 'Ds_Signature' => $signature); fn_create_payment_form($post_address, $post_data, 'Redsys'); } exit;
function generate_redsys_form($order_id) { // Version $merchantModule = 'woocommerce_redsys_2.8.4'; //Recuperamos los datos de config. $nombre = $this->nombre; $codigo = $this->fuc; $terminal = $this->terminal; $trans = $this->trans; $moneda = $this->moneda; $clave256 = $this->clave256; $tipopago = $this->tipopago; $logActivo = $this->activar_log; $idioma = $this->idioma; $entorno = $this->entorno; //Esquema de logs de Redsys //$this->log->add( 'redsys', 'Acceso al formulario de pago con tarjeta de REDSYS '); $this->escribirLog($this->idLog . " -- " . "Acceso al formulario de pago con tarjeta de REDSYS", $logActivo); //Callback $urltienda = $this->notify_url; //Objeto tipo pedido $order = new WC_Order($order_id); //Calculo del precio total del pedido $transaction_amount = number_format((double) $order->get_total(), 2, '.', ''); $transaction_amount = str_replace('.', '', $transaction_amount); $transaction_amount = floatval($transaction_amount); // Descripción de los productos $products = WC()->cart->cart_contents; foreach ($products as $product) { $productos .= $product['quantity'] . 'x' . $product['data']->post->post_title . '/'; } $numpedido = str_pad($order_id, 12, "0", STR_PAD_LEFT); // Obtenemos el valor de la config del idioma if ($idioma == "no") { $idiomaFinal = "0"; } else { $idioma_web = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2); switch ($idioma_web) { case 'es': $idiomaFinal = '001'; break; case 'en': $idiomaFinal = '002'; break; case 'ca': $idiomaFinal = '003'; break; case 'fr': $idiomaFinal = '004'; break; case 'de': $idiomaFinal = '005'; break; case 'nl': $idiomaFinal = '006'; break; case 'it': $idiomaFinal = '007'; break; case 'sv': $idiomaFinal = '008'; break; case 'pt': $idiomaFinal = '009'; break; case 'pl': $idiomaFinal = '011'; break; case 'gl': $idiomaFinal = '012'; break; case 'eu': $idiomaFinal = '013'; break; default: $idiomaFinal = '002'; } } // Generamos la firma $miObj = new RedsysAPI(); $miObj->setParameter("DS_MERCHANT_AMOUNT", $transaction_amount); $miObj->setParameter("DS_MERCHANT_ORDER", $numpedido); $miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $codigo); $miObj->setParameter("DS_MERCHANT_CURRENCY", $moneda); $miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $trans); $miObj->setParameter("DS_MERCHANT_TERMINAL", $terminal); $miObj->setParameter("DS_MERCHANT_MERCHANTURL", $urltienda); $miObj->setParameter("DS_MERCHANT_URLOK", $this->get_return_url($order)); $miObj->setParameter("DS_MERCHANT_URLKO", $order->get_cancel_order_url()); $miObj->setParameter("Ds_Merchant_ConsumerLanguage", $idiomaFinal); $miObj->setParameter("Ds_Merchant_ProductDescription", $productos); $miObj->setParameter("Ds_Merchant_Titular", $order->billing_first_name . $order->billing_last_name . $order->billing_address_1); $miObj->setParameter("Ds_Merchant_MerchantData", sha1($urltienda)); $miObj->setParameter("Ds_Merchant_MerchantName", $nombre); $miObj->setParameter("Ds_Merchant_PayMethods", $tipopago); $miObj->setParameter("Ds_Merchant_Module", $merchantModule); //Datos de configuración $version = getVersionClave(); //Clave del comercio que se extrae de la configuración del comercio // Se generan los parámetros de la petición $request = ""; $paramsBase64 = $miObj->createMerchantParameters(); $signatureMac = $miObj->createMerchantSignature($this->clave256); $resys_args = array('Ds_SignatureVersion' => $version, 'Ds_MerchantParameters' => $paramsBase64, 'Ds_Signature' => $signatureMac); //Se establecen los input del formulario con los datos del pedido y la redirección $resys_args_array = array(); foreach ($resys_args as $key => $value) { $resys_args_array[] = "<input type='hidden' name='{$key}' value='{$value}'/>"; } //Se establece el entorno del SIS if ($entorno == "Sis-d") { $action = "http://sis-d.redsys.es/sis/realizarPago/utf-8"; } else { if ($entorno == "Sis-i") { $action = "https://sis-i.redsys.es:25443/sis/realizarPago/utf-8"; } else { if ($entorno == "Sis-t") { $action = "https://sis-t.redsys.es:25443/sis/realizarPago/utf-8"; } else { $action = "https://sis.redsys.es/sis/realizarPago/utf-8"; } } } //Formulario que envía los datos del pedido y la redirección al formulario de acceso al TPV return '<form action="' . $action . '" method="post" id="redsys_payment_form"> ' . implode('', $resys_args_array) . ' <input type="submit" class="button-alt" id="submit_redsys_payment_form" value="' . __('Pagar con Tarjeta', 'redsys') . '" /> <a class="button cancel" href="' . $order->get_cancel_order_url() . '">' . __('Cancelar Pedido', 'redsys') . '</a> </form>'; }
/** * Obtiene los campos que deben ser enviados mediante POST al TPV * * @return array|string * @throws InvalidArgumentException * @return string[]|string */ public function fields() { $amount = number_format($this->amount, 2); if ($this->currency == 'EUR') { //Para Euros las dos últimas posiciones se consideran decimales $amount = str_replace('.', '', $amount); } //Convertir divisa a código numérico $currency = is_numeric($this->currency) ? $this->currency : $this->_currency_name_to_code($this->currency); //Ajustar tamaño del identificador de pedido (minimo 4 caracteres) $order = str_pad($this->order, 4, '0', STR_PAD_LEFT); //Generar parámetros $redsys = new RedsysAPI(); $redsys->setParameter("DS_MERCHANT_AMOUNT", $amount); $redsys->setParameter("DS_MERCHANT_ORDER", $order); $redsys->setParameter("DS_MERCHANT_MERCHANTCODE", $this->merchant_id); $redsys->setParameter("DS_MERCHANT_CURRENCY", $currency); $redsys->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $this->transaction_type); $redsys->setParameter("DS_MERCHANT_TERMINAL", $this->terminal); $redsys->setParameter("DS_MERCHANT_MERCHANTURL", $this->url_notification); if ($this->merchant_name) { $redsys->setParameter("DS_MERCHANT_MERCHANTNAME", substr($this->merchant_name, 0, 25)); } if ($this->product_description) { $redsys->setParameter("DS_MERCHANT_PRODUCTDESCRIPTION", substr($this->product_description, 0, 125)); } if ($this->buyer_name) { $redsys->setParameter("DS_MERCHANT_TITULAR", substr($this->buyer_name, 0, 60)); } if ($this->language) { $redsys->setParameter("DS_MERCHANT_CONSUMERLANGUAGE", $this->language); } $redsys->setParameter("DS_MERCHANT_URLOK", $this->url_success); $redsys->setParameter("DS_MERCHANT_URLKO", $this->url_error); //Devolver campos return ['Ds_SignatureVersion' => 'HMAC_SHA256_V1', 'Ds_MerchantParameters' => $redsys->createMerchantParameters(), 'Ds_Signature' => $redsys->createMerchantSignature($this->secret_key)]; }