News:

Looking for documentation? Take a look on our wiki

Main Menu

New Payment Module: TPV Virtual Servired-Sermepa

Started by hoppe, May 12, 2006, 01:14:24 AM

Previous topic - Next topic

jplana

Hola, a mi tambien me aparece lo mismo.
Estoy utilizando joomla 1.5.12 y VM 1.1.3

He buscado por infinidad de lugares y lo que he encontrado no me ha funcionado.
El codigo que se indica en el principio de este post (module.txt) es el único que me conecta pero, con el mensaje de"Error en datos enviados. Contacte con su comercio".

Malversan

Un servidor se peleó con este tema hasta resolverlo.

Para evitaros los errores que surgen por añadir código a mano o usar diferentes configuraciones de TPV, creé un componente Joomla administrable que se encarga de todo lo necesario sin tener que tocar fichero alguno: Componente para pago en VirtuMart mediante TPV virtual Servired-SERMEPA.

Atención: Este componente fue desarrollado y probado únicamente con Joomla 1.0.13 y VirtueMart 1.0.13. Añado además que no proveo soporte para el mismo. Pero sin duda os puede servir para resolver definitivamente el problema.

Mis agradecimientos a Hoppe y a Vivian, que hicieron posible este salto adelante.

albandy

Quote from: Malversan on October 06, 2009, 08:15:56 AM
Un servidor se peleó con este tema hasta resolverlo.

Para evitaros los errores que surgen por añadir código a mano o usar diferentes configuraciones de TPV, creé un componente Joomla administrable que se encarga de todo lo necesario sin tener que tocar fichero alguno: Componente para pago en VirtuMart mediante TPV virtual Servired-SERMEPA.

Atención: Este componente fue desarrollado y probado únicamente con Joomla 1.0.13 y VirtueMart 1.0.13. Añado además que no proveo soporte para el mismo. Pero sin duda os puede servir para resolver definitivamente el problema.

Mis agradecimientos a Hoppe y a Vivian, que hicieron posible este salto adelante.

Me he estado leyendo tu link (ayer me parece que el servidor estaba caído o saturado) y la verdad es que tu solución pinta muy bien, esta tarde la probaré con joomla 1.5 y si funciona correctamente me olvidaré de empezar a toquetear a mano la bd del virtuemart.

Respecto a lo que comentas sobre la transacción cuando falla, también hay que tener en cuenta que sermepa obliga que como mínimo el código de pedido tenga 4 dígitos numéricos al principio del string (por eso lo del while en mi cutre-parche sobre código publicado en este hilo).

Muchas gracias por tu aporte.

Malversan

#33

Quote from: albandy on October 07, 2009, 11:39:24 AM
Respecto a lo que comentas sobre la transacción cuando falla, también hay que tener en cuenta que sermepa obliga que como mínimo el código de pedido tenga 4 dígitos numéricos al principio del string (por eso lo del while en mi cutre-parche sobre código publicado en este hilo).

Eso lógicamente lo tuve en cuenta. El código de pedido que le paso a SERMEPA es siempre una cadena de 12 caracteres: cojo el código de pedido VirtueMart, le añado a la derecha una letra y tres dígitos aleatorios para distinguir los intentos de transacción (así evito que SERMEPA dé error por identificador repetido si el pago falla y se reintenta más tarde), y luego le añado ceros a la izquierda hasta completar doce caracteres (para ello no hace falta ningún bucle, tienes la función str_pad()).

Quote from: albandy on October 07, 2009, 11:39:24 AM
Me he estado leyendo tu link (ayer me parece que el servidor estaba caído o saturado) y la verdad es que tu solución pinta muy bien, esta tarde la probaré con joomla 1.5 y si funciona correctamente me olvidaré de empezar a toquetear a mano la bd del virtuemart.

No puedo garantizar que el componente funcione con Joomla 1.5 puesto que lo desarrollé y probé únicamente con Joomla 1.0.13. Pero si fuese necesario adaptarlo, no debería resultaros difícil hacerlo a quienes conocéis los entresijos de Joomla 1.5.

albandy

Quote from: Malversan on October 07, 2009, 17:53:57 PM

Quote from: albandy on October 07, 2009, 11:39:24 AM
Respecto a lo que comentas sobre la transacción cuando falla, también hay que tener en cuenta que sermepa obliga que como mínimo el código de pedido tenga 4 dígitos numéricos al principio del string (por eso lo del while en mi cutre-parche sobre código publicado en este hilo).

Eso lógicamente lo tuve en cuenta. El código de pedido que le paso a SERMEPA es siempre una cadena de 12 caracteres: cojo el código de pedido VirtueMart, le añado a la derecha una letra y tres dígitos aleatorios para distinguir los intentos de transacción (así evito que SERMEPA dé error por identificador repetido si el pago falla y se reintenta más tarde), y luego le añado ceros a la izquierda hasta completar doce caracteres (para ello no hace falta ningún bucle, tienes la función str_pad()).

No, no lo decía por tí, es que en el código que hay aquí dentro del archivo modulo.txt hay esto: $order = '00'.$db->f("order_id");

Quote from: albandy on October 07, 2009, 11:39:24 AM
Me he estado leyendo tu link (ayer me parece que el servidor estaba caído o saturado) y la verdad es que tu solución pinta muy bien, esta tarde la probaré con joomla 1.5 y si funciona correctamente me olvidaré de empezar a toquetear a mano la bd del virtuemart.

No puedo garantizar que el componente funcione con Joomla 1.5 puesto que lo desarrollé y probé únicamente con Joomla 1.0.13. Pero si fuese necesario adaptarlo, no debería resultaros difícil hacerlo a quienes conocéis los entresijos de Joomla 1.5.

Por desgracia en Joomla 1.5 no funciona bien, se instala (cambiando LICENSE.txt por LICENSE.TXT, ya que los servidores Linux son case sensitive) correctamente, pero luego no rellena bien los valores de las variables (es posible que si que funcione todo en un servidor que no sea case sensitive).

De momento como voy un poco de culo acabaré de implemetarlo tal y como había empezado, haciendo una modificación sobre el codigo antiguo del modulo.txt y haciendo a mano las modificaciones de la BD, y cuando tenga un poco de tiempo ya miraré de tocar tu código para que funcione en 1.5

Muchas gracias por todo.

albandy

Quote from: Malversan on October 19, 2009, 03:32:38 AM
Quote from: albandy on October 08, 2009, 17:21:48 PM
se instala (cambiando LICENSE.txt por LICENSE.TXT, ya que los servidores Linux son case sensitive)

Ciertamente en el fichero "servired.xml" hay un gazapo que no había visto: debería poner "LICENSE.txt", que es el nombre correcto del fichero. Gajes de paquetizar el componente deprisa y corriendo para subirlo al foro. Pero esto sólo afecta a la instalación de la documentación, no afecta al funcionamiento del componente.

Quote from: albandy on October 08, 2009, 17:21:48 PM
pero luego no rellena bien los valores de las variables

Esto suena más preocupante. ¿A qué te refieres exactamente con "luego" y "los valores de las variables"? Quizá con indicaciones os pueda ayudar a adaptar el instalador, pero piensa que yo no tengo un Joomla 1.5 delante en estos momentos, de modo que no sé a qué te refieres si no concretas mucho.

Quote from: albandy on October 08, 2009, 17:21:48 PM
De momento como voy un poco de culo acabaré de implemetarlo tal y como había empezado, haciendo una modificación sobre el codigo antiguo del modulo.txt y haciendo a mano las modificaciones de la BD

No es por menospreciar el código con el que estáis tratando, ni mucho menos (yo partí de él para hacer mi componente, como aclaro en la documentación), pero es que todos los problemas con los que os estáis encontrando ya los solucioné hace más de un año y están totalmente resueltos.

Me resulta curioso que sigáis con un código que os falla y que una vez personalizado no es mantenible, en lugar de adaptar un componente libre ya hecho que no sólo funciona sino que además añade mantenimiento desde el "backend" (incluso de numerosas opciones que en vuestro código no tenéis).

De entrada se requiere menos tiempo para adaptar el instalador ya hecho que para tocar la BD "a mano". Pero en fin, veo pocas ganas de hacer algo útil que sirva a los demás.

Ni mucho menos era mi intención menospreciar tu trabajo ni darlo a entender, por lo que te pido disculpas.

Te cuento un poco mi caso:
Soy programador Java, he trabajado con el TPV de sermepa siempre sobre java, y como el que se encargaba de PHP y Joomla en mi empresa nos ha dejado (y me alegro por él porqué ha sido para mejor) me ha tocado comerme el marrón, ya que ahora soy el único que antes ha trabajado con el TPV.

Como no tengo ni idea de Joomla y lo que se de PHP es porqué se parece un huevo a C (según mi jefe se supone que debo de saber programar en todos los lenguajes existentes en el mundo mundial, y eso que yo soy del departamento de Java)  pues he hecho lo que he podido (es decir, crear una página de retorno, comprobar que la firma sea correcta y actualizar el pedido en la BD)

Respecto a las variables vacías, al hacer editar código una vez estás apunto de realizar el POST contra el tpv, las variables que le pasas con nombre DS_* estan vacías.

Me gustaría haber podido ayudar un poco más, e incluso intentar convertir tu módulo a Joomla 1.5, pero no tengo los conocimientos suficientes sobre Joomla.

Y de nuevo disculpas si te has sentido ofendido.

Malversan

Quote from: albandy on October 19, 2009, 17:20:16 PMRespecto a las variables vacías, al hacer editar código una vez estás apunto de realizar el POST contra el tpv, las variables que le pasas con nombre DS_* estan vacías.

¿Has configurado el componente antes de probarlo? Como dije no hay que tocar código ni variables, pero lógicamente mi componente no conoce los códigos de identificación de tu TPV, hay que especificarlos en el administrador.

Las variables que mencionas se sacan de la configuración del componente: tu código de comercio, tu número de terminal, la clave secreta de tu TPV, la divisa y el idioma de tu TPV, etc. De este modo no hay que modificar ni una línea de código y el TPV es mantenible y configurable como un componente más (ésa es la gracia de un componente: lo instalas, lo configuras y funciona).

Pero evidentemente mi componente no se inventa dichas variables, esos datos hay que especificarlos al configurar el componente usando el "backend" de administración de Joomla. Puedes hacerlo accediendo a la opción "VirtueMart - Servired" en el menú de configuración de componentes, tal y como indica la documentación.

La pantalla de configuración del componente está hecha para que la entienda un usuario. Todos los valores internamente codificados (tipo de clave, idioma, divisa del terminal) aparecen como opciones de texto seleccionables para que no tengas que usar la documentación de SERMEPA en ningún momento. La ayuda de cada opción te dice qué es cada cosa y te indica incluso cuáles de esos datos son los que te proporciona tu banco cuando ponen en marcha tu TPV.


Otra cosa: para ver el código HTML de una página dinámica te recomiendo que utilices la opción "Ver código generado" de la extensión "Web developer" de Firefox. Diría que la opción estándar "Ver código fuente" (tanto de Firefox como de IE) no te muestra realmente la página que estás viendo, sino que la vuelve a pedir al servidor web, con lo cual en operaciones con POST las variables suelen perderse y los valores dinámicos no aparecen.


Quote from: albandy on October 19, 2009, 17:20:16 PM
Ni mucho menos era mi intención menospreciar tu trabajo ni darlo a entender, por lo que te pido disculpas.

No lo había tomado en ese sentido, no te preocupes. Es simplemente que no comprendo que sigáis por el camino difícil cuando el trabajo ya está hecho y todos los problemas que os encontráis ya están resueltos.

Por cierto, con las indicaciones que me has dado me confirmas que el instalador del componente sí funciona en Joomla 1.5. La errata en el nombre del fichero "LICENSE.txt" era algo trivial que acabo de corregir (puedes volver a descargar el componente del mismo sitio para comprobarlo).

profesorgame

Decis que con joomla 1.5 no tira bien :(

Habria alguna forma de arreglarlo¿?

Ya llevo algo de tiempo en joomla pero hay algunas cosillas que se me resisten, como la porgramacion para este que no se exactamente como va.

profesorgame

Quote from: albandy on October 06, 2009, 19:25:23 PM
Problema del "Error de datos enviados"
Cambiad esto:
$order = '00'.$db->f("order_id");
por esto:
$order = $db->f("order_id");
while (strlen($order)<4) $order="0".$order;

Luego si usais PHP5 las funciones de sha vienen integradas, por lo que deberiais ajustar los cálculos de sha además de que podeis utilizar el urlMerchant.

cambiais esto:
$sha = new SHA;

$message = $amount.$order.$code.$currency.$clave;

$digest1 = $sha->hash_string($message);

$signature = strtoupper ($sha->hash_to_string( $digest1 ));

por esto otro:
$message = $amount.$order.$code.$currency.$tipoOperacion.$urlMerchant.$clave;
$signature = strtoupper(sha1($message));

y eliminais todas las funciones de cálulo del hash sha, es decir, desde :

<?PHP

// Algoritmo SHA-1. No hace falta entenderlo, es matematica pura y dura.

...........

hasta:
..........
      return $this->hash_bytes( $bytes );

   }

}

?>

Yo ahora estoy liado intentando automatizar el estado del pedido cuando se realice el pago, y de momento lo único que veo viable es crearme mi propia página de retorno, recuperar las variables y actualizar directamente la BD.



Lo he editado con tus instrucciones y me da error con la firma ( para ser esxactos el SIS0042), me podrias pasar el código entero para hacer un copy & paste.

angy_09

Hola a todos, estoy armando por primera vez un tienda virtual sobre un joomla 1.5.14 y Virtuemart 1.1.4. Gracias por el componente, el modulo y cada uno de los aportes pero los implemente y no me fue bien, asi que les pido ayuda para aclarar donde esta mi problema. Con el componente no tuve problema al instalarlo, lo configure con los datos que me dio el banco pero  veo que tengo 2 componentes, uno es el virtuemart y otro el virtuemar-servired, como es la integracion? por que al hacer un pedido no veo a servired como forma de pago, quizas hay un paso que estoy obviando y es ahi que esta mi duda con respecto al componente.

Ahora bien, respecto al modulo tambien lo probe con las configuraciones que se pide pero no salgo del 'Error en datos enviados. Contacte con su comercio' :-\ probe con los cambios sugeridos y pedir nuevamente los datos al banco pero nada.

Esto me esta desesperando asi que espero contar con alguna ayuda, Gracias.

Saludos

profesorgame


Malversan

#41
Quote from: profesorgame on November 04, 2009, 02:27:34 AMAcabo de probar el modulo en joomla 1.5 y me da el error SIS008 --->  Error falta Ds_Merchant_MerchantCode
Se me instalo perfecto no tuve que tocar nada.

No has informado tu número de comercio en el administrador. Ese dato (junto con todos los demás datos de tu proveedor de TPV) debes informarlo tú en la configuración del componente "VirtueMart - Servired", usando los datos que te envió tu banco al dar de alta tu TPV.

Repito una vez más: Es NECESARIO configurar el componente "VirtueMart - Servired" con los datos de tu TPV, usando el administrador de componentes de Joomla. El componente evidentemente no puede adivinar los códigos que te proporciona tu proveedor de TPV, debes informárselos tú.

P.D.: Te aclaro que no es un módulo sino un componente. No confundamos las cosas, que aquí la gente se lía por menos que eso.    ;)


Quote from: angy_09 on November 04, 2009, 02:27:34 AMCon el componente no tuve problema al instalarlo, lo configure con los datos que me dio el banco pero  veo que tengo 2 componentes, uno es el virtuemart y otro el virtuemar-servired, como es la integracion?

Es correcto que aparezcan ambos componentes separados en el administrador, puesto que SON dos componentes y no uno.

La configuración del componente "VirtueMart - Servired" sirve sólo para configurar las opciones de tu TPV Servired, tal y como has hecho. El componente "VirtueMart" se encarga de todo lo demás.


Quote from: angy_09 on November 04, 2009, 02:27:34 AMal hacer un pedido no veo a servired como forma de pago, quizas hay un paso que estoy obviando y es ahi que esta mi duda con respecto al componente.

A los demás sí les aparece, de modo que tu problema debe ser con la configuración de VirtueMart.

Por si acaso, y aunque sea algo de pura lógica, aclaro que "VirtueMart" debe estar instalado ANTES de instalar "VirtueMart - Servired".

Al instalar el componente "VirtueMart - Servired", se crea automáticamente esta entrada en la lista de formas de pago de VirtueMart:
- Nombre: Tarjeta de crédito (Servired)
- Código: SERVIRED
- Descuento: 0.00
- Comprador: -default-
- Forma de pago: PayPal related
- Activada: Sí

Usando el administrador de componentes, revisa en la configuración de "VirtueMart" (menú "Tienda", opción "Formas de pago") si aparece esta forma de pago y si está activada y configurada de esta manera.

Si está correcto, revisa entonces que la forma de pago no esté deshabilitada de alguna otra manera en VirtueMart. Si nada te funciona, prueba también a desinstalar y reinstalar el componente "VirtueMart - Servired".

Saludos.

profesorgame

#42
Es verdad, es un componente. Pero bueno eso no es lo importante jejeje.
Esta todo configurado correctamente, ya se que hay que ahcerlo, ¿Si no como me van a pagar? jeje
Si quieres podemos hablar de forma mas tranquila por msn o gtalk.

EDIT:

P.d: Hay una cosilla que a lo mejor influye la URL que usa el componente es la de Servired; Yo uso la de la caixa.

Malversan

#43
Quote from: profesorgame on November 04, 2009, 17:29:02 PMHay una cosilla que a lo mejor influye la URL que usa el componente es la de Servired; Yo uso la de la caixa.

Yo también usaba La Caixa como proveedor. Para aclararnos, La Caixa es tu banco, Servired es la red de cobros de tarjeta de crédito que utilizan muchos bancos (entre ellos La Caixa) y SERMEPA es la empresa que creó el protocolo de los TPV de Servired. Todos esos nombres son aplicables cuando hablamos del tema.

En el primer mensaje de este mismo hilo tienes una lista de los bancos asociados a Servired (y que por tanto funcionan con el TPV de SERMEPA). Entre ellos por supuesto está La Caixa.
http://forum.virtuemart.net/index.php?topic=18284.msg42703#msg42703

Las URL que utiliza el componente son éstas:
- TPV: https://sis.sermepa.es/sis/realizarPago
- TPV de pruebas: https://sis-t.sermepa.es:25443/sis/realizarPago
¿A ti te proporcionó otras tu banco?

profesorgame

A pues son las mismas, esque unas veces me sale la caixa otras veces servired, depende si uso el pago codeado clasico, o tu extension (Con la tuya me sale servired ya que da error 008, es decir faltan mis datos, que sera porque es joomla 1.5; supongo)