Esta es una colección de pruepas y errores que he ido teniendo al configurar webpay en algunos sitios.
Este es un post para chilenos, dado que dudo que en alguna parte del mundo todavía usen un sistema de transacciones electrónicas tan arcaico como el de Transbank, realmente una tortura tratar de entender esto, además de que no hay documentación, ni en la misma página de transbank. Sólo algunos comentarios en algunos foros.
Yo me considero un programador intermedio de PHP, he integrado varios sistemas de pagos, pero esto me dejó completamente parado, tuve que leer el manual completo y aún así no sabía por dónde empezar, así que comencé hakeando/traduciendo el ejemplo hecho en ASP y ahí encontré unas variables post por las que hiceuna búsqueda y encontré publicado el script de PHP usado por un techo para chile, lo que me ayudó a entender algunas lineas del ASP que no me entraban. Ahí es donde estoy ahora, al comienzo de este post, decidido a que si alguien busca ayuda sobre este tema en Google lo encuentre aquí.
Por mientras iré posteando los links que tienen alguna información útil.
http://www.forosdelweb.com/f125/duda-webpay-chile-213843/ varios tipos capos contestando variadas preguntas al respecto
http://svn2.assembla.com/svn/utpch/utpch/webpay/pagina_cierre.php
http://trac2.assembla.com/utpch/browser/utpch/webpay/pagina_cierre.php son el script xt compra.asp versión PHP
http://kb.mediatemple.net/questions/30/Running+scripts+outside+of+the+cgi-bin para ejecutar CGI fuera del cgi-bin
usando el script para ejecutar fuera del CGI-BIN y dando permisos de 0755 a la carpeta y los archivos corre, pero ahora me da un error de conexión.
if you set up permissions incorrectly, you'll probably get "500 Internal Server Error"
Essto explica algunas cosas.
buena referencia en : http://wiki.dreamhost.com/CGI
al final eran los permisos nuevamente: extrañamente la carpeta de logs necesita 0777 [edit:] NUNCA usar permisos 0777 no importa qué NUNCA usarlos [/edit] ¿eso significa que los logs son generados desde el servidor de transbank?
Después resulta que todo es case sentitive, así que no olvidar las mayúsculas.
luego de que se colgara lanzando un error 34 en el log, me dijeron que la última línea del config estaba mala y que para el URLCGICOM usara una dirección absoluta, duda que había tenido desde el principio.
He revisado que se mantiene el error 34 luego de modificar a dirección absoluta el parámetro URLCGICOM, que según el Manual corresponde “34 ERR_REFERER”, por lo cual agradeceré eliminar la línea del archivo de configuración TBK_CONFIG.DAT con el parámetro TBK_REFERER. Solicito por favor mantener la dirección absoluta del parámetro URLCGICOM.
otra nota: los logs se demoran en actualizar la última transacción, hasta 3 minutos en el caso del servidor que estaba probando yo.
siguen los problemas, ahora sale el error 42.
hasta ahora ni idea qué está produciendo lo siguiente:
http://200.119.239.153/seguro/compra.php
conectandose al port : (80)
No pudo abrir socket para conex-com
tienda NO acepto transaccion
respuesta enviada a TBK (ERR)
Error al conectar servidor especificado (42)
ERR; ;42
http://200.119.229.153/seguro/compra.php;
conectandose al port : (80);
No pudo abrir socket para conex-com;
9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;OK ; ;tienda NO acepto transaccion;
9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;OK ; ;respuesta enviada a TBK (ERR)
;9858161553;
9290; ;resultado ;datoscom ;15112010 ;185934;200.10.12.55 ;Ok ;
597026016975 ;Error al conectar servidor especificado (42);
9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;ERR; ;42
http://200.119.229.153/seguro/compra.php
9858161553;
9290; ;transacc ;9858161553 ;15112010 ;185625;200.10.12.55 ;OK ;
597026016975 ;conectandose al port : (80)
9858161553;
9290; ;resultado ;fallo abrir_conexion ;15112010 ;185934;200.10.12.55 ; -2;597026016975 ;No pudo abrir socket para conex-com 9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;OK ; ;tienda NO acepto transaccion 9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;OK ; ;respuesta enviada a TBK (ERR) 9858161553;
9290; ;resultado ;datoscom ;15112010 ;185934;200.10.12.55 ;Ok ;597026016975 ;Error al conectar servidor especificado (42) 9290; ;resultado ;1289858888 ;15112010 ;185934;200.10.12.55 ;ERR; ;42
hubo que usar la IP local en algunos parámetros y se generó un error 46, que era porque estaba rechazada la autenticación por la tienda.
OJO con las direcciones con ./cgi-bin/tbk_check_mac.cgi slash sin punto en PHP, no es lo mismo que en windows.
en PHP / = raíz del dominio
en ASP / = la carpeta que ontiene este archivo. (corríjanme si estoy mal)
Luego el problema estaba en mi código en el archivo que ellos le llaman xt_compra o Página de Cierre.
OJO con subir los CGI desde Dreamweaver, si usan dreamweaver hay que forzar la transferencia a modo binario, cosa que no pude descubrir cómo hacer, así que usé FileZilla. En otra ocasión usé SFTP (FTP de conexión segura) y no tuve problema, pero no puedo recordar si fue por la conexión segura o porque no usé Dreamweaver.
Si no se suben de modo binario se corrompen los archivos, y el servidor arroja un Internal Server Error, y genera un archivo core que es binario y no pude leer. Si uno revisa los .log del servidor (en mi caso Dreamhost) el servidor dice los siguiente:
[Tue Nov 30 10:25:34 2010] [error] [client 200.83.106.80] Premature end of script headers: tbk_bp_pago.cgi, referer: http://000.000.000.000/es/payment.php
MEDCOM 1 significa SSL, MEDCOM 2 usa redirección por javascript (cosa que no imagina cómo puede funcionar)
Iba todo bien, hasta que me puse a jugar con cURL para enviar los datos a webpay, bueno, tambin cambié el MEDCOM y el código de comercio para que funcionara en dolares, y me da un error 1 ( ERR_LECTURA_INPUT ) y ni siquiera me muestra la pantalla para pagar con la tarjeta. Vamos a depurar un poco para ver. partamos por devolver la tienda a pesos. No era ni la tienda en dólares ni el cambio de MEDCOM, OK, el error era porqeu estaba usando mal cURL ahora, por una extraña razón cURL si funciona.
Finalmente MEDCOM no puede cambiarse a 1 , por lo tanto no hay comunicación interna por SSL, entonces, aunque en el manual diga que si se puede, los siguientes parámetros tienen que ir así:
MEDCOM = 2 (1 no se encuentra disponible)
URLCGICOM = http://www.example.com/cgi-bin/tbk_bp_resultado.cgi --> no puede ser HTTPS://... y les recomiendo que sea absoluto
PORTCOM = 80 à 443 no está disponible
Adicionalmente....
PORTCOM = 80 à 443 no funciona (o yo no he logrado hacerlo funcionar)
HTML_TR_NORMAL = http://www.example.com/interno/xt_compra.php --> no puede ser HTTPS://... y les recomiendo que sea absoluto
http://www.webmasterworld.com/php/3164561.htm
<?php
$transbank_format_number = number_format($totalCompra, 2, '', '');
?>
Ahora estoy batallando con xt_compra.php
y Éxito!
ahora a formatear el resultado para que en transbank aprueben el sistema.