Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Joomla »

pasarela que va bien en local pero no en internet

Estas en el tema de pasarela que va bien en local pero no en internet en el foro de Joomla en Foros del Web. Hola a todos, tengo un problema curioso. Tengo instalada una tienda en local a la cual le he configurado una pasarela de pago y funciona ...
  #1 (permalink)  
Antiguo 28/11/2011, 08:15
 
Fecha de Ingreso: mayo-2005
Ubicación: Castellón
Mensajes: 321
Antigüedad: 18 años, 11 meses
Puntos: 0
pasarela que va bien en local pero no en internet

Hola a todos, tengo un problema curioso. Tengo instalada una tienda en local a la cual le he configurado una pasarela de pago y funciona perfectamente, me genera bien la firma y me engancha con el tpv. Pero ahora que he subido la tienda a internet cuando le doy a pagar me dice que la firma no es correcta... Los datos que tengo tanto en local como en internet son los mismos, apuntan al mismo sitio... todo, pero por lo que sea no me genera bien la firma desde internet. el algoritmo sh1 para generar la firma es una función que está también escrita en la configuración de la pasarela (tanto en local como en internet). Si a alguien le ha pasado o sabe como ayudarme se lo agradecería.

Este es el código que utilizo

Cita:
<?PHP
// Valores constantes a modificar segun el comercio

$url_tpvv='https://tpv01.cajarural.com/nuevo_tpv/tpv/jsp/tpvjp_validaComercio.jsp'; // URL para entorno real. Para URL de entorno
$fuc='mi clave de comercio'; // Clave de comercio proporcionada
$nombre='mi nombre de comercio'; // Nombre del comercio que sale en la transaccion.
$cip='mi codigo de comercio'; // Codigo de comercio proporcionado
$idterminal='001'; // Terminal usado.
$moneda='978'; // 978=Euros.
$tipoOperacion='0'; // Tipo de operacion. 0=Autorizacion.


?>

<?PHP
// Calculo del hash para firmar los datos.

$fecha = date("ymdHis");
$numpedido = '000'.$db->f("order_id");
$importe=$db->f("order_total")*100;
$message = $fecha.$cip.$importe.$moneda.$numpedido;// formula sha-1 para caja rural
$firma = sha_1($message);
$url='miurl';
$urlnotification=JURI::base().'index.php?page=acco unt.order_details&order_id='.$db->f("order_id").'&option=com_virtuemart&Itemid=16 ';
?>

<form action="<?php echo $url_tpvv?>" method="post">


<input type="hidden" name="importe" value="<?php echo $importe?>" />
<input type="hidden" name="numpedido" value="<?php echo $numpedido?>" />
<input type="hidden" name="moneda" value="<?php echo $moneda?>" />
<input type="hidden" name="fuc" value="<?php echo $fuc?>" />
<input type="hidden" name="idioma" value="0" />
<input type="hidden" name="idterminal" value="<?php echo $idterminal?>" />
<input type="hidden" name="fecha" value="<?php echo $fecha?> " />
<input type="hidden" name="firma" value="<?php echo $firma ?>" />
<input type="image" name="imageField" src="/images/stories/logo_caixa.jpg" value="PAGAR AHORA">
</form>

<?php



function sha1_str2blks_SHA1($str)
{
$strlen_str = strlen($str);

$nblk = (($strlen_str + 8) >> 6) + 1;

for ($i=0; $i < $nblk * 16; $i++) $blks[$i] = 0;

for ($i=0; $i < $strlen_str; $i++)
{
$blks[$i >> 2] |= ord(substr($str, $i, 1)) << (24 - ($i % 4) * 8);
}

$blks[$i >> 2] |= 0x80 << (24 - ($i % 4) * 8);
$blks[$nblk * 16 - 1] = $strlen_str * 8;

return $blks;
}

function sha1_safe_add($x, $y)
{
$lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
$msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);

return ($msw << 16) | ($lsw & 0xFFFF);
}

function sha1_rol($num, $cnt)
{
return ($num << $cnt) | sha1_zeroFill($num, 32 - $cnt);
}

function sha1_zeroFill($a, $b)
{
$bin = decbin($a);

$strlen_bin = strlen($bin);

$bin = $strlen_bin < $b ? 0 : substr($bin, 0, $strlen_bin - $b);

for ($i=0; $i < $b; $i++) $bin = '0'.$bin;

return bindec($bin);
}

function sha1_ft($t, $b, $c, $d)
{
if ($t < 20) return ($b & $c) | ((~$b) & $d);
if ($t < 40) return $b ^ $c ^ $d;
if ($t < 60) return ($b & $c) | ($b & $d) | ($c & $d);

return $b ^ $c ^ $d;
}

function sha1_kt($t)
{
if ($t < 20) return 1518500249;
if ($t < 40) return 1859775393;
if ($t < 60) return -1894007588;

return -899497514;
}

function sha_1($str, $raw_output=FALSE)
{
if ( $raw_output === TRUE ) return pack('H*', sha_1($str, FALSE));

$x = sha1_str2blks_SHA1($str);
$a = 1732584193;
$b = -271733879;
$c = -1732584194;
$d = 271733878;
$e = -1009589776;

$x_count = count($x);

for ($i = 0; $i < $x_count; $i += 16)
{
$olda = $a;
$oldb = $b;
$oldc = $c;
$oldd = $d;
$olde = $e;

for ($j = 0; $j < 80; $j++)
{
$w[$j] = ($j < 16) ? $x[$i + $j] : sha1_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);

$t = sha1_safe_add(sha1_safe_add(sha1_rol($a, 5), sha1_ft($j, $b, $c, $d)), sha1_safe_add(sha1_safe_add($e, $w[$j]), sha1_kt($j)));
$e = $d;
$d = $c;
$c = sha1_rol($b, 30);
$b = $a;
$a = $t;
}

$a = sha1_safe_add($a, $olda);
$b = sha1_safe_add($b, $oldb);
$c = sha1_safe_add($c, $oldc);
$d = sha1_safe_add($d, $oldd);
$e = sha1_safe_add($e, $olde);
}

return sprintf('%08x%08x%08x%08x%08x', $a, $b, $c, $d, $e);
}
?>
Un saludo
  #2 (permalink)  
Antiguo 29/11/2011, 02:22
 
Fecha de Ingreso: mayo-2005
Ubicación: Castellón
Mensajes: 321
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: pasarela que va bien en local pero no en internet

Bueno ya lo he solucionado, no se porque en internet cuando me generaba la firma me la generaba de 80 caracteres, cuando debía de ser de 40 (como cuando me la generaba en local), así que lo que he hecho es cambiarle la forma en la que se generaba la firma, cambiándole la función sha_1.

Un saludo

Etiquetas: internet, local, pasarela
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:52.