Jump to content

Error en la firma enviada + SHA1 Completo VS Completo y Ampliado


id-carlosh

Recommended Posts

Hola,

usando módulo servired, justo al hacer clic sobre modo de pago servired, accede a esta url:

https://sis.sermepa.es/sis/realizarPago

y me dá este error:

"Error en datos enviados. Contacte con su comercio."

Ahora la información que recibo desde Cajamar, sobre este error, me dicen lo siguiente:

"Con relación a su consulta, le informamos de que este error corresponde efectivamente a "error en la firma enviada" Nuestros terminales están configurados con la firma SHA1 Completo y algunos comercios, suponemos que también es el caso de este comercio, nos solicitan el cambio de firma a SHA1 Completo y Ampliado. No obstante la configuración de ambas firmas se realiza de la manera que le explicamos a continuación, si desea que le modifiquemos la firma a SHA1 Completo y ampliado solo debe solicitárnoslo a través de [email protected]



Sha 1 completo, la firma la tiene configurada para que la calcule así:



"message = amount + order + merchant_code + currency + Clave_encript;"



Si la quiere Sha 1 completo ampliado, deberá solicitárnoslo y deberá configurar la firma así:



"message = amount + order + merchant_code + currency + transactiontype + merchanturl + Clave_encript;""

OK, no entiendo abosultamente NADA que significa todo esto.

POR FAVOR, ¿alguno podría ayudarme con esto? ¿POR FAVOR?

Os juro que llevo intentando solucionar esto más de un mes, buscando por todo este foro e internet y no he encontrado aún nadie que me aclare esto.

Muchas gracias.

Link to comment
Share on other sites

Hola.
Ese mismo problema lo está teniendo un cliente del software de comercio electrónico de Arsys. Tienes que solicitar a Cajamar que cambie la configuración de su codificación para que sea compatible (Sha 1 completo ampliado).

Por otro lado, me gustaría saber dónde has conseguido el módulo de TPV para Prestashop, porque estamos detrás de instalarlo.

Un saludo,
Víctor

Link to comment
Share on other sites

  • 4 months later...

No creo que el error se deba a tener activado la "firma a SHA1 Completo y Ampliado", ya que yo las tengo activadas y NO me funcionan con el PRESTASHOP, en cambio SÍ QUE me funcionan con el Joomla+Virtuemart.

Por eso no se a qué se debe el error, NO logro solucionarlo. He probado el módulo de "La Caixa", que muchos dicen que funciona, a mí tampoco; he probado el módulo de servired y nada de nada, siempre me da el mismo error final, donde indica que " Error en datos enviados. Contacte con su comercio".

Si alguien conoce la solución agradecería su ayuda.

Un saludo.

Link to comment
Share on other sites

  • 5 months later...
Hola,

usando módulo servired, justo al hacer clic sobre modo de pago servired, accede a esta url:

https://sis.sermepa.es/sis/realizarPago

y me dá este error:

"Error en datos enviados. Contacte con su comercio."

Ahora la información que recibo desde Cajamar, sobre este error, me dicen lo siguiente:

"Con relación a su consulta, le informamos de que este error corresponde efectivamente a "error en la firma enviada" Nuestros terminales están configurados con la firma SHA1 Completo y algunos comercios, suponemos que también es el caso de este comercio, nos solicitan el cambio de firma a SHA1 Completo y Ampliado. No obstante la configuración de ambas firmas se realiza de la manera que le explicamos a continuación, si desea que le modifiquemos la firma a SHA1 Completo y ampliado solo debe solicitárnoslo a través de [email protected]



Sha 1 completo, la firma la tiene configurada para que la calcule así:



"message = amount + order + merchant_code + currency + Clave_encript;"



Si la quiere Sha 1 completo ampliado, deberá solicitárnoslo y deberá configurar la firma así:



"message = amount + order + merchant_code + currency + transactiontype + merchanturl + Clave_encript;""

OK, no entiendo abosultamente NADA que significa todo esto.

POR FAVOR, ¿alguno podría ayudarme con esto? ¿POR FAVOR?

Os juro que llevo intentando solucionar esto más de un mes, buscando por todo este foro e internet y no he encontrado aún nadie que me aclare esto.

Muchas gracias.


He encontrado una Solucion:

En el Modulo ServiRed 0.7v4 que dejo Adjunto. a partir de la linea 283 se cita el orden que menciona la respuesta que te dio el servicio tecnico, observaras que esta ordenada para SHA1 Completo y Ampliado, solo tienes de borrar la parte de la linea como te muestro en la imagen porque por defecto como bien dicen el sitema el servired lo tiene configurado mediante SHA1 Completo y el Modulo esta configurado para ser Ampliado.

Otra forma es que les ordenes activarte el Sistema SHA1 Completo y Ampliado, tu eliges.

PD: Les dejo el archivo sservired.php modificado por mi, solo tienen de comentar o no la linea que necesiten según su la configuración de su banco, en este archivo esta activada por defecto la Obcion de ' SHA1 Completo'.

Modulo Pago - servired 07 v4.zip

36481_mpmzNTWFEtgBJRLbRUsx_t

servired.php

Link to comment
Share on other sites

Si al enviar el formulario de pago que ejecuta en
remoto (su tienda) a la aplicación TPV Virtual aparece el siguiente mensaje de error:
TRANSACCION DENEGADA: ERROR EN DATOS ENVIADOS. CONTACTE CON SU COMERCIO;
Implicará que alguno de los parámetros de los campos enviados es erróneo.
Como está utilizando la urls
https://sis.sermepa.es/sis/realizarPago
Es sencillo localizar el campo erróneo, para ello deberá ver el código fuente de la página de error y buscar, entre el texto HTML, la cadena —SIS .
El valor numérico xxxx adjunto a la
instrucción Este valor numrico lleva un código de error y una definición establecida por TVP :
ejemplos:
SIS0008 significa que el campo Ds_Merchant_MerchantCode posee un valor vacio

SIS0009 significa que el campo Ds_Merchant_MerchantCode posee un Error de formato
Revise el código HTML resultante de la pagina de error, luego coloque aquí el código saludos!!
PD: voy a ver el modulo post por Petaspam y analizar el código rápidamente y ver qué sucede con el mismo.
8-/

Link to comment
Share on other sites

Bien el modulo post por Petaspam, no sirve. Es un modulo que anda dando vueltas desde los principios de Pretashop.
Esta programado muy de los pelos, además confunde la implementación de las variables y entorno para el envío de información al el tvp, puede que haciendo alguna correcciones se pueda lograr que el TVP genere la pagina de pago, sin embargo no lo recomiendo, acontinuación coloco una breve lista de los errores que vi a la ligera en el modulo en cuestión:

1- La firma SHA-1 está utilizando strtoupper esto lo que hace es pasar toda la cadena a mayúsculas, en principio ese es un error. Mirar archivo servired.php
Debería hacerse así:

$mensaje = $cantidad . $numpedido . $codigo .'978'.'0'.$urltienda . $clave;
$firma = sha1($mensaje);

2- las urls de respuestas estan equivocadas.
Ds_Merchant_MerchantURL :
Cambiar todo este código en servired.php:

$ssl = Tools::getValue('ssl', $this->ssl);
if ($ssl=='no')
$urltienda = 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/servired/respuesta_tpv.php';
elseif($ssl=='si')
$urltienda = 'https://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/servired/respuesta_tpv.php';
else
$urltienda = 'ninguna';


Por esto :

$urltienda = 'https://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/servired/respuesta_tpv.php';


Tienen que tener cuidado con este tipo de módulos, por qué?
Pues las personas mal intencionadas que conozcan el este código pueden hacer mucho daño con el en sus tiendas, el modulo esta recibiendo parámetros vía POST Y GET que no están siendo filtrados y pueden pasar directamente al DB, o insertar remotamente código en sus archivos, bueno mejor no explico mucho sobre esto…

Lo peor que les puede pasar es que los clientes sean engañados y llevados a una url distinta al la del tpv pero similar en su diseño, esto se conoce phishing ma información aca

http://es.wikipedia.org/wiki/Phishing

si le pasa esto, recuerden que están utilizando un logo visa de verificado y certificado por visa, mastercard, esto no solo le traerá problemas con sus clientes, si estos son estafados, si no que pueden ser demandados por las empresas visa y mastercard. Bueno solo una visión que le presento, pero es mejor prevenir que llorar.


Yo en particular les recomendaria comprar los modulos de pagos a la gente que tiene experiencia en la creacion de los mismos (como yo %-P ), es mejor invertir en esto antes de que en diseño u en modulos que hacen estrellistas o lanzan ventanitas....


De todos modos estoy haciendo un modulo para La Caixa Catalunya y CECA, que publicare para su descarga desde mi tienda, el modulo lo tengo que entregar mañana, así que cuando este aprobado y avalado, lo posteo en el foro.
saludos!!
;-P
Link to comment
Share on other sites

Bien el modulo posto por Petaspam, no sirve. Es un modulo que anda dando vueltas desde los principios de Pretashop.



Hola Tamu. buenos días.

El modulo que puse es la versión "mas" nueva que encontré en esta pagina:

http://todoprestashop.com/foro/viewtopic.php?f=1&t=2488

Tube de hacer una modificación para que usara el SHA1 Completo y no el Ampliado pero el modulo esta tal cual lo baje de la web indicada, lo comento por si pueden aver malos entendidos, que si hay algo raro ya venia de base... no se si me explico?

Es cierto lo que dices del Phishing siempre hay un desalmado que intenta aprovecharse de los demás, espero que en esta comunidad nunca suceda... estaríamos vendidos y la credibilidad de la misma se iría al traste.

Si como bien dices hace tiempo que rula por ahí y existen de mejores y mas nuevas, te agradecería enormemente que las subieras aquí para poder usarlas, dado que no he sido capaz de encontrar nada mejor.

Mil Gracias
Link to comment
Share on other sites

Pues si mira arriba de todos coloque esto

Bien el modulo post por Petaspam, no sirve. Es un modulo que anda dando vueltas desde los principios de Pretashop.


no recuerdo quien fue el autor, pero se posteo en este foro, el modulo no es que tenga algo malo, lo que tiene es un desorden y una confucion con la recepcion de las veriables.

a ver para que sirva para todos, lo que ofrece la caixa, ceca, paypal etc, son unos TPV muy bien pensados son pocas las pasarelas que envian informacion a la tienda, normalmente uno debe ingeniarselas para generar una orden al regresar de la pasarela a la tienda.

En este caso el modulo recibe parametros via post, genera un firma con los parametros recibidos esto esta bien, pero habria que aprovechar mas esos parametros para darle mas dinamismo al modulo, aparte de filtralos antes de cualquier accion.

En el caso del modulo ahora que lo mirado bien, no esta tan mal, el autor crea una nueva firma con los parametros recibidos y luego compara con la firma local, sin embargo ahi puede quedar un brecha de error, una vez que compara la firmas no genera una orden...

por mi parte validaria cada dato antes de hacer cualquier accion en la tienda, lo mejor seria asegurar que si espero recibir un dato numerio que el dato que recibido sea numerico y asi con cada parametro, si todo esta bien recibido recien ahi comparar la firma, dejemos esto de lado, volviendo al modulo en cuestion,

para que les genere la orden pueden probar haciendo esto, buscar este codigo em el archivo respuesta_tpv.php :

if (!empty($_POST)){

   // Recoger datos de respuesta
   $total     = $_POST["Ds_Amount"];
   $pedido    = $_POST["Ds_Order"];
   $codigo    = $_POST["Ds_MerchantCode"];
   $moneda    = $_POST["Ds_Currency"];
   $respuesta = $_POST["Ds_Response"];
   $firma_remota = $_POST["Ds_Signature"];


   // Creamos objeto
   $servired = new servired();
   //Verificamos opciones
   $error_pago = Configuration::get('SERVIRED_ERROR_PAGO');
   // Contrase�a secreta
   $clave = Configuration::get('SERVIRED_CLAVE');

   // C�lculo del SHA1
   $mensaje = $total . $pedido . $codigo . $moneda . $respuesta . $clave;
   $firma_local = strtoupper(sha1($mensaje));

if ($firma_local == $firma_remota){
       // Formatear variables
       // NINO - eliminar el punto de los miles para evitar error en pago         
       // ORIGINAL - $total  = number_format($total / 100,4);        
       $total  = number_format($total / 100,4,'.', '');
       $pedido = substr($pedido,0,8);
       $pedido = intval($pedido);
       $respuesta = intval($respuesta);
       $moneda_tienda = 1; // Euros        
       if ($respuesta < 101){                
           // Compra v�lida
           $mailvars=array();
           $servired->validateOrder($pedido, _PS_OS_PAYMENT_, $total, $servired->displayName, NULL, $mailvars, $moneda_tienda);
       }else{                
           // Compra no v�lida
           if ($error_pago=="no"){
               //se anota el pedido como no pagado
               $servired->validateOrder($pedido, _PS_OS_ERROR_, 0, $servired->displayName, 'errores:'.$respuesta);
               }
           elseif ($error_pago=="si"){
               //Se permite al cliente intentar otra vez el pago
           }

       }

   }
}
?>




cambiar todo eso por esto:

if (!empty($_POST)){

   // Recoger datos de respuesta
   $total     = $_POST["Ds_Amount"];
   $pedido    = $_POST["Ds_Order"];
   $codigo    = $_POST["Ds_MerchantCode"];
   $moneda    = $_POST["Ds_Currency"];
   $respuesta = $_POST["Ds_Response"];
   $firma_remota = $_POST["Ds_Signature"];

if ($firma_local == $firma_remota){
$currency = new Currency(intval(isset($_POST['currency_payement']) ? $_POST['currency_payement'] : $cookie->id_currency));
$total = floatval(number_format($cart->getOrderTotal(true, 3), 2, '.', ''));
$mailVars = array(/*variables tomadas de la configuracion para los mails */);
$servired = new servired);
$servired ->validateOrder($cart->id,_PS_OS_PAYMENT_, $total, $servired->displayName, NULL, $mailVars, $currency->id);
$order = new Order($servired->currentOrder);
Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id;_module='.$servired->id.'&id;_order='.$servired->currentOrder.'&key;='.$order->secure_key);
       }else{                

               $servired->validateOrder($pedido, _PS_OS_ERROR_, 0, $servired->displayName, 'errores:'.$respuesta);
               }

}
?>



la variable $firma_local debe ser cargada desde la classe llamando a la function que la contiene:

$servired = new servired);
$firma_local = $servired->aca va

y debe estar antes del if ...

bueno de todos modos es algo hecho a las apuradas, luego si tengo tiempo veo como les fue, espero terminar el modulo lacaixa hoy :-S

saludos!!

Link to comment
Share on other sites

Hola buenas tardes Tamu.

He estado probando las lineas que has ido indicando y he tenido problemas con las siguientes, al sustituir:

       $ssl = Tools::getValue('ssl', $this->ssl);
       if ($ssl=='no')
       $urltienda = 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/servired/respuesta_tpv.php';
       elseif($ssl=='si')
       $urltienda = 'https://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/servired/respuesta_tpv.php';
       else 
       $urltienda = 'ninguna';


por

$urltienda = ‘https://’.$_SERVER[‘HTTP_HOST’].PS_BASE_URI.‘modules/servired/respuesta_tpv.php’;



Me da un error del modulo 'ServiRed' y no me lo carga, supongo porque se le han eliminado las opciones para seleccionar el tipo de pasarela (Normal 'http//' o Segura https//') Yo tambien lo veo absurdo dado que el modulo si seleccionas el tipo de direccion SSL no termina correctamente y el carrito no pasa a pedido... bueno supongo que habría que eliminar la posibilidad de elegir.

Los cambios sobre el archivo 'respuesta_tpv.php' los probare esta misma noche ya te contare.

Por lo demás esperando con paciencia el modulo que estas terminando.

Un Saludo.

Link to comment
Share on other sites

Hpla buenas noches.

He estado probando el código que paso Tamu:

if (!empty($_POST)){

   // Recoger datos de respuesta
   $total     = $_POST["Ds_Amount"];
   $pedido    = $_POST["Ds_Order"];
   $codigo    = $_POST["Ds_MerchantCode"];
   $moneda    = $_POST["Ds_Currency"];
   $respuesta = $_POST["Ds_Response"];
   $firma_remota = $_POST["Ds_Signature"];

if ($firma_local == $firma_remota){
$currency = new Currency(intval(isset($_POST['currency_payement']) ? $_POST['currency_payement'] : $cookie->id_currency));
$total = floatval(number_format($cart->getOrderTotal(true, 3), 2, '.', ''));
$mailVars = array(/*variables tomadas de la configuracion para los mails */);
$servired = new servired);
$servired ->validateOrder($cart->id,_PS_OS_PAYMENT_, $total, $servired->displayName, NULL, $mailVars, $currency->id);
$order = new Order($servired->currentOrder);
Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id;_module='.$servired->id.'&id;_order='.$servired->currentOrder.'&key;='.$order->secure_key);
       }else{                

               $servired->validateOrder($pedido, _PS_OS_ERROR_, 0, $servired->displayName, 'errores:'.$respuesta);
               }
}
?> 



Al volver con el pago efectuado correctamente a la tienda, nos dice que el pago a sido todo un exito, pero el carrito sigue lleno y por tanto el pedido no se tramita hacia el BackOffice, vamos como si no lo uvieramos pagado, en cambio el Panel de ServiRed, dice que hay un pago efectuado.

Un Saludo.

Link to comment
Share on other sites

Pues seguramente porque el numero de orden que envia el TVP no es el mismo que tiene prestashop, recuerda que en codigo se ha añadido ceros a la izquierda, lo hay que hacer es quitar los ceros de la variable

 $pedido    = $_POST["Ds_Order"];



una forma rapida sin utilizar funciones especiales seria aplicando simple trukillo algo asi:

$pedido    = $_POST["Ds_Order"];
$pedido=(string)(int)$pedido;



claro que ahora $orden debe ser $pedido,

petaspam Mira ya tengo casi terminado el modulo la caixa seguramente funcionara tambien para ceca y demas similares, el tema es que estoy esperando que a mi cliente le habiliten la opciones del tvp.
ahi te envio un privado por si quieres probar mi modulo, me falta terminar la parte del retorno a la tienda, pero creo que va funcionar, mi idea es registrar todas las activdades y respuestas del tvp, aprovechando IPN (notificacion de pago instantanea)

bueno catactame a ver si podemos terminarlo, yo lo programo tu lo pruebas...
ahi te mando un privado!

Saludos!!

Link to comment
Share on other sites

He estado probando todas las modificaciones que mencionais en este Post y sigo sin conseguir que el pedido se elimine del carrito
y pase a formar parte de Pedidos. Es una lástima que el prestashop tenga tantos problemas a la hora de utilizar la pasarela de pagos.
Un saludo a todos.

Link to comment
Share on other sites

He estado probando todas las modificaciones que mencionais en este Post y sigo sin conseguir que el pedido se elimine del carrito
y pase a formar parte de Pedidos. Es una lástima que el prestashop tenga tantos problemas a la hora de utilizar la pasarela de pagos.
Un saludo a todos.

Prestashop no tiene los problemas 8-/ los problemas estan en la mala interprestacion de los usuarios a la hora de crear un modulo, el modulo que ustedes necesitan practicamente es un IPN un notificador de pago instantaneo, pues yo lo que les pido es un poquito de paciencia ya he terminado el modulo que necesitan, solo me falta testearlo en una tienda real, sucede que mi cliente tiene una version de pretashop demasiado antigua asi que no he podido hacerlo funcionar alli, ahora estoy haciendo una intalacion de una tienda nueva dentro del dominio de mi cliente, luego si todo marcha como espero subire el modulo para descargar...
Cuando vean el modulo que he realizado se daran cuenta de la gran diferencia que hay entre que hice y este que ustedes quieren usar.

saludos!!
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...