Cómo Configurar Webpay en PHP

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.

155 thoughts on “Cómo Configurar Webpay en PHP

  1. Estimado tu explicacion es bastante buena pero no das mayor ejemplo de como realizar el php.

    En todo caso muchas gracias por el intento

  2. Hola Hugo.
    EL error 46, en mi caso, era porque estaban mal apuntadas las direcciones del tbk_check_mac.cgi dentro de la carpeta CGI, que en mi caso, no estaba justo bajo la raíz, por lo que /cgi-bin/tbk_check_mac.cgi no encontraba el archivo y la verificación de autenticidad de la transacción salía inválida.
    simplemente agregué un punto al principio de la dirección para que quedara relativo a la carpeta donde estaba trabajando y listo. (./cgi-bin/tbk_check_mac.cgi)
    En tu caso puede ser otra cosa, pero el error 46 tiene que ver con que no se puede hacer la verificación o la autenticación de la tienda que tienes tu, en transbank; ya se porque no se encuentra la llave MAC o por que no es válida.
    Espero esto te aclare un poco el cuento.
    Cuéntame como te va

  3. Hola Agustin! Bastante interesante, aunque hubiera sido mejor complementarlo con un ejemplo. Pero de todos modos te felicito, por que son re-pocas las personas que hablan de esto.

    Porqué no subes el ZIP de los archivos de configuración y el formulario en el que envías los valores al CGI tbk_bp_pago.dat

    Yo en lo particular descargué el ejemplo de MagentoChile ( http://www.magentochile.cl/blog/wikis-magento/wiki-modulo-kcc-transbank/)

    Cómo siempre a algunos le funciona a otros no… a mi no me funcionó a la perfección y creo que es por la página de cierre. Agradecería que compartas tu archivo !.

    El link del que estoy implementando es http://www.rebocano.com/webpay/pago.php

    Saludos y gracias !

  4. Ahhh el cierre, da problemas, particularmente los basados en el plugin de magento, (según lo que he leído).
    El artículo completo es algo que tengo pendiente hace mucho rato.
    Quería tener los ejemplos limpios y claros en enero, pero como los estoy haciendo junto con una tienda en línea que no podré armar hasta marzo no he podido armar nada publicable aún, pero ya lo haré.
    Probablemente el error en el cierre sea algo menor, la manera de hacer un buen registro de errores es usar un Output Buffer para guardar en archivo, todo lo que “imprime” ese archivo, ya sea algún error o simplemente “aceptar”.
    Aquí hay un artículo que explican el output buffer, aunque lo usa para hacer “caching” pero te puede servir para hacer debuging.
    Es todo lo que puedo hacer por el momento, ya que estoy a mil kilómetros del trabajo :)

  5. Logré configurarlo de manera exitosa, armaré un script para que lo publiques en el blog, te parece?

  6. Ehhh! excelente!
    Qué bien se siente ¿no?
    Feliz que publique tu script! Probablemente sea de ayuda para más de alguno.
    Este fin de semana me tengo que sentar a sacar otra tienda en línea y quiero tratar de hacer una clase que se encargue de todo. Veré como me va.

  7. hola.. estoy tratando de implementar un simple pago mediante transbank webpay pero ni idea me saca todos lo errores que mencionas pero no puedo ejecutar los .cgi aunque los proveedores de host me han dicho que perfectamente pueden correr, estoy que me doy golpes contra el escritorio porque no tengo idea de como hacer funcionar esto si tu de pronto nos proporcionaras el código php te agradecería en el alma :D

    Saludos

  8. Lamentablemente yo también estoy hace más de un mes pegado con una tienda que no logro sacar, el maldito KCC 6.0 no funciona en servidores de 64 bits, hay que pedir una compilación especial.
    A penas logre hacer funcionar el sistema publicaré una clase de PHP que se encarga sola de casi todo el proceso y un tutorial de cómo enfrentar este tema para el KCC 6.0

  9. ademas de eso te saca unas cosas, estoy montando una tienda super plana para probar en el host pero es imposible ..hasta copie y pegue la de ejemplo de transbank (obvio modificando las rutas) y no sale :(…

  10. y es el CGI que no funciona? si no funciona el CGI verifica los permisos y confirma que no estés usando un servidor de 64bits.
    Si tienes acceso a los logs de servidor busca ahí algún mensaje de error.

  11. ok pues en la información del servidor he encontrado que es de 64 bits no me había fijado :s

  12. @Jeni: Finalmente logré integrar webpay, pero fue el 5.1 insistí lo suficiente como para que me permitieran certificar en 5.1.
    Adicionalmente, cuando les comenté que estoy en un servidor de 64bits me dieron los cgi-bin para 64bits pero no ayudó de mucho.

  13. Yo tengo sitios en Drupal sin SSL funcionando con KCC 5.1 y andan bien. Cuando me pidieron instalar el KCC 6.0 en un sitio nuevo, el sistema se cae a la primera con un error totalmente nuevo para mi: 283…

    La diferencia entre el KCC 5.1 y el 6.0 es que, aparte de añadir otro archivo para el tema de las llaves, es que el parametro MEDCOM en tbk_config.dat ya no puede tener más de un valor, antes era 1 o 2, ahora es solo 1, que realiza una conexión por SSL desde el sitio al transbank, pero si mi sitio no tiene SSL…

    Pues, eso estoy intentando confirmar con transbank, el log (ultima columna) que me sale es:

    1) Medio 1: Transaccion segura
    2) No se pudo decifrar el contenido, posible error de llaves
    3) 283

    Será la ausencia de SSL?

    Saludos

  14. Yo pase con éxito la etapa de certificación hasta esa parte todo bien, el problema surgió cuando me entregaron el código de producción, ajuste el archivo de configuración según los nuevos parámetros, genere las llaves en ambiente windows ya que al ejecutar esta aplicación con wine no sirve, pero al presionar el botón pagar me da el siguiente error

    Lo sentimos. Su transacción no se pudo llevar a cabo. (Error 283)

    Al revisar el codigo fuente de la pagian dice lo siguinete

    !– Invalid Signature (283) –>
    La url que me entrega este error es
    https://webpay3g.transbank.cl/webpayserver/bp_revision.cgi

    Llame muchas veces al soporte de webpay, de hecho ya va para la segunda semana sin lograr una respuesta de que puede estar pasando, si alguien le paso lo mismo y lo pudo solucionar favor diga como

  15. Román:
    Revisa qué versión del KCC estás usando ¿es 5.1? o 6.0?
    Si es 6.0 puede ser la llave pública que te envía transbank, pide que te la manden de nuevo.

    Si es 5.1 revisa el log detallado y comenta aquí dónde se detiene la transacción.

    Como prueba para descartar algo en la configuración, vuelve al estado de certificación y haz una prueba de transacción así.
    Lo otro que puedes hacer es revisar el log de errores de tu servidor.

  16. Agustin es la versión 6, me enviaron la clave publica nuevamente y nada
    Hice la prueba de volver al ambiente de certificación y funciona correctamente.
    Me dicen que la llave publica “tbk_public_key.pem” es la misma que viene en el kit con el nombre de tbk_public_key101prod.pem, solo que hay que renombrarla.

    Sera que estoy generando mal el certificado, me mandaron el Genkey 2.0, lo genere con doble clic y desde la consola usando 1024, aun que segun yo debería ser de 2048, pero me dicen que da lo mismo. Esta bien asi o hay que pasar algún otro parámetro

    El log de errores no me dice nada

  17. Cosas de la vida, el kit 5 funciono bien por que cuando subí los archivos de las llaves tenia fijo en el ftp tipo de archivos en Binario ojo no Ascii, no me habia percatado de esto hace sus buenas horas después, espero les sirva.

  18. Hola a todos, estoy hace una semana tratando de integrar el KCC 6.0 pero cuando dejo en el formulario (con los productos a pagar) la ruta /cgi-bin/tbk_bp_pago.cgi para que se envie la información, en el navegador me sale “Internal Server Error”

    Que estoy haciendo mal, alguien me podría orientar por favor.

    De antemano muchas gracias.

  19. Si, me ha pasado más de una vez que el modo en que se suben los archivos los corrompen, pero desde que uso FileZilla para mover los archivos de transbank al menos no he tenido más problemas, porque dependiendo del tipo de archivo lo sube de un modo u otro, aunque hay que tener ojo con los CGI porque transbnak necesita que se transfieran de modo binario y File Zilla por defecto los tratará de transferir de modo ASCII.

  20. Hola a todos,
    esto de Transbank es un puro dolor de cabeza.

    Logré en varias ocasiones de intalar el kit 6.0 y también me certificaron.
    Peró con un servidor de dedicado de 1and1 me tira un error.

    Siempre me dá error de ack (error 46). Leyendo parece que es un problema de timeout. Probé cambiando el timeout del apache peró siempre me envia a fracaso.

    Como ya sabrán el servicio técnico de Transbank es inexistente.
    Le ha pasado alguna vez este problema?

  21. holas, llegué hasta acá dentro de la desesperación porque esta shit no quería funcionar ni a palos.

    Un factor a considerar, es que el archivo de configuración (tbk_config.dat), además de los archivos de claves (en maestros) NO tengan el caracter raro chr(13) (“0d” en hexadecimal).

    al hacer un hexdump -C tbk_config.dat pude ver que los saltos de línea estaban con “0d” y “0a”, el lugar de sólo “0a”.

    Quitando los “0d” se dignó a funcionar.

    El otro suplicio fue descubrir, con cierto pavor, que la página de validación HTML_TR_NORMAL no puede estar por https (443), sólo por 80 (http).

    Con esos dos puntos resueltos, la cosa funcionó. Espero les sirva de algo =)

  22. Exacto! Lo que tu mencionas primero es el tema de la “nueva línea” o “salto de línea” aquí hay un artículo que explica un poco la teoría del tema http://es.wikipedia.org/wiki/Nueva_l%C3%ADnea . Tengo la idea que en alguna parte del manual aclaran que hay que usar sólo nueva línea y no los 2 caracteres que usa windows, en PHP sería \n en vez de \r\n.

    Lo segundo que describes es el puerto de conexión y en general, depende de la versión de KCC que uses: 443 para 6.0 y 80 para 5.1, por lo que asumo que integraste en 5.1

    Si lograste integrar en 6.0 en Linux por favor sería increíble que nos dieras un punteo de cómo lo hiciste y cómo resolviste el problema.

  23. fss y Agustín. Efectivamente con Hexdump tengo 0d y 0a que según vi es retorno de carro más salto de línea. Como puedo sacar el 0d? Gracias.

  24. Normalmente hago que notepad++ o Sublime Text 2 lo hagan por mi.

    En ST2 vas a View > Line Endings > Unix

    En Notepad++ Editar > Conversión fin de línea > Convertir a formato UNIX

    Con eso debieras quedar OK.

  25. Estoy integrando el KCC 6.0 pude configurar todo, ahora estoy haciendo las pruebas solo con el kit de instalación no tengo el id del comercio ni los maestros *.pem Pero me lanza el siguiente error

    ERROR: No se ha podido establecer la conexión

    Es porque me faltan esos datos?! o se puede probar con datos ficticios?

  26. Hola Albert:
    Primero revisa lo siguiente:
    Que los valores en URLCGICOM y HTML_TR_NORMAL sean una dirección absoluta y no usen protocolo https

    URLCGICOM = http://www.tienda.cl/cgi-bin/tbk_bp_resultado.cgi
    HTML_TR_NORMAL = http://www.tienda.cl/seguro/compra.php

    Luego revisa el log de la transacción, si la última línea dice “todo OK”, es porque está ok.
    Lo único que podría ser es que las llaves que estás usando no sean las correctas (nunca me ha resultado 6.0 con las llaves que vienen de paquete). Ponte en contacto con la gente de soporte y pide llaves nuevas.
    Si eso no funciona, probablemente tendrás que guardar la configuración como está. Luego pedir certificar usando el KCC 5.1 y una vez en producción migrar de vuelta a 6.0.

    Así de complicada es la experiencia.
    Igual no soy el máximo experto, pero puedo decir que he integrado ya varias tiendas, aunque sólo una usando 6.0 y eso que ya estaba certificada.
    Espero te sea de ayuda.

  27. Agustin, gracias por tu respuesta, me funciono al final así que ultra feliz :) creo que era el archivo tbk_config.dat los permisos y la IP que no la tenia al final le puse dominio.cl en vez de un número IP pero esta corriendo :)

    Bueno ahora debo terminar la integración de php con el sistema y listo :)

    Gracias por tu valiosa ayuda ^_^

  28. Qué bueno que te hay funcionado!
    Es una lata hacer esta pega y sin explicaciones en la web.
    HTML_TR_NORMAL funciona mejor con el dominio, la IP a veces no funciona, sobre todo si el servidor tiene más de un dominio en esa IP.

  29. Estoy integrando el KCC 6 he configurado todo (creo), en el .log me sale TODO OK, pero la transaccion de webpay siempre me redirige a la página de fracaso.

    los 3 archivos cgi los tengo con permiso 755

    el archivo tbk_config.dat lo he modificado directamente el hosting con codificacion utf-8, ¿puede que el error sea algo por el estilo?

    en todo el proceso el archivo de cierre (xt_compra.php), nunca se ejecuta, por lo tanto supongo que el error no es en este archivo.

    por descarte lo unico que se me imagina que algo estoy haciendo mal en el tbk_config.dat… pero ya he probado de todo -_-

    a todo esto en el KCC 6, le modifique el medcom a 2, porque si lo dejo en 1 no me funciona.

  30. Hola Fabian:
    Si no te está funcionando con MEDCOM en 1 es por que tienes aún problemas en alguna parte. MEDCOM 2 sólo debes usarlo para integrar 5.1 .
    Si usas MEDCOM 1 ¿Qué error te da?
    Si usas coficicación UTF-8 sin BOM y no tienes caracteres fuera del rango ASCII no debiera haber problema.

  31. Hola Agustin, Gracias por contestar.

    Si pongo MEDCOM 1 me arroja este error ERROR: No se ha podido establecer la conexión.

    y en el LOG este es el error

    6107715646; 526; ;pago ;https://certificacion.webpay.cl ;21122012 ;133530;190.100.139.24 ;ERR;597026007976 ;No se pudo decifrar el contenido, posible error de llaves
    6107715646; 526; ;pago ;https://certificacion.webpay.cl ;21122012 ;133530;190.100.139.24 ;ERR;597026007976 ;283

    para usar MEDCOM 1 utiliza SSL, es aqui donde no entiendo… ¿tengo que hacer algo especial en el hosting ?, porque hay un panel de administracion de SSL en el cpanel (hasta ahora ni lo he tocado)

    y leyendo el manual del KCC6 hay una parte que dice

    Observaciones:
     El parámetro MEDCOM = 1, como se indicó anteriormente, requiere de SSL para su funcionamiento, lo que implica que el comercio pueda establecer una comunicación directa con las IP’s de Transbank al puerto 443 (la url de conexión es https://webpay.transbank.cl)
     Las IP’s de Transbank (Producción) a las que el comercio debe permitir el tráfico (comercio -> Transbank), son las siguientes:
    o 200.10.14.162
    o 200.10.14.163
    o 200.10.12.162
    o 200.10.12.163
    o 200.10.14.34
    o 200.10.14.177
     Las IP’s de Transbank (Certificación) a las que el comercio debe permitir el tráfico (comercio -> Transbank), son las siguientes:
    o 200.10.12.55 (IP de desarrollo)
     Se recomienda filtrar por las IP’s listadas anteriormente el acceso a la cgi tbk_bp_resultado (ver sección 7.3.2) para asegurar que sólo Transbank pueda ejecutarla.

  32. monte mi propio servidor con xampp en windows y pude integrar el KCC 6 sin problemas, con MEDCOM 1 y no me manda el error de llaves, el problema está cuando lo quiero implementar en un hosting

  33. Gracias por la ayuda Agustín. Por si a alguien le sirve, ese caracter se puede borrar también en Editra (para Mac OS y Windows) llendo a Format -> EOL Mode -> Unix (\n)

  34. Transbank me respondio lo siguiente, por si es de ayuda para alguien.

    Según los antecedentes que nos envías por favor te regaré que revises los permisos de la carpeta y las llaves estén en 7-5-5, si es así tendría que copiar las llaves que se encuentran en el kit nuevamente subiéndolos de forma binaria, además de todo esto por favor cambiar el MEDCOM a 2.

  35. Por fin me funciono el KCC6 en un hosting linux 32… en un hosting linux 64 no he podido.

  36. Hola Fabian.
    Veo que seguiste la batalla durante el fin de semana, heroico!
    Bien, si lo has logrado en LINUX 32bits pues estás a un paso teórico del éxito.

    Copia todo al de 64 bits, copia los permisos, (y ajusta las URLs si es necesario), haz una prueba y revisa el log de errores de tu servidor de 64bits.
    Si te encuentas con algo como esto: [Mon Apr 30 09:37:36 2012] [error] [client 200.83.154.10] tbk_bp_pago.cgi: error while loading shared libraries: libidn.so.11: cannot open shared object file: No such file or directory, referer: http://tienda.cl/pago.php
    Pues tienes 2 opciones, conseguir desde transbank las CGI para 64 bits, o puedes instalar las librerías que probablemente te están faltando. Para instalar las librerías necesitas acceso de root al servidor y saber instalar librerías.

    Luego de ese paso debieras poder meter el número de tarjeta y simular un pago, probablemente no funcione en totalidad, pero eso puede ser un error de llaves.
    Algo que sospecho, pero no he confirmado, es que hay algo malo en las llaves de prueba que pasa transbank, probablemente sólo funcionen en 32 bits. En 64 bits he logrado corregir el problema en producción generando llaves nuevas, pero en entorno de certificación te las mandan hechas. Ve si te puedes conseguir llaves “actualizadas” para 64bits o algo por el estilo.

    Sobre lo que dice el manual sobre SSL, la verdad es que es bien confuso y han hecho que varios clientes compren certificados de seguridad que no se necesitan.

    Lo que sale en el manual sobre SSL hace referencia a que se necesita puerto seguro para comunicarse entre servidores (mediante protocolo SSL), lo que no significa que uno necesita comprar un certificado SSL. La gran mayoría de los servidores tiene ese puerto abierto para comunicaciones y con eso basta. De hecho, el tener certificado de seguridad me ha provocado más problemas que soluciones, aunque a muchos clientes les gusta tener el candadito verde en su tienda.

  37. Hola Agustín,
    Te cuento,
    Intente en un plan “empresa” en hosting.cl Linux 32 bit pero no pude integrarlo, en el log salía TODO OK, y se supone que después de eso debería salir TBK_PARAM desencriptado; Entidad emisora de los datos validada; Parseo de los datos… etc. Etc. (Me imagino que debe ser algún puerto bloqueado ya que ni siquiera se ejecuta el compra.php)

    Luego intente en un hosting gratuito “heliohost” Linux 64 bit, en este hosting pasaba la etapa del TODO OK, se ejecutaba el archivo compra.php, pero siempre se dirigía a la página de fracaso, en el log arrojaba “Error al obtener ack (46)”, pero era lógico, el hosting tenía deshabilitado las funciones “Exec”, pero por lo menos me sirvió para saltar a otra etapa y no quedarme pegado en el “TODO OK”

    Por ultimo intente en un hosting de “go daddy”, Linux 32 bit, y en este hosting pase la etapa del TODO OK, y el error del ack (46).

    Sería interesante probar en un servidor Linux de 64 bit, pero uno gratuito difícil que cumpla los requerimientos de transbank.

  38. Wow! te pegaste unas buenas vueltas! Qué bueno que lo hayas hechado a andar. ¿Vas a tener que cambiarte de hosting?
    Gracias por darnos otra razón por la cual aparece el error ack (46): que no se puedan ejecutar funciones “Exec”.

  39. Voy a tener que buscar un hosting, encontre uno que dice ser optimizado para webpay, pero ahi estoy viendo…

    Lo que pasa que los hosting (hosting.cl, go daddy) donde intente la integracion son de amigos, ahora que ya pude hacerlo funcionar, debo buscar uno para mi.

  40. Nicolás ahí mismo es donde me he quedado pegado innumerables veces.
    Si estás en KCC 6.0 y logras arreglarlo por favor coméntanos cómo lo hiciste, pues a mi nunca me ha resultado. Pero por si acaso: ¿estás usando https en el parámetro HTML_TR_NORMAL ? si es así, trata usando sólo http, me resultó una vez, pero en entorno de producción.

  41. Yo todavia no puedo pasar de esa parte, me comunique con el soporte de transbank y me dijeron que revisara los permisos (755) y el firewall, pero aun no funciona. El server es linux de 64

  42. A mi me pasa lo mismo que Gonzalo, los de Soporte me dijeron que era un error de los CGI que no se podían, también con el Firewall y puertos, pero el soporte de Hosting me dijo que estaba todo OK.

    Ya no se que puede pasar, me estuvo funcionando perfectamente una vez, moví algunas carpetas en el servidor y ahora no conecta con la página de cierre.

    Dejo mi correo para que nos ayudemos.

    isaias1706@gmail.com

  43. Genial! Gracias Fabián por la ayuda!
    ¿Y efectivamente llama la página de cierre?
    ¿Ye estás finalmente en un servidor de 64 bits?

  44. Si!! Por fin pase a la siguiente parte. Efectivamente tuvo que ver el tema del ASCII. Elimine el tbk_config y lo volvi a subir con un cliente FTP.

    Increible haber perdido tanto tiempo en ese detalle. (Al parecer, editandolo con vim lo guardaba como binario)

    Gracias Fabian

  45. Qué bueno que les haya resultado,

    Agustín, Estoy en un Linux 32, con KCC 6.0, utilizando MEDCOM 2.

    Voy a ver si me consiguo un linux 64 para realizar pruebas y te comento.

    El error que me encontré y nunca pude solucionarlo fue que en el log sale “todo OK” y no ejecuta el compra.php dirigiendo siempre a la pagina de fracaso.

  46. Ya hice las pruebas en un hosting de 64 bits y funciono, es gratuito por lo que derrepente se cae y sale el error 404, este es el link de prueba http://fasme.heliohost.org/pago.php , solo abri la cuenta para probar transbank.

    este hosting no permite la funcion EXEC, por lo que te saldrá el Error al obtener ack (46), para solucionar eso tube que substituirla por la funcion FILE_GET_CONTENTS.

  47. me falta lo último, mi problema es que cada vez que presiono pagar (en la página de webpay) siempre me lanza a fracaso y nunca se ejecuta el archivo xt_compra.php y no tengo idea porque :(

  48. Fabian, ya lo pude reparar, sucede que trabajaba en Windows en mi computador y el archivo tbk_config.dat subia en formato windows/dos me cambie a linux hice cambios y guarde el archivo lo volví a subir y funciono de inmediato :) ese era el problema ^_^

    Gracias a todos :) :) :)

  49. Alguien puede ayudarme por favor, llevo días intentando que funcione y sigue sin conectar con la página de cierre. Desde el soporte de Transbank dijeron que era por si Mod_Security estaba habilitado, pero no lo está. Firewall, no tengo ninguno instalado en el hosting, permisos OK y llaves subidas en modo ASCII. También me han dicho que implemente algún tipo de filtro con la IP de ellos, pero desde el soporte de hosting me han dicho que el servidor (VPS) está optimizado para la integración de Webpay.

    Cualquier sugerencia o ayuda será agradecida.

    Gracias :)

  50. Muchachos cuando se conecte y se les caiga en la pagina
    https://certificacion.webpay.cl:6443//bp_revision.cgi

    posiblemente es un error en las llaves maestras ….. a mi me paso eso una vez..la cambiaron y funciono

    Lo otro importante son los permisos, que tienen que ser asi:
    cgi-bin/datos/tbk_config.dat (644)
    tbk_bp_pago.cgi (755)
    tbk_bp_resultado.cgi (755)
    tbk_check_mac.cgi (755)
    cgi_bin/maestros/tbk_public_key.pem (644)
    cgi_bin/maestros/privada.pem (644)

  51. La configuracion del tbk_config.dat tiene que ser exacta a esto:

    IDCOMERCIO = 597026007976
    MEDCOM = 2
    TBK_KEY_ID = 101
    PARAMVERIFCOM = 1
    URLCGICOM = http://www.tusitio.cl/cgi-bin/tbk_bp_resultado.cgi
    SERVERCOM = 54.24.27.196
    PORTCOM = 80
    WHITELISTCOM = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789./:=&?_
    HOST = 54.24.27.196
    WPORT = 80
    URLCGITRA = /filtroUnificado/bp_revision.cgi
    URLCGIMEDTRA = /filtroUnificado/bp_validacion.cgi
    SERVERTRA = https://certificacion.webpay.cl
    PORTTRA = 6443
    PREFIJO_CONF_TR = HTML_
    HTML_TR_NORMAL = http://www.tusitio.cl/xt_compra.php

    *ojo en las dos lineas que dice http://www.tusitio.cl tiene que ser obviamente reemplazado por tu pagina
    *en las dos lineas que 54.24.27.196 tiene ser reemplazado por la ip de tu servidor ..para ver esto es facíl entran en cpanel y revisan la ip…y listo …SLDS

  52. Mauricio,

    estoy realizando la implementacion de webpay y llego hasta este error “En este momento no es posible procesar su transacción”

    el archivo tbk_config.dat

    tiene la siguiente configuracion

    IDCOMERCIO = 597026007976
    MEDCOM = 2
    TBK_KEY_ID = 101
    PARAMVERIFCOM = 1
    URLCGICOM = http://misitio/KCC/cgi-bin/tbk_bp_resultado.cgi
    SERVERCOM = miip
    PORTCOM = 80
    WHITELISTCOM = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789./:=&?_
    HOST = miip
    WPORT = 80
    URLCGITRA = /cgi-bin/bp_revision.cgi
    URLCGIMEDTRA = /cgi-bin/bp_validacion.cgi
    SERVERTRA = https://certificacion.webpay.cl
    PORTTRA = 6443
    PREFIJO_CONF_TR = HTML_
    HTML_TR_NORMAL = http://misitio/KCC/cierre.php

    Saludos

  53. Hola… estoy implementando Webpay, y tengo todo casi listo, el único problema es que cada vez que presiono pagar (en la página de webpay) siempre me lanza a fracaso y nunca se ejecuta el archivo xt_compra.php…. que puede ser????

  54. Mauricio:

    para el modulo de integración debes usar:

    URLCGITRA = /filtroUnificado/bp_revision.cgi
    URLCGIMEDTRA = /filtroUnificado/bp_validacion.cgi

    saludos

  55. Hola Álvaro.
    A muchos nos ha pasado el mismo problema, en los comentarios de más abajo hay varias cosas que puedes revisar y descartar.
    El URCGITRA y URLCGIMEDTRA están ok, el problema debe estar en otro lado.

  56. Rodrigo a simple vista tienes un error en

    URLCGICOM = http://misitio/KCC/cgi-bin/tbk_bp_resultado.cgi

    tiene que ser asi:

    URLCGICOM = http://www.misitio.cl/cgi-bin/tbk_bp_resultado.cgi

    osea la carpeta cgi-bin tiene que esta en el directorio public_html

    aunque los otros archivos esten en: http://www.misitio.cl/test/

    me explico?

    ademas veo el error en esas lineas…tiene que ser asi
    URLCGITRA = /filtroUnificado/bp_revision.cgi
    URLCGIMEDTRA = /filtroUnificado/bp_validacion.cgi

    Slds

  57. Fabián Muñoz, hay alguna forma de contactarte?
    Tengo algunos atados que ya te han pasado, con el error 283.
    Saludos

  58. Porque son moderados y estoy de vacaciones. Mil disculpas, estoy aprobando los comentarios atrasados ahora.

  59. Buenas, estoy en un servidor con linux x64.
    No he podido hacerlo andar, de tanto cambiar y configurar, ahora no me arroja logs, ¿Alguna idea?
    Saludos!

  60. Estimados,

    Estoy teniendo el mismo problema que he visto reportado aquí. La CGI simplemente no ejecuta la página de cierre. No me da un error ni nada, simplemente deja en el log el paso de “Todo OK” y después no hace nada. Verifiqué los permisos archivo por archivo y carpeta por carpeta y están todos bien… incluso subí archivo por archivo en modo binaro o ascii según corresponda y lo mismo. Alguien tiene alguna idea de porqué se produce esto?

  61. A lo anterior, agrego que también copié vía shell la carpeta CGI-BIN de otro sitio que tengo en el mismo server (y que el pago anda sin problemas), sólo cambié el config, nada más… en ese sitio el pago funciona sin problemas, pero en el sitio al que copié la CGI-BIN me deja en el mismo problema que mencioné anteriormente, a pesar que tiene los mismos permisos, cuec.

  62. Tengo un problema a la hora de implementar el programa. Me da error 46 y no llega a la verificacion del mac:
    ;OK ; ;tienda NO acepto transaccion
    ;OK ; ;respuesta enviada a TBK (ERR)
    ;Error al obtener ack (46)
    ; ;ERR; ;46

    he probado en el archivo xt_compra.php (copiado y pegado tal cual del manual) a poner en los 3 datos que hay que configurar, tanto rutas absolutas como relativas y no hay manera de que funcione y me tiene loco este tema. ¿Podéis echarme una mano? Gracias de antemano.

  63. Eso significa que tu script xt_compra.php respondiendo con algo diferente de ACEPTADO, puede ser un error que el serviodor imprime, algún notice. Usa ob_start(); y ob_flush(); para guardar lo que está mostrándole tu servidor a transbank cuando accede a la página.

  64. Hola:
    En estos momento me encuentro creando un modulo para prestashop 1.4 el cual implemnta lo que es webpay plus, ya casy tengo tdo terminado, puedo recoger las variables, al revisar el log generado me arroja que todo esta ok, el inconveniente que se me presenta es que al redireccionar, me manda a la siguiente url https://certificacion.webpay.cl:6443//bp_revision.cgi ya revise el archivo tbk.config.dat pero esta todo correcto, alguien que tenga una nocion al respecto?

  65. Resubi los archivos en acsii, pero aun persiste el problema he probado haciendo telnet al puerto 6443, pero no tengo respuesta soporte me respondio si no tengo acceso a ese puerto no puedo continuar con la certificacion…

  66. Este problema ya me ha consumido bastante tiempo y es basicamente lo ultimo que me falta.
    ERROR: No se ha podido establecer la conexión

    El log dice:
    3459099011; 30691; ;pago ;https://certificacion.webpay.cl ;16032013 ;153819;190.162.207.12 ;ERR;597026007976 ;No se pudo decifrar el contenido, posible error de llaves
    3459099011; 30691; ;pago ;https://certificacion.webpay.cl ;16032013 ;153819;190.162.207.12 ;ERR;597026007976 ;283

    La maquina es de 64 bits y lo mas magico de todo es que hasta hace unos dias este problema NO EXISTIA. Funcionaba todo perfecto y sin cambiar nada, dejo de funcionar.

  67. Estimados:

    Tengo el mismo problema que Luis Moënne
    Luis, ¿Pudiste arreglarlo?
    ¿Alguien sabe como arreglar este problema?
    La verdad me tiene atascado y ya he probado todo.

    Saludos

  68. Si tienes error 283 puede ser que no subiste bien las llaves privada,pem o tbk_public_key.pem, prueba subiendolas en ASCII.
    Tambien puede ser que estes tratando de usar el servidor incorrecto de Tbk, tiene que ser:
    URLCGITRA = /filtroUnificado/bp_revision.cgi
    URLCGIMEDTRA = /filtroUnificado/bp_validacion.cgi
    SERVERTRA = https://certificacion.webpay.cl
    PORTTRA = 6443
    Porsupuesto el codigo de comercio de pruebas:
    IDCOMERCIO = 597026007976
    Y debes tener el parametro TBK_KEY_ID = 101, cuando uses la llave publica de 4096.
    Tambien puede probar cambiando a MEDCOM=2, en ese caso el error 283 (si se mantiene) no sale en el log sino en el navegador.

  69. Chicos me he guiado solo por el manual cosa que es un asco… hay muchas fallas de síntesis.
    El servidor es Linux 32/64
    tbk_config.dat lo tengo de esta manera.


    IDCOMERCIO = 597026007976 ----> Id de prueba ? esta bien ?
    MEDCOM = 2
    TBK_KEY_ID = 101
    PARAMVERIFCOM = 1
    URLCGICOM = http://www.adenidown.cl/cgi-bin/tbk_bp_resultado.cgi
    SERVERCOM = 201.238.235.240
    PORTCOM = 80
    WHITELISTCOM = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789./:=&?_
    HOST = 201.238.235.240
    WPORT = 80
    URLCGITRA = /cgi-bin/bp_revision.cgi
    URLCGIMEDTRA = /cgi-bin/bp_validacion.cgi
    SERVERTRA = https://certificacion.webpay.cl
    PORTTRA = 6443
    PREFIJO_CONF_TR = HTML_
    HTML_TR_NORMAL = http://www.adenidown.cl/webpay/xt_compra.php ---> en el manual esto esta extraño.

    Ahora el problema mio son los php. En los manuales esta muy pero muy extraño.
    Alguno de ustedes tiene los códigos bien? O algun ejemplo tienen por hay?

    Me refiero a
    Pago.php
    xt_Compra.php
    Éxito.php
    Fracaso.php

  70. Estimados, alguno que haya realizado la implementacion de webpay en php me podría enviar su pagina de xt_compra.php, para compararla con la mia ya que soporte me indica que tengo problemas con el tema de validar el monto de compra, pero al probarlo yo me funciona sin problemas, atento a sus respuestas…

  71. Alguna idea de por que arroja este error al ser rechazada una transaccion?
    tienda NO acepto transaccion
    ; 3043; ;resultado ;050309080704 ;14042013 ;205620;200.10.12.55 ;OK ; ;respuesta enviada a TBK (ERR)
    5990940992; 3043; ;resultado ;datoscom ;14042013 ;205620;200.10.12.55 ;Ok ;597026007976 ;Error al obtener ack (46)
    ; 3043; ;resultado ;050309080704 ;14042013 ;205620;200.10.12.55 ;ERR; ;46

  72. Ese problema es la validacion del monto, fijate en los ceros finales como recibes y como comparas, ocupa un round y solucionado.

    Slds!

  73. Roberto gracias por la respuesta pero la verdad ocupe el round pero aun asy me sigue arrojando el mismo error error 46, e comprabado el check mac, los montos y que la transaccion sea = a 0, pero no desaparece el error 46.
    Saludos.

  74. Carlos pega el siguiente código al principio de tu página de cierre.


    error_reporting(-1);//reporte todo
    ob_start();

    /*
    DE AQUÍ EN ADELANTE VA TODO TU CÓDIGO DE CIERRE
    */

    Luego pega tu código y al final lo siguiente.


    $emilio = 'tu@example.com';
    $impreso = ob_get_contents();//esto rescata todo lo que se está respondiendo
    //if($impreso !== 'ACEPTADO')://esto evita que te llegue un correo por las transacciones ok. Por ahora lo dejo comentado para que llegue todo
    $adicional = " \n
    POST: ".print_r($_POST, true)." \n
    GET: ".print_r($_GET, true)."\n
    HEADERS: ".headers_list()."\n
    SERVER: ".print_r($_SERVER, true).'';
    if( function_exists('http_response_code') )$adicional.=" HTTP RESPONSE CODE: ".http_response_code()."\n ";
    $impreso.=$adicional;
    if(@is_dir("cgi-bin/log/"))@file_put_contents('cgi-bin/log/mis_propios_log_'.time().'.log', $impreso);//esto está guardando un log en la carpeta de logs (si la encuentra)
    $headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    @mail($emilio, 'Transaccion webpay '.time(), "El archivo de cierre ha respondido lo siguiente: \n".$impreso, $headers);
    //endif;

    ob_flush();

    (cambia la variable $emilio a tu correo), haz una prueba y revisa tu email.
    Lo que debiera llegar es ACEPTADO, si no es así, vas a tener un error 46. Y el email tendrá todos los detalles de lo que vio el servidor de transbank.

    Espero te sirva.

  75. agustin grasias por responder e realizado lo que me pediste pero solo veo los datos que se envian al server de transbank, lo curioso de mi error es que solo se presenta cuando la transacion es rechazada, por que al ser aceptada se ejecuta correctamente todo, aun asy me arroja el error 46..

  76. O sea, está bien que arroje el error 46 si es que hay algo raro en el procedimiento, ya sea, el monto lo calza, el ID de la transacción está mal, el check mac no cumple,etc. Está bien que en esos casos salga error 46.

    Pero si la transacción no es aceptada desde el banco, ya sea por falta de fondos, cupo lleno para el día o rechazo desde el banco; tu debes igual contestar ACEPTADO desde la página de cierre.

    ¿El email que te llega dice sólo ACEPTADO en caso de rechazo o sale otra cosa?

  77. Agustin me puedes dar tu email pra enviarte la respuesta que da tu script, en la pagina de cierre me falta ese pequeño detalle para terminar la aplicacion y terminarla por si me puedes echar una mano,

  78. Estimados intento configurar el KCC lo primero que me sale es este error “ERROR: No se ha podido establecer la conexión” y en el log me muestra esto: ; 1091; ;pago ; ;18042013 ;132923;186.105.107.40 ;ERR; ;1

    Me pueden orientar?? saludos

  79. Grasias a algunos consejos de esta web el dia de hoy he certificado mi sitio, cualquiera que necesite ayuda, no dude en pedirla, saludos…..

  80. ERROR 46: “ERR_OBTENER_ACK”. Cuando el script (o página) de cierre no devuelve ACEPTADO. Algunas causas típicas suelen ser fallo de validaciones propias en el script de cierre, fallo de validación de MAC en script de cierre o respuesta errónea de transbank (Ej: TBK_RESPUESTA: -3 cuando se usa ciertas tarjetas en ambiente de pruebas).

    Para comprobarlo, es cosa de reemplazar momentáneamente (previo respaldo) TODO el contenido del script de cierre por un simple ACEPTADO sin más caracteres. Si esto funciona, el problema claramente es el cierre y habría que agregar debug al script de cierre para ver por qué no devuelve el ACEPTADO que espera tbk_bp_resultado.cgi que la invocó.

  81. Cuando se redirecciona a https://certificacion.webpay.cl:6443//bp_revision.cgi en vez de https://certificacion.webpay.cl:6443/webpayserver/bp_revision.cgi la causa típica es por los saltos de línea de archivo de configuración tbk_config.dat, que son tipo Windows (así viene en los archivos comprimidos que se descarga desde el sitio de Transbank a Mayo del 2013). Al cambiar los saltos de línea a tipo Unix (en cualquier editor de texto medianamente funcional), debiera solucionarse.

  82. ERROR 283: No aparece en manual. ERROR de encriptacion – Invalid Signature (283). En log de eventos aparece como ;No se pudo decifrar el contenido, posible error de llaves; 283

    Puede aparecer por diversas causas relacionadas a la encriptación, más tipicamente al usar KCC6 que usa llaves pública y privada. Una causa frecuente es una llave privada.pem incorrecta. En este caso, hay que reemplazar por la correspondiente para el sitio y el ambiente: la usada para ambiente de certificación es común para cualquier sitio (copiarla desde el manual de integración del KCC). La de productivo es propia de cada sitio asociada al ID del Comercio.

  83. Dice “99 thoughts on “Cómo Configurar Webpay en PHP””, pero solo aparecen 49. ¿Qué fue de los otros 50 comentarios?

  84. Probablemente fueron 50 comentarios que eran spam, no los cuento la verdad.

  85. Para el caso de Error46, el script de cierre idealmente debiera registrar paso a paso efectuado en un LOG o agregar líneas de DEBUG (con salida a consola, log, base de datos, correo u otro tipo de registro), para detectar exactamente en qué punto falla antes de devolver ACEPTADO.

  86. Un caso con bastantes complicaciones suele ser cuando el log de eventos queda en “Todo OK” y no se registra invocación a tbk_bp_resultado.cgi (invocado desde transbank, que escribe en log bitácora e invoca script de cierre), pues las causas pueden ser muchas. Para descartar las más obvias (permisos de la cgi, cgi no visible por firewall o mod_security, etc.), invocar en un navegador la dirección configurada en URLCGICOM, ej: http://www.misitio.cl/cgi-bin/tbk_bp_resultado.cgi
    Y verificar en el log de acceso (o el que haya disponible) si fue invocada o no.

    Esta es una prueba necesaria pero no suficiente. Si al invocar la cgi en el navegador, despliega varias líneas de caracteres, quiere decir que al menos es visible desde internet para invocaciones GET. Luego puede intentarse emular la invocación POST que efectúa el servidor de Transbank, monitoreando el log de acceso del servidor para asegurar que la cgi es invocada.

  87. Hola, que bueno encontrar esta discusion. Al parecer hay varios problemas siempre con la integracion de webpay. A mi me ha dado las 3 veces que lo he integrado problemas con la subida de los CGI como binarios. En todas las oportunidades he tenido que copiar manualmente los archivos al server (no por ftp) y ahi ha funcionado. He usado un sin numero de clientes ftp y en todos al parecer quedan corruptos los archivos. Lo que hice finalmente si alguien le ocurre lo mismo suban por ftp el archivo en zip. Luego en el mismo directorio donde subieron el zip creen un archivo php. Este codigo (usa libreria ZipArchive ) descomprimira el zip y manualmente muevan a la ubicacion correcta y le asignan los permisos 0755


    open($file);
    if ($res === TRUE) {
    $path = pathinfo(realpath($file), PATHINFO_DIRNAME);
    $zip->extractTo($path);
    $zip->close();
    echo 'lo hizo :D';
    } else {
    echo 'no lo hizo :(';
    }
    ?>

  88. Brillante Gonzalo!
    Es una muy buena solución subir los archivos en ZIP, así te aseguras la integridad de éstos.
    También se puede hacer por SSH unzip y chmod para quienes se manejan en la línea de comando.

    Nota que ZipArchive viene por defecto en cuaqueir instalación PHP 5.3 o superior.

  89. estimados: he buscado por todas partes informacion sobre la implementacion… en todos lados veo que da dramas y muchos aconsejan optar por khipu como instancia para pagos… lamentablemente mi cliente se calento con webpay y se lo tendre que integrar… si fuera posible hacer una guia en limpio de la implementacion seria de gran ayuda, ya que de las pocas que hay estan incompletas y con errores de datos… saludos y gracias :)

  90. Tengo el mismo problema, en el archivo log “TODO OK” pero no hay caso que me cargue la página de cierre, he descartado todo (creo…) pero ya no se que hacer, estoy pegado 2 dias con este problema, he probado de todo… alguien que haya tenido este problema?

  91. Alejandro: 4 comentarios antes del tuyo mencionaba algunas pruebas a efectuar para diagnosticar el problema del “Todo OK” ¿Ya probaste invocar la “página de cierre” directamente desde un navegador? ¿Muestra algo? ¿Registra en el log?

    Si al invocar en navegador no muestra nada, prueba reemplazarlo por un archivo de texto que diga “ACEPTADO” y nada más (sin comillas, claro). Si no logras ver el “ACEPTADO”, el problema claramente es de tu servidor.

    Si al invocar en navegador el script de cierre desponde, prueba invocarlo vía POST con otro formulario o CURL y captura el encabezado de la respuesta.

  92. Algunas alternativas de pago a Webpay:

    Adyen
    Paypal
    khipu
    pagomaster
    Unired
    DineroMail

    No he usado ninguna de éstas, por lo que queda a responsabilidad de cada quien decidir por alguno. Nunca se sabe si alguno pudiera ser un futuro “MisCuentas”…

  93. Hola, los links a los script pagina_cierre.php no están funcionando, podrías actualizarlos por favor.
    Gracias

  94. El error 34 ERR_REFERER se soluciona poniendo en el TBK_REFERER del archivo de configuración la página en la cual realizas la petición POST al script CGI.

  95. NOOOOO! nunca uses 777, a menos que realmente sepas lo que estás haciendo, o que estés en tu propio servidor al que nadie más tiene acceso… y aún así es peligroso. Yo todavía no conozco el caso en el que usar 777 sea beneficioso. 755 es más que suficiente para una carpeta y 644 para un archivo.

    revisa que efectivamente la carpeta sea accesible desde esa dirección, a veces las carpetas cgi-solo tienen permiso para ser accesada por los scripts del servidor. Pon un archivo html o un jpg en la carpeta y revisa que puedes acceder a ellos por esa dirección.

    Hace tiempo tuve un problema parecido, al final puse los archivos cgi en otra carpeta y me funcionaron igual (depende de la configuración del servidor).

  96. Instalando en un servidor CentOS x64 finalmente tuve que instalar la versión x32 de KCC. En mi caso había una librería falatnte mostrando el error

    [Fri Nov 15 15:13:07 2013] [error] [client 190.161.137.107] tbk_bp_pago.cgi: error while loading shared libraries: libidn.so.11: cannot open shared object file: No such file or directory

    Hay que descargar este RPM http://rpm.pbone.net/index.php3/stat/4/idpl/17698719/dir/scientific_linux_6/com/libidn-1.18-2.el6.i686.rpm.html y luego instalarlo:

    rpm -ivh libidn-1.18-2.el6.i686.rpm

    Ojalá a alguien le sirva.

  97. al final me cambie de servidor a godaddy aquí si funcionan los archivos cgi. es un servidor Windows 2008 server.

    subí todos los archivos que me envió trasbank. pero al hacer el pago desde el sitio aparece un error

    HTTP Error 502.2 – Bad Gateway

    The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are “Unrecognized character \x90 in column 3 at

    xxxxxxxxxx\tbk_bp_pago.cgi line 1. “.

    sabes que puede ser…?

  98. Eso tiene cara de ser problema del servidor http ¿es un IIS? no me suena a error de apache. ¿Estás usando PHP?
    Vas a tener que googlear el error, yo no encontré mucho con una pasada rápida.
    ¿Estás seguro que lo subiste como binario? podría ser eso.

  99. Hola,

    Gracias a esta discusión pude solucionar casi todos los problemas que se me presentaron al implementar webpay en opencart. No sólo saqué soluciones de la entrada sino también de los comentarios. Me falta solamente ver porqué me direcciona siempre al fracaso aunque la transacción sea correcta.

    Lamentablemente no tengo mucho tiempo para hacer un mini manual sobre como superé estos problemas, y aunque no soy para nada experto en webpay igualmente me pueden consultar sobre lo siguiente: El error de “En este momento no es posible realizar la transacción”, que no se encuentra el cgi de validación, el problema de permisos de la ejecución validando el MAC, etc.

    Muchas gracias!

    Saludos.
    Arnaldo.

  100. Hola Estimados
    A los que tienen el problema del

    https://certificacion.webpay.cl:6443//bp_revision.cgi
    Not Found
    The requested URL /bp_revision.cgi was not found on this server.

    Encontre el problema y la solucion…
    El problema es un caracter CTRL_M al final del https://certificacion.webpay.cl

    La solucion que encontre es
    cat tbk_config.dat | col -b > tbk_config.dat.ok
    mv tbk_config.dat.ok tbk_config.dat

    Con eso desaparecio el problema (como veran uso linux y tengo acceso directo a los directorios de webpay kcc 6 en la maquina) Espero les sirve… me rompi la cabeza varias horas para solucionarlo

    Slds
    Augustus

  101. Hola que tal un agrado me gusto mucho esta pagina ya tengo el kcc implementado he implementado webpay en opencart y ubercart

    mi pregunta es si alguien podria ayudarme a hacer el modulo de webpay para prestashop 1.5

    un saludo amigos muchas gracias

  102. ya solucione el problema de 502.2 la solución esta aquí http://www.wrensoft.com/zoom/support/faq_cgi_iis.html
    ahora tengo otro error.

    cuando realizo la venta todo funciona hasta que trasbank retorna a mi pagina la confirmación de la venta, siempre me sale rechazada. estuve mirando en el log y aparece esto
    .
    .
    .
    .
    ;mensaje enviado
    ;tienda NO acepto transacción
    ;respuesta enviada a TBK (ERR)
    ;Error al obtener ack (46
    ;46

    otra cosa que me pasa es :

    al ver el contenido del archivo xt_compra.php(pagina de cierre)
    tengo dudad con el contenido.

    en la línea 12 aparece
    /cgi-bin/tbk_check_mac.cgi $filename_txt”;

    pero en el archivo que te envía transbank viene in archivo tbk_check_mac.exe cual es el correcto ….?

    tampoco se han creado en el servidor los archivos

    datosxxxxxxxx y MACxxxxxx en la carpeta /común/

    espero que alguien pueda aclararme estas dudas

  103. estoy tratando de integrar webpay plus con opencart y cada vez que finalizo la transacción me envía a fracaso.

    mi VPS funciona de lo mas bien y las transacciones también. ya que primero me arme un piloto en php hasta que logre que funcione.

    pero ahora al final cuando me devuelve los valores al servidor…en el caso de opencart /index.php?route=payment/webpay_occl/callback (equivalente al xt_compra.php o pago.php ) me envia al fracaso

    este modulo webpay plus para opencart fue desarrollado por chilenos.

    alguien podría orientarme un poco gracias!!!

  104. Estimado,

    Estuve viendo tu blog, me gustaría saber si es posible que me compartieras como fue que solucionaste el error 42, actualmente tengo este log:

    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)
    42

    Muchas Gracias.

  105. Hola Oscar:

    Cuando sale el mensaje:

    tienda NO acepto transaccion

    en combinación con el error 42 es, probablemente, porque tu página de cierre no es accesible para transbank.

    Fíjete que la dirección que pones en URLCGICOM (en el archivo TBK_CONFIG.DAT) sea accesible desde tu propio servidor y desde un servidor externo.

    Puede ser otra cosa, pero en mi ha sido eso.

    Espero haber sido de ayuda.

  106. Muchas gracias,

    te cuento que finalmente mi problema no era ese … si no que el archivo TBK_CONFIG.DAT tenia carácteres de tabulación y no de espacio luego del igual para algunos parámetros.

    Lo cambie por espacios y funciono correctamente.

    Gracias!

  107. Qué bueno que lo pillaste.

    Que lata lo quisquilloso del parser que usan, en PHP no habría ocurrido ese problema.

  108. Tengo problemas al terminar la transacción siempre me envía a fracaso y no se ejecuta nunca el código de la página de cierre xt_compra.php.

    En el log lo ultimo que me arroja es OK ;597026007976 ;conectandose al port :(80)
    y hasta ahí no más llega , alguna idea del problema ?

  109. Hola, me reencanto tu blog, yo necesito integrar webpay plus también pero en WHMCS y aún no me he atrevido a hacerlo, estube asesorandome con un programador que cobra carisimo y dijo que para plataformas whmcs es muy complicado ya que está encriptado. D:
    Alguien lo ha intentado en whmcs?

  110. Estimados, estoy en proceso de certificacion y hasta aquí todo funciona a la perfección… a excepcion de 2 detalles que TRANSBANK me indica:

    1.- Notice: Undefined offset: 0 in /home/{privado}/catalog/controller/payment/webpay_occl.php on line 75RECHAZADO.

    2.- Inyectan Texto con un archivo html llamado MACKER el cual me valda una compra sin pagarla.

    Personalmente creo que en el paso 2 es problema de TransBank que da un servicio a medias y se lava las manos.

    En fin, quipen me pueda ayudar le agradecería.

    Si necesitan ayuda con el resto del proceso, no tengo problemas en ayudarlos.

  111. Hola Jorge:
    El error
    Notice: Undefined offset: 0 in /home/{privado}/catalog/controller/payment/webpay_occl.php on line 75RECHAZADO.
    es un notice de PHP que no es crítico para el funcionamiento del script, sólo avisa cosas como variables indefinidas o posiciones en arrays vacíos.
    En este caso pareciera que estás trtando de aceder un valor en la posición “0″ de un Array vacío (puede ser otra cosa tb).
    Puedes evitar los “Notice” modificando el reporte de errores en .htaccess (no me sé la directiva) o al principio del script webpay_occl.php con la siguiente línea.
    error_reporting(E_ALL ^ E_NOTICE);
    El segundo detalle no entiendo bien de qué se trata, pero me ha pasado que webpay, bajo ciertas circunstancias, acepta un pago aunque desde la tienda lo rechace, así que ojo.
    Espero esto te ayude algo.

  112. Agunstín, gracias por la ayuda, pero no me resulta. He probado depurar las variables y sigue saliendo el mismo mensaje de error.

    Lo que sí me preocupa es el asunto de que me puedan hacer ordenes de compra en opencart y me llegue el correo que indica que el pago fué realizado.

  113. Si pegas tu código en un ghist y pegas aquí el link, lo podemos revisar y ver las posibles soluciones.

    Lo de opencart es preocupante, quizá sea bueno revisar el código fuente de cómo se está conectando webpay con opencart y en qué momento se está avisando a opencart que la transacción fue exitosa. Pero con opencart no te puedo ayudar, puesto que nunca lo he usado.

    Cuéntame como te va.

  114. Tengo problemas integrando webpay con drupal, segui al pie de la letra el tuto pero me arroja el mensaje “ERROR: No se ha podido establecer la conexión”, fui a revisar el LOG y me dice: “No se pudo decifrar el contenido, posible error de llaves” Con el numero de error 283. Ya revisé tbk_config.dat, probé con MEDCOM 1 y 2, TBK_KEY 100 y 101, cargué los archivos ASCII por si las moscas, pero aún así me arroja el error.
    Alguien tiene ideas de como resolver este problema?

  115. Cabros, yo llevo un mes tratando de implementar esta lesera y ni los de soporte me han salvado. jajajaja

    En fin, les dire lo que he realizado y mis consultas.

    Lo que realice:
    -Permisos
    -De soporte me enviaron denuevo los archivos, porque segun ellos, los que envian vienen con parametros distintos.
    -Modifique el MEDCOM
    -Cambie todos mis archivos de la carpeta CGI al SCGI (hosting compartido)
    -Tome el xt_compra.php del manual y Cambie los split por explode (split me arrojaba un error)

    Mis consultas:
    -Si dejo el archivo xt_compra.php vacio y solo con el texto “ACEPTADO” la compra es aprobada.
    -Por alguna extraña razón no me genera ningún txt para validar la MAC. Nose si estarán mal especificadas las rutas o algo.
    -Definitivamente mi codigo, debe tenr un problema en alguna de las validaciones. Les dejo mi codigo de la pagina de cierre, a ver si alguien me puede echar una mano.

    =1){
    $monto=$detalle[0];
    $ordenCompra=$detalle[1];
    }
    //guarda los datos del post uno a uno en archivo para la ejecución del MAC
    $fp=fopen($filename_txt,”wt”);
    while(list($key, $val)=each($_POST)){
    fwrite($fp, “$key=$val&”);
    }
    fclose($fp);
    //Validación de respuesta de Transbank, solo si es 0 continua con la pagina de cierre
    if($TBK_RESPUESTA==”0″){ $acepta=true; } else { $acepta=false; }
    //validación de monto y Orden de compra
    if ($TBK_MONTO==$monto && $TBK_ORDEN_COMPRA==$ordenCompra && $acepta==true){ $acepta=true;}
    else{ $acepta=false;}
    //Validación MAC
    if ($acepta==true){
    exec ($cmdline, $result, $retint);
    if ($result [0] ==”CORRECTO”) $acepta=true; else $acepta=false;
    }
    ?>

    ACEPTADO

    RECHAZADO

  116. Cabros le pedi ayuda a isaias que dejo su mail de buena voluntad aca para ofrecer ayuda. isaias1706@gmail.com

    Realmente me ayudo, mi problema era de rutas:

    En el xt_compra.php estaba usando estas rutas:

    $myPath = “/home/public_html/scgi-bin/dato”.$TBK_ID_SESION.”.log”;
    //GENERA ARCHIVO PARA MAC
    $filename_txt = “/home/public_html/scgi-bin/log/MAC01Normal”.$TBK_ID_SESION.”.txt”;
    // Ruta Checkmac
    $cmdline = “/home/public_html/scgi-bin/tbk_check_mac.cgi $filename_txt”;

    Y solo habia que agregarle el usuario del ftp

    $myPath = “/home/USUARIO/public_html/scgi-bin/dato”.$TBK_ID_SESION.”.log”;
    //GENERA ARCHIVO PARA MAC
    $filename_txt = “/home/USUARIO/public_html/scgi-bin/log/MAC01Normal”.$TBK_ID_SESION.”.txt”;
    // Ruta Checkmac
    $cmdline = “/home/USUARIO/public_html/scgi-bin/tbk_check_mac.cgi $filename_txt”;

    BENDITO SEAS ISAIAS ME SALVASTE EL DIA. jajaja saludos.

  117. Hola a todos.

    Necesitaba una aclaración rápida. Estamos tratando de hacer funcionar el CGI de transbank, pero en nuestro servidor no permite ejecutar CGI. Lo único que nos permite ejecutar es Fast CGI.

    ¿Alguien puede decirnos si esto es posible o no? Gracias!

  118. Hola! no te preocupes, para webpay CGI o Fast CGI da lo mismo, yo lo he usado con los 2 y no es necesaria ninguna configuración especial. En general tengo todos mis sitios corriendo con Fast CGI.

  119. Agustin, muchas gracias por tu respuesta. Entonces la culpa de que no funcione debe ser de nuestro servidor que por alguna causa no ejecuta los CGI con FastCGI, ya que al acceder por url a cgi-bin/tbk_bp_pago.cgi lo que hace es descargar el archivo en vez de ejecutarlo.

    Un saludo!

  120. Eso pasa cuando el los archivos cgi no tienen permiso de ejecución, para descartar que sea problema de webpay, búscate algún archivo CGI en internet que haga algo simple, “hello world” o algo por el estilo, y trata de ejecutarlo.

    Igual, depende el hosting, puedes necesitar configuraciones especiales para ejecutar scripts cgi, algunos se configuran con el .htaccess, otros sólo te dejan correr scripts dentro de la carpeta cgi-bin, y peor aún, a veces la carpeta cgi-bin, no está dentro de la carpeta raíz del sitio (lo que complica un poco las cosas).

    Suerte con esa configuración

  121. Agustín, muchas gracias por los comentarios. Pero al final, resulta que nuestro servidor no permite (me lo han confirmado) la ejecución de CGI’s ni siquiera bajo FastCGI, así que la solución, como bien comentabas, supongo que será un cambio de servidor a uno que sí lo permita. Muchas gracias por todo y un saludo.

  122. estoy integrando y cuando realizo transacciones con tarjeta de credito las acepta pero al realizar de debito lleva a la pagina de fracaso , que podria ser ?

  123. Las veces que he tenido ese tipo de problemas han sido cookies, las transacciones incompletas en transbank suelen dejar cookies que parecen bloquear futuras transacciones. Es lo único que se me ocurre, porque el tipo de tarjeta no tiene relevancia en la integración.

  124. Hola RicPxl
    El otro día nos pasó de nuevo, si mal no recuerdo salta cuando hay errores en la página de cierre y devuelve algo que no sea ACEPTADO.

    Actualmente ob_start(), ob_get_contents() y ob_flush() para confirmar que efectivamente transbank reciba ACEPTADO y si no lo hace, me envío un email con todos los datos de la operación.
    Es algo como lo siguiente.

    ob_start();//control de Output: nos va a ahorrar un millón de dolores de cabeza... si, tantos. Exepto si hay errores fatales. Y OJO con no hacer exit() durante las verificaciones.
    require_once "../_/classes/Swift/swift_required.php";
    /* operaciones típicas de pagina de cierre */
    require_once "../_/classes/PagoWebPay.php";
    $db = new PDO('detalles');
    $controlWebPay = new PagoWebPay($db,'../cgi-bin-tb');//ojo que como aqui estoy dentro de la carpeta "seguro" estoy ajustando la dirección relativa de la carpeta gci-bin
    $salida=ob_get_contents();
    /* fin operaciones de pagina de cierre */
    ob_flush();
    if($salida!='ACEPTADO'){
    $controlWebPay->funcionParaEnviarReporteDeErrores('La respuesta de cierre no fue exactamente ACEPTADO fue:'.$salida.'
    '.print_r($_POST,true).'
    '.print_r($_GET,true).'
    '.print_r($_SERVER,true),true);
    if(!$salida || strlen($salida)<5)echo "RECHAZADO";//esto es porque en la certificación no les gustó que bajo ciertas extrañas circumstancias (no definidas en el manual) la página estuviese en blanco
    }

  125. master…. a ver si me puedes ayudar…. migré un servidor a otro y webpay dejo de funcionar… me da error500 y dice adicional que tiene un 404… he probado de todo y no quiere levantar… se te ocurre que puede causa estas dos cosas?

  126. Hola Cristian.
    El error 500 es el típico de los permisos, fíjate que tengas los permisos de archivo exactamente como dice el manual. Pero primero fíjate en cómo migraste de un servidor a otro, si pasaste por FTP, tendrás que subir los CGI de nuevo en modo binario.
    El error 404 es porque no está encontrando algo. ¿Te da el 500 junto con el 404? eso si que es confuso.
    A todo esto, si cambió la IP de tu servidor, tienes que dar aviso a webpay, generar la nueva llave y enviar los nuevos datos a webpay para que ellos actualicen los datos, pero eso después de que resuelvas el error 500.
    primero que todo trata de acceder directamente al script CGI y ve si te da algún error.

  127. Agustin,

    Mi problema es el siguiente, siempre me da a fracaso, he modificado varias cosas pero me sigue tirando a mi pagina de fracaso. Y en los log me dice “Todo OK”

  128. Eso puede ser porque no estás contestando ACEPTADO en la “página de cierre”. aunque eso en general da un mensaje de error en el log.
    De todas maneras verifica que estés contestando solamente ACEPTADO. La manera más simple es que tu página de cierre consista sólo en lo siguiente.
    <?php
    echo 'ACEPTADO';
    ?>

    prueba así y si te sigue tirando a fracaso, revisa los datos del tbk_config.dat (por si no se te cruzaron los datos de la página de éxito y la de fracaso). Si no, pide ayuda a soporte transbank y sigue al pie de la letra sus instrucciones, igual cachan.
    Cuéntame cómo te va.

  129. Te comento, no era ese el error, sino que no tenia todos los CGI habilitados en mi Servidor, tenia que agregar los 3 cgi vía IIS

    tbk_bp_pago.cgi
    tbk_bp_resultado.cgi
    tbk_check_mac.exe

    una vez agregado esto, ya existe una correcta comunicación con Webpay y con eso me dio error (42) que es problema con las ip’s publicas e internas, lo corregí y todo OK

    Igual gracias por la ayuda. xD

  130. Hola,

    Soy uno de los dueños de la tienda…es de trajes de baño… no somos nada grande, pero logramos hace poco sacar la POS de Transbank para aceptar tarjetas.

    Me manejo con Ubuntu, Magento, Perl y php, pero esto del WebPay me la ganó. Logré dejar andado el cgi, pero ahí no supe que hacer. La docuementación es penquísima.

    Ahora estamos interesados en pagarle a alguien por implementar este desarrollo. Traté en Freelancer, pero no me fué bien.

    Aquí dejo los detalles del software que tengo instalado

    Ubuntu Server 14.04 – 64bit
    Apache 2.4.7
    Magento 1.8.01

  131. Hola Ignacio, yo he trabajado en la implementación de Webpay en tiendas virtuales y pago de servicios, si gustas te puedo cotizar la implementación, mi email es cestay@atomix.cl.

    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>