public function callbackAction()
 {
     $this->helper = Mage::helper('devopensource_redsys');
     $params = $this->getRequest()->getPost();
     if (count($params) > 0) {
         $datos = $_POST["Ds_MerchantParameters"];
         $signature_response = $_POST["Ds_Signature"];
         $redsys = new RedsysAPI();
         $redsys->decodeMerchantParameters($datos);
         $sha256key = Mage::getStoreConfig('payment/redsys/sha256key', Mage::app()->getStore());
         $signature = $redsys->createMerchantSignatureNotif($sha256key, $datos);
         $amount = $redsys->getParameter('Ds_Amount');
         $orderId = $redsys->getParameter('Ds_Order');
         $merchantcode = $redsys->getParameter('Ds_MerchantCode');
         $terminal = $redsys->getParameter('Ds_Terminal');
         $responsecode = $redsys->getParameter('Ds_Response');
         $transaction = $redsys->getParameter('Ds_TransactionType');
         $merchantcodemagento = Mage::getStoreConfig('payment/redsys/merchantcode', Mage::app()->getStore());
         $terminalmagento = Mage::getStoreConfig('payment/redsys/terminal', Mage::app()->getStore());
         $transactionmagento = Mage::getStoreConfig('payment/redsys/transaction', Mage::app()->getStore());
         if ($signature === $signature_response && isset($orderId) && $transaction == $transactionmagento && $merchantcode == $merchantcodemagento && intval(strval($terminalmagento)) == intval(strval($terminal))) {
             $responsecode = intval($responsecode);
             if ($responsecode <= 99) {
                 $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
                 $transaction_amount = number_format($order->getBaseGrandTotal(), 2, '', '');
                 $amountOrder = (double) $transaction_amount;
                 if ($amountOrder != $amount) {
                     $order->addStatusHistoryComment($this->__("Error: Amount is diferent"), false);
                     $this->helper->stateErrorTpv($order);
                     $this->helper->restoreStock($order);
                 }
                 try {
                     $this->helper->createInvoice($order);
                     $this->helper->stateConfirmTpv($order);
                     $order->sendNewOrderEmail();
                 } catch (Exception $e) {
                     $order->addStatusHistoryComment($this->__("TPV Error: %s", $e->getMessage()), false);
                     $order->save();
                 }
             } else {
                 $errorMessage = $this->helper->comentarioReponse($responsecode);
                 $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
                 $this->helper->stateErrorTpv($order, $errorMessage);
                 $this->helper->restoreStock($order);
             }
         } else {
             $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
             $order->addStatusHistoryComment($this->__("Error: Signature is wrong"), false);
             $this->helper->stateErrorTpv($order);
             $this->helper->restoreStock($order);
         }
     } else {
         $this->_redirect('');
     }
 }
 /**
  * @throws CakeException
  */
 public function getNotificationData($data)
 {
     $version = $data["Ds_SignatureVersion"];
     if ($version !== $this->_hash_version) {
         throw new CakeException("Invalid signature version ({$version}) received from Sermepa.");
     }
     $api = new RedsysAPI();
     $parameters = $data["Ds_MerchantParameters"];
     $signature = $api->createMerchantSignatureNotif($this->_settings->secretKey, $parameters);
     if ($data["Ds_Signature"] !== $signature) {
         throw new CakeException("Invalid signature in Sermepa notification.");
     }
     $parameters = $api->decodeMerchantParameters($parameters);
     $this->_notification = json_decode($parameters);
     return $this->_notification;
 }
Beispiel #3
0
 public function checkResponse($postData = '')
 {
     $api = new RedsysAPI();
     if ($this->_clave === null) {
         return false;
     }
     if (isset($postData)) {
         $version = $postData["Ds_SignatureVersion"];
         $datos = $postData["Ds_MerchantParameters"];
         $firmaBanco = $postData["Ds_Signature"];
         if (isset($postData['Ds_Response'])) {
             $Ds_Response = $postData['Ds_Response'];
             $Ds_Response = (int) $Ds_Response;
         }
         $decodec = $api->decodeMerchantParameters($datos);
         $firma = $api->createMerchantSignatureNotif($this->_clave, $datos);
         if ($firma == $firmaBanco) {
             if (isset($Ds_Response)) {
                 if ($Ds_Response < 100) {
                     return true;
                 } else {
                     throw new Exception("Error en la transacción, código " . $Ds_Response);
                     echo "Error en la transacción, código " . $Ds_Response;
                     return false;
                 }
             } else {
                 return true;
             }
         } else {
             throw new Exception("Las firmas no coinciden");
             echo "Las firmas no coinciden";
             return false;
         }
     } else {
         throw new Exception("Debes pasar la variable POST devuelta por el banco");
         echo "Debes pasar la variable POST devuelta por el banco";
         return false;
     }
 }
Beispiel #4
0
 /**
  * Check Notification
  * 
  * @param object $config
  * @return array
  */
 public function checkNotification($config)
 {
     // check data received from vendor
     if (!CHLibInputPost::string('Ds_MerchantParameters')) {
         return false;
     }
     // load redsys api object
     $redsys_api_object = new RedsysAPI();
     // load data info api object
     $decoded_data = $redsys_api_object->decodeMerchantParameters(CHLibInputPost::string('Ds_MerchantParameters'));
     // signature check
     if (CHLibInputPost::string('Ds_Signature') == $redsys_api_object->createMerchantSignatureNotif($this->params->get('Signature'), $data)) {
         // check payment status
         if (!(int) $redsys_api_object->getParameter('Ds_Response')) {
             $booking_id = $redsys_api_object->getParameter('Ds_MerchantData');
             $confirmation_object = (object) ['Ds_Response' => $redsys_api_object->getParameter('Ds_Response'), 'Ds_AuthorisationCode' => $redsys_api_object->getParameter('Ds_AuthorisationCode'), 'Ds_Order' => $redsys_api_object->getParameter('Ds_Order')];
             return [$booking_id, $confirmation_object];
         }
     }
     return [0, false];
 }
Beispiel #5
0
<html>
<body>
<?php 
session_start();
require_once "../../../funciones.php";
require_once '../../../backoffice/PHPMailer-master/class.phpmailer.php';
require_once '../../../backoffice/PHPMailer-master/PHPMailerAutoload.php';
require_once "../../../html2pdf/vendor/autoload.php";
include 'apiRedsys.php';
// Se crea Objeto
$miObj = new RedsysAPI();
if (!empty($_POST)) {
    //URL DE RESP. ONLINE
    $version = $_POST["Ds_SignatureVersion"];
    $datos = $_POST["Ds_MerchantParameters"];
    $signatureRecibida = $_POST["Ds_Signature"];
    $decodec = $miObj->decodeMerchantParameters($datos);
    $kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';
    //Clave recuperada de CANALES
    $firma = $miObj->createMerchantSignatureNotif($kc, $datos);
    if ($firma === $signatureRecibida) {
        echo "FIRMA OK";
        if (!empty($_SESSION['usuariofront']) || !empty($_SESSION['usuario'])) {
            $db = conectarBD();
            if ($db->connect_errno > 0) {
                die('Imposible conectar [' . $db->connect_error . ']');
            }
            $metodop = "ingreso banco";
            $estado = "pedido";
            if (isset($_SESSION['usuario'])) {
                // Usuario al que se le enviará el MAIL
 public function cancelAction()
 {
     if (!empty($_GET) && Mage::getStoreConfig('payment/redsys/display_error_clients', Mage::app()->getStore())) {
         $this->helper = Mage::helper('devopensource_redsys');
         $data = $_GET["Ds_MerchantParameters"];
         $signature_response = $_GET["Ds_Signature"];
         $redsys = new RedsysAPI();
         $redsys->decodeMerchantParameters($data);
         $sha256key = Mage::getStoreConfig('payment/redsys/sha256key', Mage::app()->getStore());
         $signature = $redsys->createMerchantSignatureNotif($sha256key, $data);
         $response = $redsys->getParameter('Ds_Response');
         if ($signature === $signature_response) {
             $responsecode = intval($response);
             $error = $this->helper->comentarioReponse($responsecode);
         }
     }
     if (!isset($error)) {
         $error = $this->__('Denied transaction from Redsys.');
     }
     $this->helper = Mage::helper('devopensource_redsys');
     $session = Mage::getSingleton('checkout/session');
     $this->helper->recoveryCart();
     $session->addError($error);
     $this->_redirect('checkout/cart');
 }
<?php

// 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 = "";
 public function notifyAction()
 {
     //header( 'Content-Type:text/html; charset=UTF-8' );
     $idLog = generateIdLog();
     $logActivo = Mage::getStoreConfig('payment/redsys/logactivo', Mage::app()->getStore());
     $mantenerPedidoAnteError = Mage::getStoreConfig('payment/redsys/errorpedido', Mage::app()->getStore());
     $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
     $this->escribirLog($idLog . " -- " . "Notificando desde Redsys ", $logActivo);
     if (!empty($_POST)) {
         //URL RESP. ONLINE
         /** Recoger datos de respuesta * */
         $version = $_POST["Ds_SignatureVersion"];
         $datos = $_POST["Ds_MerchantParameters"];
         $firma_remota = $_POST["Ds_Signature"];
         $this->escribirLog($idLog . " -- " . "Ds_SignatureVersion: " . $version, $logActivo);
         $this->escribirLog($idLog . " -- " . "Ds_MerchantParameters: " . $datos, $logActivo);
         $this->escribirLog($idLog . " -- " . "Ds_Signature: " . $firma_remota, $logActivo);
         // Se crea Objeto
         $miObj = new RedsysAPI();
         /** Se decodifican los datos enviados y se carga el array de datos * */
         $decodec = $miObj->decodeMerchantParameters($datos);
         /** Clave * */
         $kc = Mage::getStoreConfig('payment/redsys/clave256', Mage::app()->getStore());
         /** Se calcula la firma * */
         $firma_local = $miObj->createMerchantSignatureNotif($kc, $datos);
         /** Extraer datos de la notificación * */
         $total = $miObj->getParameter('Ds_Amount');
         $pedido = $miObj->getParameter('Ds_Order');
         $codigo = $miObj->getParameter('Ds_MerchantCode');
         $terminal = $miObj->getParameter('Ds_Terminal');
         $moneda = $miObj->getParameter('Ds_Currency');
         $respuesta = $miObj->getParameter('Ds_Response');
         $fecha = $miObj->getParameter('Ds_Date');
         $hora = $miObj->getParameter('Ds_Hour');
         $id_trans = $miObj->getParameter('Ds_AuthorisationCode');
         $tipoTrans = $miObj->getParameter('Ds_TransactionType');
         // Recogemos los datos del comercio
         $codigoOrig = Mage::getStoreConfig('payment/redsys/num', Mage::app()->getStore());
         $terminalOrig = Mage::getStoreConfig('payment/redsys/terminal', Mage::app()->getStore());
         $monedaOrig = Mage::getStoreConfig('payment/redsys/moneda', Mage::app()->getStore());
         $tipoTransOrig = Mage::getStoreConfig('payment/redsys/trans', Mage::app()->getStore());
         // Obtenemos el código ISO del tipo de moneda
         if ($monedaOrig == "0") {
             $monedaOrig = "978";
         } else {
             $monedaOrig = "840";
         }
         // INI MOD #7375
         // Limpiamos 0 por delante agregados para pasarlo como parámetro
         $pedido = ltrim($pedido, '0');
         // FIN MOD #7375
         // Inicializamos el valor del status del pedido
         $status = "";
         // Validacion de firma y parámetros
         if ($firma_local === $firma_remota && checkImporte($total) && checkPedidoNum($pedido) && checkFuc($codigo) && checkMoneda($moneda) && checkRespuesta($respuesta) && $tipoTrans == $tipoTransOrig && $codigo == $codigoOrig && intval(strval($terminalOrig)) == intval(strval($terminal))) {
             // Respuesta cumple las validaciones
             $respuesta = intval($respuesta);
             $this->escribirLog($idLog . " - Código de respuesta: " . $respuesta, $logActivo);
             if ($respuesta < 101) {
                 //Mage::log('Redsys: Pago aceptado');
                 $this->escribirLog($idLog . " - Pago aceptado.", $logActivo);
                 //Correo electrónico
                 $correo = Mage::getStoreConfig('payment/redsys/correo', Mage::app()->getStore());
                 $mensaje = Mage::getStoreConfig('payment/redsys/mensaje', Mage::app()->getStore());
                 $nombreComercio = Mage::getStoreConfig('payment/redsys/nombre', Mage::app()->getStore());
                 //Datos del cliente
                 $customer = Mage::getSingleton('customer/session')->getCustomer();
                 if ($correo != "0") {
                     $email_to = $customer->getEmail();
                     $email_subject = "-MAGENTO- Pedido realizado";
                     if (mail($email_to, $email_subject, $mensaje, "From:" . $nombreComercio)) {
                         echo "Correo enviado";
                     } else {
                         echo "No se puedo enviar el correo";
                     }
                 }
                 //Fin de correo
                 //Id pedido
                 $ord = $pedido;
                 $orde = $ord;
                 $this->escribirLog($idLog . " - Order increment id " . $orde, $logActivo);
                 $order = Mage::getModel('sales/order')->loadByIncrementId($orde);
                 $transaction_amount = number_format($order->getBaseGrandTotal(), 2, '', '');
                 $amountOrig = (double) $transaction_amount;
                 if ($amountOrig != $total) {
                     $this->escribirLog($idLog . " -- " . "El importe total no coincide.", $logActivo);
                     //Mage::log('Redsys: Diferente importe');
                     // Diferente importe
                     $state = 'new';
                     $status = 'canceled';
                     $comment = 'Redsys ha actualizado el estado del pedido con el valor "' . $status . '"';
                     $isCustomerNotified = true;
                     $order->setState($state, $status, $comment, $isCustomerNotified);
                     $order->registerCancellation("")->save();
                     $order->save();
                     //$this->_redirect('checkout/onepage/failure');
                     $this->escribirLog($idLog . " -- " . "El pedido con ID de carrito " . $orde . " es inválido.", $logActivo);
                 }
                 try {
                     if (!$order->canInvoice()) {
                         $order->addStatusHistoryComment('Redsys, imposible generar Factura.', false);
                         $order->save();
                     }
                     //START Handle Invoice
                     $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
                     $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
                     $invoice->register();
                     $invoice->getOrder()->setCustomerNoteNotify(true);
                     $invoice->getOrder()->setIsInProcess(true);
                     $order->addStatusHistoryComment('Redsys ha generado la Factura del pedido', false);
                     $transactionSave = Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder());
                     $transactionSave->save();
                     //END Handle Invoice
                     //START Handle Shipment
                     //$shipment = $order->prepareShipment();
                     //$shipment->register();
                     //$order->setIsInProcess(true);
                     //$order->addStatusHistoryComment('Redsys ENVIO.', false);
                     //$transactionSave = Mage::getModel('core/resource_transaction')
                     //	->addObject($shipment)
                     //	->addObject($shipment->getOrder())
                     //	->save();
                     //END Handle Shipment
                     //Email al cliente
                     $order->sendNewOrderEmail();
                     echo "Pedido: {$ord} se ha enviado correctamente\n";
                     //Se actualiza el pedido
                     $state = 'new';
                     $status = 'processing';
                     $comment = 'Redsys ha actualizado el estado del pedido con el valor "' . $status . '"';
                     $isCustomerNotified = true;
                     $order->setState($state, $status, $comment, $isCustomerNotified);
                     $order->save();
                     $this->escribirLog($idLog . " -- " . "El pedido con ID de carrito " . $orderId . " es válido y se ha registrado correctamente.", $logActivo);
                     // INI MOD #7375 Borramos el carrito porque el módulo no lo hacía
                     $session->setQuoteId($order->getQuoteId());
                     $session->getQuote()->setIsActive(false)->save();
                     // FIN MOD #7375
                     //
                     //$this->_redirect('checkout/onepage/success');
                 } catch (Exception $e) {
                     $order->addStatusHistoryComment('Redsys: Exception message: ' . $e->getMessage(), false);
                     $order->save();
                 }
             } else {
                 $this->escribirLog($idLog . " - Pago no aceptado", $logActivo);
                 $ord = $pedido;
                 $orde = $ord;
                 $order = Mage::getModel('sales/order')->loadByIncrementId($orde);
                 $state = 'new';
                 $status = 'canceled';
                 $comment = 'Redsys ha actualizado el estado del pedido con el valor "' . $status . '"';
                 $this->escribirLog($idLog . " - Actualizado el estado del pedido con el valor " . $status, $logActivo);
                 $isCustomerNotified = true;
                 $order->setState($state, $status, $comment, $isCustomerNotified);
                 $order->registerCancellation("")->save();
                 $order->save();
                 //$this->_redirect('checkout/onepage/failure');
             }
         } else {
             $this->escribirLog($idLog . " - Validaciones NO superadas", $logActivo);
             $ord = $pedido;
             $orde = $ord;
             $order = Mage::getModel('sales/order')->loadByIncrementId($orde);
             $state = 'new';
             $status = 'canceled';
             $comment = 'Redsys ha actualizado el estado del pedido con el valor "' . $status . '"';
             $isCustomerNotified = true;
             $order->setState($state, $status, $comment, $isCustomerNotified);
             $order->registerCancellation("")->save();
             $order->save();
             //$this->_redirect('checkout/onepage/failure');
         }
     } else {
         if (!empty($_GET)) {
             //URL OK Y KO
             /** Recoger datos de respuesta * */
             $version = $_GET["Ds_SignatureVersion"];
             $datos = $_GET["Ds_MerchantParameters"];
             $firma_remota = $_GET["Ds_Signature"];
             // Se crea Objeto
             $miObj = new RedsysAPI();
             /** Se decodifican los datos enviados y se carga el array de datos * */
             $decodec = $miObj->decodeMerchantParameters($datos);
             /** Clave * */
             $kc = Mage::getStoreConfig('payment/redsys/clave256', Mage::app()->getStore());
             /** Se calcula la firma * */
             $firma_local = $miObj->createMerchantSignatureNotif($kc, $datos);
             /** Extraer datos de la notificación * */
             $total = $miObj->getParameter('Ds_Amount');
             $pedido = $miObj->getParameter('Ds_Order');
             $codigo = $miObj->getParameter('Ds_MerchantCode');
             $terminal = $miObj->getParameter('Ds_Terminal');
             $moneda = $miObj->getParameter('Ds_Currency');
             $respuesta = $miObj->getParameter('Ds_Response');
             $fecha = $miObj->getParameter('Ds_Date');
             $hora = $miObj->getParameter('Ds_Hour');
             $id_trans = $miObj->getParameter('Ds_AuthorisationCode');
             $tipoTrans = $miObj->getParameter('Ds_TransactionType');
             // Recogemos los datos del comercio
             $codigoOrig = Mage::getStoreConfig('payment/redsys/num', Mage::app()->getStore());
             $terminalOrig = Mage::getStoreConfig('payment/redsys/terminal', Mage::app()->getStore());
             $monedaOrig = Mage::getStoreConfig('payment/redsys/moneda', Mage::app()->getStore());
             $tipoTransOrig = Mage::getStoreConfig('payment/redsys/trans', Mage::app()->getStore());
             // Obtenemos el código ISO del tipo de moneda
             if ($monedaOrig == "0") {
                 $monedaOrig = "978";
             } else {
                 $monedaOrig = "840";
             }
             // INI MOD #7375
             // Limpiamos 0 por delante agregados para pasarlo como parámetro
             $pedido = ltrim($pedido, '0');
             // FIN MOD #7375
             if ($firma_local === $firma_remota && checkImporte($total) && checkPedidoNum($pedido) && checkFuc($codigo) && checkMoneda($moneda) && checkRespuesta($respuesta) && $tipoTrans == $tipoTransOrig && $codigo == $codigoOrig && intval(strval($terminalOrig)) == intval(strval($terminal))) {
                 $respuesta = intval($respuesta);
                 $orde = $pedido;
                 $order = Mage::getModel('sales/order')->loadByIncrementId($orde);
                 if ($respuesta < 101) {
                     $transaction_amount = number_format($order->getBaseGrandTotal(), 2, '', '');
                     $amountOrig = (double) $transaction_amount;
                     if ($amountOrig != $total) {
                         $this->_redirect('checkout/onepage/failure');
                     } else {
                         $this->_redirect('checkout/onepage/success');
                     }
                 } else {
                     if (strval($mantenerPedidoAnteError) == 1) {
                         $_order = new Mage_Sales_Model_Order();
                         $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
                         $_order->loadByIncrementId($orderId);
                         $items = $_order->getAllVisibleItems();
                         $cart = Mage::getSingleton('checkout/cart');
                         foreach ($items as $itemId => $item) {
                             $this->escribirLog($idLog . " - Cargado carrito con " . $item->getName(), $logActivo);
                             $cart->addOrderItem($item);
                         }
                         $cart->save();
                     }
                     $this->_redirect('checkout/onepage/failure');
                 }
             } else {
                 $this->_redirect('checkout/onepage/failure');
             }
         } else {
             echo 'No hay respuesta por parte de Redsys!';
         }
     }
 }
Beispiel #9
0
function build_direct_pay_page_ok()
{
    /*
    	BEGIN shortcode direct_pay_page_ko
    */
    ob_start();
    $options = get_option('direct_pay_settings');
    require_once 'apiRedsys.php';
    $miObj = new RedsysAPI();
    $kc = $options['direct_pay_text_key_sha_256c'];
    $params = $_GET['Ds_MerchantParameters'];
    $new_signature = $miObj->createMerchantSignatureNotif($kc, $params);
    $signature = $_GET['Ds_Signature'];
    $test_signature = 0;
    if ($new_signature == $signature) {
        $test_signature = 1;
    }
    $myOrder = $miObj->getParameter('Ds_Order');
    $myOrder = $myOrder - 1000;
    $post_pendiente = array('ID' => $myOrder, 'post_type' => 'payment', 'post_status' => 'Publish');
    $post_id = wp_update_post($post_pendiente);
    ?>
  

       <?php 
    if ($test_signature == 0) {
        ?>
	    	<p>¡Fallo en la firma!</p>
	   <?php 
    }
    ?>
      
	   <p>El Pago con número <?php 
    echo $myOrder;
    ?>
 ha sido realizado correctamente</p>

	
	<?php 
    $out = ob_get_clean();
    return $out;
}
<html>
<head>
	<meta charset="utf-8">
</head>
	<body>
		
	
<?php 
include "includes/connex.php";
$link = conexio();
include 'pasarela/apiRedsys.php';
// Se crea Objeto
$miObj = new RedsysAPI();
if (!empty($_POST)) {
    //URL DE RESP. ONLINE
    $version = $_POST["Ds_SignatureVersion"];
    $datos = $_POST["Ds_MerchantParameters"];
    $signatureRecibida = $_POST["Ds_Signature"];
    echo "<p>" . $version . "<br>" . $datos . "<br>" . $signatureRecibida . "<p>";
    $decodec = $miObj->decodeMerchantParameters($datos);
    $code = '311027544';
    //$kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'; //Clave recuperada de CANALES
    $kc = 'Fog01f8CgEcUGuCQT6bX5P34MsIdBJXg';
    $firma = $miObj->createMerchantSignatureNotif($kc, $datos);
    // if (true){
    if ($firma === $signatureRecibida) {
        //obtener response de la operación
        $codigoRespuesta = $miObj->getParameter("Ds_Response");
        $total = $miObj->getParameter("Ds_Amount");
        $total = intval($total) / 100;
        $n_pedido = $miObj->getParameter("Ds_Order");
Beispiel #11
0
 public function handlePaymentNotification()
 {
     $errors = array("101" => "Tarjeta caducada", "102" => "Tarjeta en excepción transitoria o bajo sospecha de fraude", "106" => "Intentos de PIN excedidos", "125" => "Tarjeta no efectiva", "129" => "Código de seguridad (CVV2/CVC2) incorrecto", "180" => "Tarjeta ajena al servicio", "184" => "Error en la autenticación del titular", "190" => "Denegación del emisor sin especificar motivo", "191" => "Fecha de caducidad errónea", "202" => "Tarjeta en excepción transitoria o bajo sospecha de fraude con retirada de tarjeta", "904" => "Comercio no registrado en FUC", "909" => "Error de sistema", "913" => "Pedido repetido", "944" => "Sesión Incorrecta", "950" => "Operación de devolución no permitida", "912" => "Emisor no disponible", "9912" => "Emisor no disponible", "9064" => "Número de posiciones de la tarjeta incorrecto", "9078" => "Tipo de operación no permitida para esa tarjeta", "9093" => "Tarjeta no existente", "9094" => "Rechazo servidores internacionales", "9104" => "Comercio con “titular seguro” y titular sin clave de compra segura", "9218" => "El comercio no permite op. seguras por entrada /operaciones", "9253" => "Tarjeta no cumple el check-digit", "9256" => "El comercio no puede realizar preautorizaciones", "9257" => "Esta tarjeta no permite operativa de preautorizaciones", "9261" => "Operación detenida por superar el control de restricciones en la entrada al SIS", "9915" => "A petición del usuario se ha cancelado el pago", "9929" => "Anulación de autorización en diferido realizada por el comercio", "9997" => "Se está procesando otra transacción en SIS con la misma tarjeta", "9998" => "Operación en proceso de solicitud de datos de tarjeta", "9999" => "Operación que ha sido redirigida al emisor a autenticar");
     $module = self::retrieve('md', 'String', 'GET', false);
     $qfKey = self::retrieve('qfKey', 'String', 'GET', false);
     $miObj = new RedsysAPI();
     $response = array();
     $response["version"] = $_POST["Ds_SignatureVersion"];
     $response["parameters"] = $_POST["Ds_MerchantParameters"];
     $response["signature"] = $_POST["Ds_Signature"];
     $decodecResponseJson = $miObj->decodeMerchantParameters($response["parameters"]);
     $decodecResponse = json_decode($decodecResponseJson);
     $firma = $miObj->createMerchantSignatureNotif($this->_paymentProcessor["password"], $response["parameters"]);
     // Validations
     if ($decodecResponse->Ds_MerchantCode != $this->_paymentProcessor["user_name"]) {
         CRM_Core_Error::debug_log_message("Redsys Response param Ds_MerchantCode incorrect");
         return false;
     }
     // Contribution exists and is valid
     $contribution = new CRM_Contribute_BAO_Contribution();
     $contribution->id = self::trimAmount($decodecResponse->Ds_Order);
     if (!$contribution->find(TRUE)) {
         CRM_Core_Error::debug_log_message("Could not find contribution record: {$contribution->id} in IPN request: " . print_r($params, TRUE));
         echo "Failure: Could not find contribution record for {$contribution->id}<p>";
         return FALSE;
     }
     if ($firma === $response["signature"]) {
         switch ($module) {
             case 'contribute':
                 if ($decodecResponse->Ds_Response == self::REDSYS_RESPONSE_CODE_ACCEPTED) {
                     $query = "UPDATE civicrm_contribution SET trxn_id='" . $decodecResponse->Ds_AuthorisationCode . "', contribution_status_id=1 where id='" . self::trimAmount($decodecResponse->Ds_Order) . "'";
                     CRM_Core_DAO::executeQuery($query);
                 } else {
                     $error = self::trimAmount($decodecResponse->Ds_Response);
                     if (array_key_exists($error, $errors)) {
                         $error = $errors[$error];
                     }
                     $cancel_date = CRM_Utils_Date::currentDBDate();
                     $query = "UPDATE civicrm_contribution SET contribution_status_id=3, cancel_reason = '" . $error . "' , cancel_date = '" . $cancel_date . "' where id='" . self::trimAmount($decodecResponse->Ds_Order) . "'";
                     CRM_Core_DAO::executeQuery($query);
                 }
                 break;
             case 'event':
                 if ($decodecResponse->Ds_Response == self::REDSYS_RESPONSE_CODE_ACCEPTED) {
                     $query = "UPDATE civicrm_contribution SET trxn_id='" . $decodecResponse->Ds_AuthorisationCode . "', contribution_status_id=1 where id='" . self::trimAmount($decodecResponse->Ds_Order) . "'";
                     CRM_Core_DAO::executeQuery($query);
                 } else {
                     $error = self::trimAmount($decodecResponse->Ds_Response);
                     if (array_key_exists($error, $errors)) {
                         $error = $errors[$error];
                     }
                     $cancel_date = CRM_Utils_Date::currentDBDate();
                     $query = "UPDATE civicrm_contribution SET contribution_status_id=3, cancel_reason = '" . $error . "' , cancel_date = '" . $cancel_date . "' where id='" . self::trimAmount($decodecResponse->Ds_Order) . "'";
                     CRM_Core_DAO::executeQuery($query);
                 }
                 break;
             default:
                 require_once 'CRM/Core/Error.php';
                 CRM_Core_Error::debug_log_message("Could not get module name from request url");
         }
     }
 }
Beispiel #12
0
 public function okAction()
 {
     // PRODUCTION
     // print_r($_POST);
     // exit;
     if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == "http://jguasch.esy.es/redsys/lacaixaOK.php") {
         if (!empty($_POST)) {
             //URL DE RESP. ONLINE
             $miObj = new RedsysAPI();
             $version = $_POST["Ds_SignatureVersion"];
             $datos = $_POST["Ds_MerchantParameters"];
             $signatureRecibida = $_POST["Ds_Signature"];
             $decodec = $miObj->decodeMerchantParameters($datos);
             $kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';
             //Clave recuperada de CANALES
             $firma = $miObj->createMerchantSignatureNotif($kc, $datos);
             if ($firma != $signatureRecibida) {
                 flash('msg', 'El servidor no responde correctamente', 'Error', 'error');
                 header('location: /');
                 return;
             }
         }
         try {
             $hash_compra = md5(uniqid(time()));
             $id_compra = $this->client->save(array("hash_compra" => $hash_compra, "estado" => "pagado", "username" => self::getSession("username")), "compras");
             $productos = $this->_generate_products();
             // Guardar compras por productos
             foreach ($productos as $id => $pro) {
                 $this->client->save(array("idcompra" => $id_compra, "idproducto" => $pro['idproducto'], "cantidad" => $pro['q'], "idtalla" => $pro['size'], "idcolor" => $pro['color'], "username" => self::getSession("username")), "compras_productos_tallas_colores");
             }
             $client = $this->client->toArray(self::getSession('username'));
             if (!empty($productos) && !empty($client)) {
                 generate_facture($productos, $client);
             }
             return header('location: /');
         } catch (Exception $e) {
             $error = $e->getMessage();
             echo $error;
             exit;
             // return require VIEWS. 'error/500.php';
         }
         return;
     }
     $error = "El host de peticion debe ser -> http://jguasch.esy.es/redsys/lacaixaOK.php";
     require VIEWS . 'error/401.php';
     return;
 }
Beispiel #13
0
*   (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev    *
*                                                                          *
* This  is  commercial  software,  only  users  who have purchased a valid *
* license  and  accept  to the terms of the  License Agreement can install *
* and use this program.                                                    *
*                                                                          *
****************************************************************************
* PLEASE READ THE FULL TEXT  OF THE SOFTWARE  LICENSE   AGREEMENT  IN  THE *
* "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE.            *
****************************************************************************/
if (!defined('BOOTSTRAP')) {
    die('Access denied');
}
use Tygh\Registry;
require_once Registry::get('config.dir.payments') . 'servired_files/apiRedsys.php';
$redsys_api = new RedsysAPI();
$response_mess = array("0000" => "Transaction authorized for payments and pre-authorizations", "0099" => "Transaction authorized for payments and pre-authorizations", "0900" => "Transaction authorized for refunds and confirmations", "0101" => "Card expired", "0102" => "Card temporarily suspended or under suspicion of fraud", "0104" => "Transaction not allowed for the card or terminal", "0116" => "Insufficient funds", "0118" => "Card not registered", "0129" => "Security code (CVV2/CVC2) incorrect", "0180" => "Card not recognized", "0184" => "Cardholder authentication failed", "0190" => "Transaction declined without explanation", "0191" => "Wrong expiration date", "0202" => "Card temporarily suspended or under suspicion of fraud with confiscation order", "0912" => "Issuing bank not available", "9912" => "Issuing bank not available");
if (defined('PAYMENT_NOTIFICATION')) {
    $order_id = !empty($_REQUEST['order_id']) ? substr($_REQUEST['order_id'], 0, -2) : '';
    if ($mode == 'notify') {
        fn_order_placement_routines('route', $order_id, false);
    } elseif ($mode == 'result') {
        // Get the processor data
        $payment_id = db_get_field("SELECT payment_id FROM ?:orders WHERE order_id = ?i", $order_id);
        $processor_data = fn_get_payment_method_data($payment_id);
        $order_info = fn_get_order_info($order_id);
        $currency = $processor_data['processor_params']['currency'];
        $merchant = $processor_data['processor_params']['merchant_id'];
        $terminal = $processor_data['processor_params']['terminal'];
        $clave = $processor_data['processor_params']['clave'];
        if (strlen($order_id) > 6) {
Beispiel #14
0
            function check_rds_response()
            {
                $this->idLog = generateIdLog();
                $logActivo = $this->activar_log;
                if (!empty($_REQUEST)) {
                    if (!empty($_POST)) {
                        //URL DE RESP. ONLINE
                        /** Recoger datos de respuesta **/
                        $version = $_POST["Ds_SignatureVersion"];
                        $datos = $_POST["Ds_MerchantParameters"];
                        $firma_remota = $_POST["Ds_Signature"];
                        // Se crea Objeto
                        $miObj = new RedsysAPI();
                        /** Se decodifican los datos enviados y se carga el array de datos **/
                        $decodec = $miObj->decodeMerchantParameters($datos);
                        /** Clave **/
                        $kc = $this->get_option('clave256');
                        /** Se calcula la firma **/
                        $firma_local = $miObj->createMerchantSignatureNotif($kc, $datos);
                        /** Extraer datos de la notificación **/
                        $total = $miObj->getParameter('Ds_Amount');
                        $pedido = $miObj->getParameter('Ds_Order');
                        $codigo = $miObj->getParameter('Ds_MerchantCode');
                        $moneda = $miObj->getParameter('Ds_Currency');
                        $respuesta = $miObj->getParameter('Ds_Response');
                        $id_trans = $miObj->getParameter('Ds_AuthorisationCode');
                        $pedido = intval($pedido);
                        if ($firma_local === $firma_remota && checkRespuesta($respuesta) && checkMoneda($moneda) && checkFuc($codigo) && checkPedidoNum($pedido) && checkImporte($total)) {
                            // Formatear variables
                            $respuesta = intval($respuesta);
                            if ($respuesta < 101 && checkAutCode($id_trans)) {
                                $order = new WC_Order($pedido);
                                $order->update_status('processing', __('Awaiting REDSYS payment', 'woocommerce'));
                                //$this->log->add( 'redsys', 'Operación finalizada. PEDIDO ACEPTADO ');
                                $this->escribirLog($this->idLog . " -- " . "Operación finalizada. PEDIDO ACEPTADO", $logActivo);
                                $order->reduce_order_stock();
                                // Remove cart
                                WC()->cart->empty_cart();
                                //wp_redirect(WC()->plugin_url()."/includes/gateways/redsys/pages/sucess.php?pedido=".$pedido);
                            } else {
                                $order = new WC_Order($pedido);
                                $order->update_status('cancelled', __('Awaiting redsys payment', 'woocommerce'));
                                WC()->cart->empty_cart();
                                //$this->log->add( 'redsys', 'Operación finalizada. PEDIDO CANCELADO ');
                                $this->escribirLog($this->idLog . " -- " . "Operación finalizada. PEDIDO CANCELADO", $logActivo);
                                //wp_redirect(WC()->plugin_url()."/includes/gateways/redsys/pages/failure.php?pedido=".$pedido);
                            }
                        } else {
                            // Fallo de firma o algún otro parámetro
                            // Se vacía siempre el carro por motivos de seguridad
                            $order = new WC_Order($pedido);
                            $order->update_status('cancelled', __('Awaiting REDSYS payment', 'woocommerce'));
                            WC()->cart->empty_cart();
                            //$this->log->add( 'redsys', 'Operación finalizada. PEDIDO CANCELADO ');
                            $this->escribirLog($this->idLog . " -- " . "Error de firma. Operación finalizada. PEDIDO CANCELADO", $logActivo);
                            //wp_redirect(WC()->plugin_url()."/includes/gateways/redsys/pages/failure.php?pedido=".$pedido);
                        }
                    } else {
                        wp_die('<img src="' . plugins_url() . '/redsys/pages/assets/images/Redsys.png" alt="Redys" height="70" width="242"/><br>	
						<img src="' . plugins_url() . '/redsys/pages/assets/images/cross.png" alt="Desactivado" title="Desactivado" />
						<b>REDSYS</b>: Fallo en el proceso de pago.<br>Su pedido ha sido cancelado.');
                    }
                } else {
                    wp_die('<img src="' . plugins_url() . '/redsys/pages/assets/images/Redsys.png" alt="Redys" height="70" width="242"/><br>	
						<img src="' . plugins_url() . '/redsys/pages/assets/images/cross.png" alt="Desactivado" title="Desactivado" />
						<b>REDSYS</b>: Fallo en el proceso de pago.<br>Su pedido ha sido cancelado.');
                }
            }
<html> 
<body> 
<?php 
include 'apiRedsys.php';
// Se crea Objeto
$miObj = new RedsysAPI();
if (!empty($_POST)) {
    //URL DE RESP. ONLINE
    $version = $_POST["Ds_SignatureVersion"];
    $datos = $_POST["Ds_MerchantParameters"];
    $signatureRecibida = $_POST["Ds_Signature"];
    $decodec = $miObj->decodeMerchantParameters($datos);
    $code = '311027544';
    //$kc = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'; //Clave recuperada de CANALES
    $kc = 'Fog01f8CgEcUGuCQT6bX5P34MsIdBJXg';
    $firma = $miObj->createMerchantSignatureNotif($kc, $datos);
    if ($firma === $signatureRecibida) {
        //obtener response de la operación
        $codigoRespuesta = $miObj->getParameter("Ds_Response");
        $informacion = $miObj->getParameter("Ds_MerchantData");
        //$mensaje =
        echo "FIRMA OK";
        mail('*****@*****.**', 'firma ok', $codigoRespuesta . "<br>" . $informacion);
        ?>
						<?php 
    } else {
        echo "FIRMA KO";
        mail('*****@*****.**', 'firma KO', $codigoRespuesta . "<br>" . $informacion);
    }
}
//mail('*****@*****.**', 'Mi título', 'mensaje sin nada');
Beispiel #16
0
 /**
  * Comprueba que la notificación de pago recibida es correcta y auténtica
  *
  * @param array $post_data Datos POST incluidos con la notificación
  *
  * @throws Payment_Exception
  * @return bool
  */
 public function validate_notification($post_data = null, &$fee = 0)
 {
     if (!isset($post_data)) {
         $post_data = $_POST;
     }
     $redsys = new RedsysAPI();
     $parameters = $post_data['Ds_MerchantParameters'];
     $redsys->decodeMerchantParameters($parameters);
     //Comprobar firma
     $received_signature = $post_data['Ds_Signature'];
     $signature = $redsys->createMerchantSignatureNotif($this->secret_key, $parameters);
     if ($signature !== $received_signature) {
         throw new Payment_Exception("Invalid signature, received '{$received_signature}', expected '{$signature}'");
     }
     //Comprobar respuesta
     /*
      * 0000 a 0099	Transacción autorizada para pagos y preautorizaciones
      * 0900	Transacción autorizada para devoluciones y confirmaciones
      *
      */
     $response = $redsys->getParameter('Ds_Response');
     if ($response >= 101 && $response != 900) {
         $error_codes = self::error_codes();
         $description = isset($error_codes[$response]) ? $error_codes[$response] : 'Unknown response code';
         throw new Payment_Exception("Invalid Ds_Response '{$response}' ({$description})");
     }
     //Calcular comisión
     if (is_numeric($this->fee)) {
         $fee = $this->amount * $this->fee;
     } else {
         call_user_func($this->fee, $response);
     }
     return true;
 }