예제 #1
0
 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);
 }
예제 #2
0
 /**
  * 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;
 }
    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>';
    }
예제 #4
0
// Se incluye la librería
include 'apiRedsys.php';
// Se crea Objeto
$miObj = new RedsysAPI();
// Valores de entrada
$fuc = "999008881";
$terminal = "871";
$moneda = "978";
$trans = "0";
$url = "";
$urlOKKO = "";
$id = time();
$amount = "145";
// 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", $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();
예제 #5
0
    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>
                ';
    }
예제 #6
0
 /*
 	1.- Realice al menos una operación Autorizada. Utilice esta tarjeta de prueba:
 
 		Número de tarjeta	4548 8120 4940 0004
 		Caducidad	12/20
 		Código CVV2	123
 		Código CIP	123456
 		2.- Realice al menos una operación Denegada. Utilice esta tarjeta de prueba:
 	Número de tarjeta	1111111111111117
 		Caducidad	12/20
 */
 $urlOK = get_permalink($options['direct_pay_select_pay_ok']);
 $urlKO = get_permalink($options['direct_pay_select_pay_ko']);
 $my_order = strval($wp_post_id) + 1000;
 // Se Rellenan los campos
 $miObj->setParameter("DS_MERCHANT_AMOUNT", $Importe);
 //EL IMPORTE
 $miObj->setParameter("DS_MERCHANT_ORDER", $my_order);
 $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 = $options['direct_pay_text_key_sha_256c'];
 $request = "";
 $params = $miObj->createMerchantParameters();
 $signature = $miObj->createMerchantSignature($kc);
예제 #7
0
 /**
  * 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();
 }
예제 #8
0
 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: /');
 }
예제 #9
0
     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;
예제 #10
0
 // Valores de entrada
 //$fuc="999008881";
 $fuc = '311027544';
 $terminal = "1";
 $moneda = "978";
 $trans = "0";
 $url = "http://shop.newmalalts.com/recepcio_pasarela.php";
 //cambiar
 $urlOK = "http://shop.newmalalts.com/ok.php";
 $urlKO = "http://shop.newmalalts.com";
 // $id=time();
 $n_pedido = date('ymdHis');
 $amount = $preu_total * 100;
 //preu total en centims d'euro
 // Se Rellenan los campos
 $miObj->setParameter("DS_MERCHANT_AMOUNT", $amount);
 $miObj->setParameter("DS_MERCHANT_ORDER", $n_pedido);
 $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);
 $miObj->setParameter("DS_MERCHANT_MERCHANTDATA", $pedidoJSON);
 //Datos de configuración
 $version = "HMAC_SHA256_V1";
 //$kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';//Clave recuperada de CANALES
 $kc = 'Fog01f8CgEcUGuCQT6bX5P34MsIdBJXg';
 // Se generan los parámetros de la petición
 $request = "";
예제 #11
0
            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>';
            }
예제 #12
0
 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);
 }
예제 #13
0
 /**
  * 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)];
 }