Foros del Web » Programando para Internet » PHP »

Tpv Bbva

Estas en el tema de Tpv Bbva en el foro de PHP en Foros del Web. Hola, estoy trabajando en un proyecto en el que tengo que integrar en mi web el tpv del BBVA. Estoy atascado en la notificación del ...

  #1 (permalink)  
Antiguo 14/03/2007, 03:35
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Tpv Bbva

Hola, estoy trabajando en un proyecto en el que tengo que integrar en mi web el tpv del BBVA.
Estoy atascado en la notificación del pago que no consigo que me llegue. Para resumirlo, diré que hay que indicar una url donde se enviará la notificación. Poniendo esa url en el navegador si que va pero desde el tpv no llega nada.
¿Alguien lo ha programado y me puede echar un cable? ¿Podría ser algo del hosting?

Un saludo
  #2 (permalink)  
Antiguo 14/03/2007, 08:36
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Conseguí avanzar en este proceso. Estas son las dificultades que encontré y las soluciones que adopté.

Averigüé que la url de notificación de pago no debe tener parámetros. A mi no me funcionaba porque ponía una url como esta:
Código:
http://dominio.com/web/dispatcher.php?x=tpv
Moví el script que realizaba el procesado de esa notificación a la raíz de la web y solventé ese problema.

Otro problema que encontré fue a la hora de calcular la firma del xml de la notificación.
Utilicé la función simplexml-load-string tal que así:
Código PHP:
$xml simplexml_load_string($peticion);
            
$idterminal $xml->respago->idterminal;
$idcomercio $xml->respago->idcomercio;
... 
Utilizando la función var_dump en $idterminal, $idcomercio, etc. pude ver que no se trataba de strings sino de objetos. Utilizando un typecast de string solventé el problema:
Código PHP:
$xml simplexml_load_string($peticion);
            
$idterminal = (string)$xml->respago->idterminal;
$idcomercio = (string)$xml->respago->idcomercio;
... 
  #3 (permalink)  
Antiguo 14/03/2007, 08:38
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 18 años, 5 meses
Puntos: 6
De acuerdo Re: Tpv Bbva

no entiendo que deceas hacer...
podrias ser mas explicativo?
__________________
sEIK! -Chile-
Analista Programador.
  #4 (permalink)  
Antiguo 17/12/2007, 06:33
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Yo también tengo el mismo error.
Haciendo las pruebas con los números de tarjeta que proporciona el manual de tpv virtual funciona correctamente, pero luego, en mi web, no soy capaz de acceder al XML que se supone que me envía el TPV.
Tanto el array $_GET como el $_POST están vacíos.

¿alguien sabe cómo ayudarme?

Gracias.
  #5 (permalink)  
Antiguo 17/12/2007, 07:36
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

¿Quieres decir que te funciona en el entorno de pruebas pero no en el entorno real?
  #6 (permalink)  
Antiguo 17/12/2007, 09:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje
¿Quieres decir que te funciona en el entorno de pruebas pero no en el entorno real?
No, aún estoy en el entorno de pruebas.
Lo que quiero decier es que en el entorno de pruebas, cuando genero un pago (simulado, claro), en el portal web del tpv de bbva, el pago figura como si se hubiera realizado, pero en mi web yo no recibo ninguna notificación de que así sea (ni de que no se ha realizado tampoco).
  #7 (permalink)  
Antiguo 17/12/2007, 10:56
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

No recuerdo exactamente el tpv del bbva pero creo que tienes que indicarle que quieres una notificación del pago. ¿Eso lo tienes especificado?
  #8 (permalink)  
Antiguo 17/12/2007, 11:07
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje
No recuerdo exactamente el tpv del bbva pero creo que tienes que indicarle que quieres una notificación del pago. ¿Eso lo tienes especificado?
Pues ahí me has pillado.
Lo que se es que hay que generar un XML que se le envía al tpv donde uno de los campos es urlcomercio, que te copio y pego del manual para qué sirve:
URL donde el comercio quiera recibir los datos de la respuesta del TPV a la operación.

Y esa url la tengo asignada, y es , en teoría donde yo controlo si el pago se ha realizado correctamente o no, para así insertarlos de una forma u otra en mi BD.
  #9 (permalink)  
Antiguo 17/12/2007, 11:15
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

jerkan, me has dado la solución.
Me explico, aparte del parámetro que te escribo en el mensaje de antes, hay otro, que es urlredir, que es "campo opcional en el que el comercio puede indicar la URL del Comercio donde quiera que el TPV redireccione al comprador cuando finalize un pago.

Y ahora si recibo el parámetro peticion.
Ahora el problema es otro, pero antes de exponerlo aquí voy a ver si lo soluciono.

Muchas gracias.
  #10 (permalink)  
Antiguo 17/12/2007, 11:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por dex307 Ver Mensaje
jerkan, me has dado la solución.
Me explico, aparte del parámetro que te escribo en el mensaje de antes, hay otro, que es urlredir, que es "campo opcional en el que el comercio puede indicar la URL del Comercio donde quiera que el TPV redireccione al comprador cuando finalize un pago.

Y ahora si recibo el parámetro peticion.
Ahora el problema es otro, pero antes de exponerlo aquí voy a ver si lo soluciono.

Muchas gracias.
Nada, ni caso, no funciona.

Me emocioné. Ahora lo que pasa es que antes de pedirme el código de 3D secure, se vuelve a mi web, con el parámetro petición, pero indicando que ha habido un error en la transacción.
Estamos en las mismas.
  #11 (permalink)  
Antiguo 17/12/2007, 13:56
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

He encontrado el código dónde monté la petición POST. Ahí va:
Código PHP:
    // datos para el TPV
    
        
$terminal TPV_TERMINAL;
        
$comercio TPV_CODIGO_FUC;
        
$order_id $_SESSION["pedido"]["idTPV"];
        
$currency TPV_MONEDA;
        
$amount $_SESSION["pedido"]["amount"];
         
$urlRespuesta getURLBase()."pedidoRespuestaTPV.php";
         
$urlRedir getURL("dispatch.php?action=".ACCION_PEDIDO_FIN);

        
$palabra_secreta desofuscar(TPV_PALABRA_SECRETA_OFUSCADATPV_CLAVE_DESOFUSCACION);
        
        
$message $terminal.$comercio.$order_id.replace_no_num($amount).$currency.$palabra_secreta;

        
$signature strtoupper(sha1($message));

        
$peticiones = array();
        
        
$peticiones'idterminal' ] = $terminal;
        
$peticiones'idcomercio' ] = $comercio;
        
$peticiones'idtransaccion' ] = $order_id;
        
$peticiones'moneda' ] = $currency;
        
$peticiones'importe' ] = $_SESSION["pedido"]["amount"];
        
$peticiones'urlcomercio' ] = $urlRespuesta;
        
$peticiones'urlredir' ] = $urlRedir;
        
$peticiones'firma' ] = $signature;
        
                
        foreach( 
$peticiones as $clave => $valor )
        {
            
$peticion .= "<$clave>$valor</$clave>";
        }
        
        
$peticion "<tpv><oppago>".$peticion."</oppago></tpv>"
Espero que sea de ayuda.
  #12 (permalink)  
Antiguo 17/12/2007, 15:10
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Muchas gracias, jenkar, de verdad, pero creo que mi problema puede estar en las URLs , o bien en el script que trata la respuesta del TPV, porque los pagos que envío, el TPV los recibe bien.

Código PHP:
$urlRespuesta getURLBase()."pedidoRespuestaTPV.php";
$urlRedir getURL("dispatch.php?action=".ACCION_PEDIDO_FIN); 
Creo que en estas dos direcciones es donde está el quid de la cuestión.
¿en tu pedidoRespuestaTPV.php recibes el XML que envía el TPV?
¿En caso de enviar un pago, a qué página te redirecciona? ¿a pedidoRespuesta o a dispatch.php?

Es que es ahí donde creo que me estoy liando.

Pero muchas gracias de todas formas.
  #13 (permalink)  
Antiguo 17/12/2007, 16:19
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Cita:
Iniciado por dex307 Ver Mensaje
Creo que en estas dos direcciones es donde está el quid de la cuestión.
¿en tu pedidoRespuestaTPV.php recibes el XML que envía el TPV?

Cita:
Iniciado por dex307 Ver Mensaje
¿En caso de enviar un pago, a qué página te redirecciona? ¿a pedidoRespuesta o a dispatch.php?
No puse todo el script porque creí que no era necesario. El final del script es un formulario que contiene la url destino:
Código PHP:
    // formulario de conexión
    
        
echo("<form name=\"tpv_form\" action=\"".TPV_URL."\" method=\"post\">");
        
            echo(
"<input type=\"hidden\" name=\"peticion\" value=\"$peticion\" />");
    
        echo(
"</form>"
donde TPV_URL es:
Código PHP:
define('TPV_URL''https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor'); 
  #14 (permalink)  
Antiguo 17/12/2007, 16:51
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje


No puse todo el script porque creí que no era necesario. El final del script es un formulario que contiene la url destino:
Código PHP:
    // formulario de conexión
    
        
echo("<form name=\"tpv_form\" action=\"".TPV_URL."\" method=\"post\">");
        
            echo(
"<input type=\"hidden\" name=\"peticion\" value=\"$peticion\" />");
    
        echo(
"</form>"
donde TPV_URL es:
Código PHP:

define
('TPV_URL''https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor'); 

Me he explicado mal, me refería a cuando el tpv te devuelve el control, no a la hora de enviar el formulario.
  #15 (permalink)  
Antiguo 18/12/2007, 02:15
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Copio mi código de generación y envío del pago.
Código PHP:
$des_key=MODULE_PAYMENT_BBVA_SIGNATURE_KEY.substr(MODULE_PAYMENT_BBVA_COMMERCE_ID,0,9)."***";
$obfuscated=MODULE_PAYMENT_BBVA_SIGNATURE;
$desobfuscated=desobfuscate($obfuscated$des_key);                        
$importe=$pvp;
                     
$importe=round($importe,2);
                  
$importe=number_format($importe2'.''');      
$nf_importe=str_replace('.','',$importe);
$lt="&lt;";
$gt="&gt;";
$moneda="978";
$localizador=$licencia;
$datosfirma MODULE_PAYMENT_BBVA_TERMINAL_ID.MODULE_PAYMENT_BBVA_COMMERCE_ID.$id_transaccion.$nf_importe.$moneda.$localizador.$desobfuscated;
 
$firma=strtoupper(sha1($datosfirma));

//las urls
$url_comercio="http://dominio.com/index.php";            
$url_redir="http://dominio.com/index.php?p=DescargasClientesQat"
Aqui formo la palabra XML:
Código PHP:
$xml.=$lt."tpv".$gt;
            
$xml.=$lt."oppago".$gt;
            
$xml.=$lt."idterminal".$gt.$MODULE_PAYMENT_BBVA_TERMINAL_ID.$lt."/idterminal".$gt;
            
$xml.=$lt."idcomercio".$gt.$MODULE_PAYMENT_BBVA_COMMERCE_ID.$lt."/idcomercio".$gt;                    
            
$xml.=$lt."idtransaccion".$gt.$id_transaccion.$lt."/idtransaccion".$gt;
            
$xml.=$lt."moneda".$gt.$moneda.$lt."/moneda".$gt;            
            
$xml.=$lt."importe".$gt.$importe.$lt."/importe".$gt;                        
            
$xml.=$lt."urlcomercio".$gt.$url_comercio.$lt."/urlcomercio".$gt;            
            
$xml.=$lt."idioma".$gt."es".$lt."/idioma".$gt;                        
            
$xml.=$lt."pais".$gt."ES".$lt."/pais".$gt;                                    
            
$xml.=$lt."urlredir".$gt.$url_redir.$lt."/urlredir".$gt;                                    
            
$xml.=$lt."localizador".$gt.$localizador.$lt."/localizador".$gt;
            
$xml.=$lt."firma".$gt.$firma.$lt."/firma".$gt;                                                            
            
$xml.=$lt."/oppago".$gt;
            
$xml.=$lt."/tpv".$gt
Y aqui el formunlario:
Código PHP:
<form name="checkout_confirmation" action="https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor" method="post">                        
            <input type="hidden" name="peticion" value="<?echo $xml;?>">
                    <input type="image" src="imgs/button_buy_now.gif" border="0" alt="Confirmar Pedido" title=" Confirmar Pedido" onClick="document.checkout_confirmation.submit();">            
                    </form>
El pago llega al tpv de BBVA, pero no recibo ninguna respuesta en
http://dominio.com/index.php?p=DescargasClientesQat
  #16 (permalink)  
Antiguo 18/12/2007, 03:56
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Precisamente yo tuve problemas al poner una dirección con parámetros en la url que recibe la notificación del pago. La solución que yo adopté es poner una url que apuntara a un fichero directamente:
Código PHP:
$urlRespuesta getURLBase()."pedidoRespuestaTPV.php"
  #17 (permalink)  
Antiguo 18/12/2007, 04:02
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje
Precisamente yo tuve problemas al poner una dirección con parámetros en la url que recibe la notificación del pago. La solución que yo adopté es poner una url que apuntara a un fichero directamente:
Código PHP:
$urlRespuesta getURLBase()."pedidoRespuestaTPV.php"
Si, una de las pruebas que he hecho ha sido cambiar la dirección de respuesta.
Ahora mismo lo tengo así:
Código PHP:
$url_redir="http://dominio.com/resultadopago.php"
resultadopago.php es un script que de momento solo tiene un
Código PHP:
print_r($_GET); 
para mostrar el array de variables que se reciben por el método GET, pero está vacío.


Muchas gracias.
  #18 (permalink)  
Antiguo 18/12/2007, 04:20
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Tienes que tener en cuenta que cuando el tpv del BBVA se pone en contacto con la url que le has facilitado tú no vas ver nada. Yo, lo que hice, fue guardar datos en un fichero en vez de hacer los típicos echos.

Un saludo
  #19 (permalink)  
Antiguo 18/12/2007, 04:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Pero entonces...¿qué es lo que guardo en un fichero?
Tendré que tener "algo" que guardar, ¿no?
  #20 (permalink)  
Antiguo 18/12/2007, 05:13
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Pues, para hacer pruebas, podrías guardar el contenido de los arrays $_SERVER y/o $_GET.
  #21 (permalink)  
Antiguo 18/12/2007, 05:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

el array $_GET está vacío, y con el $_SERVER, los datos que almaceno en el fichero son los mismos que cuando muestro el array por pantalla con el print_r ....
  #22 (permalink)  
Antiguo 18/12/2007, 06:03
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Pues, entonces, no se me ocurre nada más. Repasa la documentación o llama al soporte técnico. Es lo único que se me ocurre.
Lo que parece claro es que no te llega la notificación del pago.
  #23 (permalink)  
Antiguo 18/12/2007, 06:07
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Muchas gracias por tu tiempo jerkan, de verdad.

Me he puesto en contacto con el servicio técnico mediante la opción de ayuda al cliente del portal web del tpv, pero no me han contestado.
Ahora les enviaré otro, y si no, tendré que llamar por teléfono.

Lo dicho, muchas gracias.
  #24 (permalink)  
Antiguo 18/12/2007, 06:13
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

De nada, pa eso estamos
  #25 (permalink)  
Antiguo 19/12/2007, 10:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

jerkan, sería mucho pedir que pusieras el código de tu pedidoRespuestaTPV.php (el que puedas poner, claro).
He hablado con el servicio de atención al cliente del tpv y dicen que ellos envían la petición, y que si no me llega, que será culpa mía, pero que no les de más el coñazo.
  #26 (permalink)  
Antiguo 20/12/2007, 04:47
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

El código se basa en esto:
Código PHP:
$peticion $_GET['peticion']; 
A partir de ahí, trabajo con los datos recibidos.

Se me ocure que podrías hacer la siguiente prueba (si no la has hecho ya):
· Llamar al script que debe recibir la notificación (pasándole un parámetro 'petición'). De esta manera, verás si hay algún error de programación (si tienes habilitado mostrar errores).

Suerte

P.D.: Supongo que no te habrán dicho 'no nos des más el coñazo'
  #27 (permalink)  
Antiguo 20/12/2007, 05:53
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

En tu código, la dirección de respuesta y la redirección no es la misma.
Si cuando el comprador realiza el pago no se ejecuta pedidoRespuestaTPV.php....
¿cuándo ejecutas tú el código de pedidoRespuestaTPV.php?

He probado a pasarle un parámetro de tipo $_GET al script y lo recibe.
En la página de comprobación de momento no hago nada con la petición,porque primero quiero asegurarme que la peticion llega.

Gracias.
  #28 (permalink)  
Antiguo 20/12/2007, 05:54
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje
El código se basa en esto:

P.D.: Supongo que no te habrán dicho 'no nos des más el coñazo'
No, pero uno sabe leer entre líneas,
Exactamente fue algo así como que desde BBVA no pueden dar soporte a programadores, y que el servicio funciona porque si no se estarían quejando miles de clientes....
  #29 (permalink)  
Antiguo 20/12/2007, 06:04
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Re: Tpv Bbva

Cita:
Iniciado por dex307 Ver Mensaje
En tu código, la dirección de respuesta y la redirección no es la misma.
Si cuando el comprador realiza el pago no se ejecuta pedidoRespuestaTPV.php....
¿cuándo ejecutas tú el código de pedidoRespuestaTPV.php?
La página de redirección es para volver del TPV a tu aplicación (dónde se muestra 'fin de pedido' o 'error en el tpv').
La página de notificación (en mi caso, pedidoRespuestaTPV.php) es llamada por el TPV en un proceso 'oculto'. Tú no sabes cuando la va a llamar.
  #30 (permalink)  
Antiguo 20/12/2007, 06:15
 
Fecha de Ingreso: diciembre-2007
Mensajes: 20
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Tpv Bbva

Cita:
Iniciado por jerkan Ver Mensaje
La página de redirección es para volver del TPV a tu aplicación (dónde se muestra 'fin de pedido' o 'error en el tpv').
La página de notificación (en mi caso, pedidoRespuestaTPV.php) es llamada por el TPV en un proceso 'oculto'. Tú no sabes cuando la va a llamar.
curioso...
Entonces, para ver si llega algo o no, lo que tengo que hacer es lo que me dijiste en una de las respuestas anteriores, guardar los datos en la base de datos o en un fichero de texto, no?
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:44.