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> '; }
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>'; }