ccc

Pasarela redsys

require('librerias/apiRedsys.php');

$_SESSION['importe'] = str_replace(",",".", $_SESSION['importe']);
$db->query("SELECT COUNT(*) AS total FROM nw_pagos");
$db->next_record();
$num_pedido = str_pad($db->Record['total'] + 1,11,0,STR_PAD_LEFT);

...

$importe = $_SESSION['importe'] * 100; // * Las dos últimas posiciones se consideran decimales
$moneda = '978'; // * Euros
$codigo_comercio = '343264313'; // *

$esPrueba = false;
if ($esPrueba) {
  $url_tpv = 'https://sis-t.redsys.es:25443/sis/realizarPago'; // * Pruebas
  $url_notificar = 'http://www.midominio.com/test/codigo/notificar_tpv.php'; // La url NO PUEDE SER localhost, tiene q ser la del servidor
  $url_ok = 'http://wwwserver/midominio.com/proceso-compra-confirmacion.php?num_pedido='.$num_pedido; // * URL para la notificación de éxito
  $url_ko = 'http://wwwserver/midominio.com/proceso-compra-confirmacion.php?error=1&num_pedido='.$num_pedido; // * URL para la notificación de error
}
else {
  $url_tpv = 'https://sis-t.redsys.es:25443/sis/realizarPago'; // * Pruebas
  // $url_tpv = 'https://sis.redsys.es/sis/realizarPago'; // * Real
  $url_notificar = 'http://www.midominio.com/test/codigo/notificar_tpv.php'; // * URL para la notificación online de exito
  $url_ok = 'http://www.midominio.com/proceso-compra-confirmacion.php?num_pedido='.$num_pedido; // * URL para la notificación de éxito
  $url_ko = 'http://www.midominio.com/proceso-compra-confirmacion.php?error=1&num_pedido='.$num_pedido; // * URL para la notificación de error
}
$terminal = '001'; // *
$tipo_transaccion = '0'; // * Autorización
$clave = 'xxxxjrUOBfKmC576ILgskD5srU870gJ7'; // * Autorización prueba
// $clave = 'xxxxhgG81GQD+/sNd5xjxaQVBIbNJ1dt'; // * Autorización real
$nombre_comercio = 'midominio.com'; // Nombre del comercio
$descripcion_producto = 'Pedido midominio.com'; // (Máx 125) Se mostrará al titular en la pantalla de confirmación de la compra.

$fh_actual = date('Y-m-d H:i:s');
$sql = "insert into pagos(nif, fecha, importe, localizador, estado) values ('".$_SESSION["id_acceso"]."','".$fh_actual."','".$_SESSION['importe']."','".$num_pedido."','Pendiente')";
$db1->query($sql);
           

// Instanciamos el objeto
$miTPV = new RedsysAPI;
// Guardamos los parámetros
$miTPV->setParameter("DS_MERCHANT_AMOUNT", $importe);
$miTPV->setParameter("DS_MERCHANT_ORDER", $num_pedido);
$miTPV->setParameter("DS_MERCHANT_MERCHANTCODE", $codigo_comercio);
$miTPV->setParameter("DS_MERCHANT_CURRENCY", $moneda);
$miTPV->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $tipo_transaccion);
$miTPV->setParameter("DS_MERCHANT_TERMINAL", $terminal);
$miTPV->setParameter("DS_MERCHANT_MERCHANTURL", $url_notificar);
$miTPV->setParameter("DS_MERCHANT_URLOK", $url_ok);
$miTPV->setParameter("DS_MERCHANT_URLKO", $url_ko);
$miTPV->setParameter("DS_MERCHANT_PRODUCTDESCRIPTION", $descripcion_producto);
$miTPV->setParameter("DS_MERCHANT_TITULAR", $nombre_cliente);

// Calculamos el parámetro Ds_MerchantParameters
$params = $miTPV->createMerchantParameters();
// Calculamos el parámetro Ds_Signature
$firma = $miTPV->createMerchantSignature($clave);
// $importe = floatval($_SESSION['importe']);
?>
<!-- esto es solo para ver en el código fuente lo que se manda-->
<input type="hidden" name="importeH" value="<?=$importe;?>">
<input type="hidden" name="numpedidoH" value="<?=$num_pedido;?>">


<form action ="<?=$url_tpv?>" method="POST" id="miform">
  <input type="hidden" name="Ds_SignatureVersion" value="HMAC_SHA256_V1" />
  <input type="hidden" name="Ds_MerchantParameters" value="<?=$params?>" />
  <input type="hidden" name="Ds_Signature" value="<?=$firma?>" />
  <input type="submit" value="Realizar pago" style="margin:20px;font-size:25px;padding:10px;background-color:darkgreen;color:#FFF;">
</form>

Luego en el fichero notificar_tpv.php:
include_once('../../librerias/apiRedsys.php');
$miTPV = new RedsysAPI;
$clave = 'xxxxjrUOBfKmC576ILgskD5srU870gJ7'; // * Autorización prueba
//$clave = 'xxxxhgG81GQD+/sNd5xjxaQVBIbNJ1dt'; // * Autorización real

$firma_correcta = ($_REQUEST['Ds_Signature'] == $miTPV->createMerchantSignatureNotif($clave, $_REQUEST['Ds_MerchantParameters']));
$resultado = (int) $miTPV->getParameter('Ds_Response');
$codaprobacion = $miTPV->getParameter('Ds_AuthorisationCode');
$order = (int) $miTPV->getParameter('Ds_Order');

$order = str_pad($order,11,0,STR_PAD_LEFT);

$fp = fopen("LOG_tpv.txt", "w+");
if (($resultado == 0) && $firma_correcta) {
    $sql = "update pagos set estado ='PAGADO' where localizador = '".$order."'";
    $db->query($sql);
    fwrite($fp, "El pedido ".$order." ha sido Pagado".PHP_EOL);
}
fclose($fp);

Para probar con tarjetas falsas de pruebas:
https://www.palbin.com/customer/portal/articles/1507580-Probar-TPV-Redsys-instrucciones-y-tarjetas-de-prueba-
Listado de todos los códigos de errores al enviarlo a la pasarela:
https://dwalins.com/2014/codigo-de-respuesta-de-sermepa-redsys/

No hay comentarios:

Publicar un comentario