Integración TPV en CI

344 views
Skip to first unread message

juanmy

unread,
Mar 5, 2010, 4:24:44 AM3/5/10
to CodeIgniter-spanish
Antes que nada un saludo a todos, estoy realizando mi primer proyecto
con CI, se trata de una tienda que lleva un TPV con el sistema de 4b,
me gustaría saber si alguno ha realizado algo con este TPV, ya que
tengo 2 dudas:

1.- El sistema me exige enviarle unos campos vía POST, lo he
implementado mediante el envío de un formulario, pero me gustaría
haberlo hecho directamente mediante una acción en el controller
correspondiente pero no se como hacerlo (y si es posible).

2.- Por otro lado el sistema me devuelve unos valores que no se como
recuperar con CI, ya que me lo envía a una url que le facilito y no se
como me llega.

Si alguien puede orientarme se lo agradeceré eternamente ;)

Saludos

Ever Daniel Barreto Rojas

unread,
Mar 5, 2010, 10:35:06 AM3/5/10
to codeignit...@googlegroups.com

En realidad no tengo idea que es un TPV y qué es 4b (asumo que algún
lenguaje o IDE), de todas formas, lo que necesitas hacer no es difícil
de lograrlo en CI.

Para tu punto 1, necesitas utilizar CURL para hacer las llamadas POST
(y enviar datos). Podés hacerlo desde el controlador o desde alguna
librería.

Para tu punto 2, los valores que te retorna tu TPV/4b podés
"capturarlos" una vez que hiciste el POST usando CURL. Yo en tu lugar,
buscaría una de esas librerías Paypal que hay por ahí para Code
Igniter para hacerme idea de una implementación, éstas librerías
utilizan CURL para procesar las transacciones.

Suerte!

---
Ever Daniel Barreto Rojas
everdaniel at gmail dot com
www.everdaniel.com

Hernando Gisinger

unread,
Mar 5, 2010, 11:06:58 AM3/5/10
to codeignit...@googlegroups.com
Supongo que TPV es un terminal de punto de venta ;)


--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

iMefisto

unread,
Mar 5, 2010, 12:18:53 PM3/5/10
to codeignit...@googlegroups.com
tpv se refiere a una pasarela de pago y 4b es un sistema europeo para estas pasarelas (es un poco impreciso lo mío, pero no dista mucho de eso)

Sobre el punto 1), podés hacer el envío a través de post a la url que te provee el banco, no sé si hace falta una acción en controller para eso, directamente hacer el envío desde el formulario que mostraste en la vista. Lo que podés hacer es complementar un poco con jquery, enviar el formulario con ajax por un lado, y redirigir a otra pantalla por otro lado.

Sobre el punto 2) acá es donde tal vez tengas que renegar con CI porque el banco envía la información a un archivo (no toma en cuenta controllers ni acciones), sin embargo habría q contemplar la posibilidad de escribir un archivo que reciba la info del banco y de ahí formatee esa información (o la ponga en una tabla) para luego redirigir a alguna acción de CI. Me explico?

Espero consigas resolver el problema así nos comentas y aprendemos un poco.

Hay módulos para oscommerce hechos para estas pasarelas, a lo mejor te conviene revisar alguno para ver si te inspiran a la hora de reescribirlos (en este momento se me viene a la cabeza el de ZhenIt para bbva)

Suerte y comenta las novedades por favor!

Daniel Perez

unread,
Mar 5, 2010, 12:47:54 PM3/5/10
to codeignit...@googlegroups.com
Hola

yo he echo varias web cpn pasarelas de pago

y como dices ... la pasarela requiere que redirijas la accion del form

a una direccion especifica:

tan simple como

<?php echo form_open('<<la direccion que nos indiquen en el banco>>'); ?>

normalmente estas TPV exigen ciertos campos con valores especificos que maneja ta TPV

que puedes incluirlos como campos "hidden" en el formulario

y otros que seran campos que rellenara el usuario, deberan darles un "name" especifico


Por otro lado ... el bando tambien de da la opcion de que como datos "hidden" le indiques dos direccion de respuesta

una direccion de OK para transacciones correctas y otra direccion de KO para transacciones fallidas

estos campos como te comento van en input "hidden" con un "name" especifico que te indica el banco

por ejemeplo puedes usar un controlador "Pago" con funciones "pago_ko" y "pago_ok"


en tu formulario configurarias estos campos hidden:

<input type="hidden" name="urlOK" value="pago/pago_ok" />
<input type="hidden" name="urlKO" value="pago/pago_ko" />

fijate que los name que estoy dando a estos campos deben ser los que te indique el banco
estos del ejemplo son los nombres que me indicaron a mi que debian referirse a las direcciones de OK y KO


A ambas direcciones te llegaran datos de respuesta del banco,

en el ultimo proyecto que he echo de este tipo ... llegaban por GET pero podrian llegar por POST

y trataras los datos que te lleguen de vuelta como consideres


--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.



--
DANIEL PEREZ
Fotógrafo

Web/Blog: www.daniperezfotografia.es
Email: danip...@gmail.com
Movil: 627.93.74.93
Localizacion: Madrid

Inyaka

unread,
Mar 8, 2010, 2:56:50 AM3/8/10
to CodeIgniter-spanish
¿estamos claros que ese formulario que sera redirigido al banco debe
estar bajo https para que los datos sean enviados encriptados?


¿por cierto, alguien sabe como dejar alguna seccion del sistema con
https?

> Email: danippe...@gmail.com
> Movil: 627.93.74.93
> Localizacion: Madrid

Daniel Perez

unread,
Mar 8, 2010, 3:14:51 AM3/8/10
to codeignit...@googlegroups.com

Si ... el banco te da una direccion HTTPS para que envies los datos desde tu formulario a la TPV

es decir ... cuando llegas al paso de introducir tus datos de tarjeta, ya estas en una direccion HTTPS

juanmy

unread,
Mar 9, 2010, 4:58:51 AM3/9/10
to codeignit...@googlegroups.com
Bueno os comento que finalmente lo he planteado:

1.- Aunque lo quería evitar al final he optado por enviar los datos al banco mediante un formulario con campos ocultos (tengo que investigar lo de CURL, que me ha gustado la idea), para simplificar.

2.- En este caso, el banco una vez recibido el formulario envía una respuesta al servidor para que le pasemos los campos finales de la transacción (posteriormente cuando el pago se efectua vuelve a enviarnos los datos de conformidad), para evitar problemas he creado los archivos correspondientes en php puro y duro y los he incluido en un directorio que he dado permisos de acceso en el htaccess para que el sistema no lo redirija a CI, por lo que trabajo fuera de él.

Bueno se que no es demasiado elegante pero .... he podido al menor reciclar toda la programación que ya tenía hecha de otros trabajos con este TPV (sistema de pago online con tarjeta de crédito en el servidor de banco).

Saludos.

juanmy

unread,
Mar 9, 2010, 7:27:23 AM3/9/10
to codeignit...@googlegroups.com
Amplio con una información que me parece curiosa:

Resulta que tal como he desarrollado el tema (ver mi email anterior) todo marcha bien, pero como al final de todo el proceso el banco me remite a una dirección que yo le indique, por probar he puesto que me vaya a una url para capturarla con el correspondiente controlador, es decir: www.loquesea.com/controlador/accion (no uso index.php), pues bien recibo lo siguiente:

www.loquesea.com/controlador/accion?result=2&pszPurchorderNum=0000&pszTxnDate=09%2F03%2F2010&tipotrans=SSL&store=0000&coderror=180&deserror=Operacion+Denegada

Y lo puedo capturar desde CI con $_REQUEST directamente.

Bueno nada más, espero que os valga de algo.

Saludos a todos.

Inyaka

unread,
Mar 9, 2010, 10:58:37 AM3/9/10
to CodeIgniter-spanish
¿pero tu formulario esta en https?

Si tu formulario no esta sobre https estas enviado la información sin
encriptación, con esto me refiero a los datos que podrían dejar en la
ruina a tus usuarios, osea el uso de https que le estarías dando es lo
mismo que nada.

cree un nuevo tema relacionado a esto ¿como integrar https a nuestros
proyectos? http://groups.google.com/group/codeigniter-spanish/browse_thread/thread/e3c4e21519a7b78a

juanmy

unread,
Mar 10, 2010, 6:08:49 AM3/10/10
to codeignit...@googlegroups.com
los datos del cliente siempre van bajo https en el propio server del banco.

Jairo Ochoa

unread,
Mar 10, 2010, 2:09:13 PM3/10/10
to codeignit...@googlegroups.com

Creo que aquí hay un poco de lío.

Por ahora no he hecho ningún TPV con Codeigniter, pero si varios en ASP. (4B, CaixaGalicia, CECA, Caixanova)

El funcionamiento es el siguiente y no es requisito que la tienda tenga un dirección Https, aunque sí recomendable incluso por proteger los datos de los usuarios.

Volviendo al TPV.

Cuando el cliente hace click en PAGAR, la tienda hace un primer POST a una página del TPV y se le envían datos como importe, moneda, idioma, numero de comercio, en algunos casos incluso las referencias del carrito.

Ahora viene lo interesante.
A la página a la que se accese es propiedad del banco y es Htpps, así que el número de tarjeta no lo gestiona la tienda.

Entre TPV y tienda se produce una comunicación "por detrás" de manera que el TPV comprueba que quien le envía los datos es una tienda registrada en el sistema.

La tienda responde con una firma digital . En servidores Windows se puede implementar con una DLL o bien con un CGI que llame a un ejecutable de MS-Dos, en Apache con una función en PHP.
El TPV comprueba la firma y otros datos.
Es lo que en los manuales de los TPVs llaman Comunicación Online (el banco os debe pasar un manual, pues no todos los TPVs son iguales)
Yo además verifico que la IP (o rangos de IP) del servidor del TPV que hace la comunicación por detras con la tienda es correcta, ya que los TPV tienen IP fija. No es requisito, ni lo suele decir en los manuales de los TPV, pero si solicitas la IP te la dicen.

Finalmente el TPV verifica la tarjeta y devuelve una última comunicación a la tienda diciendo si fue OK
En este paso el tienda debería cambiar de estado el pedido a "pagado" o si fue NO dejarlo como "pendiente de pago", "pago denegado", "error de pago", según gustos ...

Volviendo a la "capa del usuario", el cliente es redirigido a la página de la tienda que  le da la gracias o bien le avisa que hubo un problema con el pago.

Estas 2 posibles páginas, y la que intercambia datos por detrás con el TPV se definen en la configuración del TPV.
Y por supuesto que esta última nadie la conoce.

Así que poco más que 1 página en PHP es necesaria para implementar el TPV y en casi todos los TPV tienen un ejemplo que se puede cambiar.

Personalmente, esta página la haría con PHP y las de "gracias" y "error" con CI.

Saludos,
Reply all
Reply to author
Forward
0 new messages