Algo muy común cuando trabajamos desarrollando aplicaciones web y a la misma vez tratar con el manejo de un servidor, es que nos topemos con problemas difíciles de descifrar constantemente, más si no tenemos mucha experiencia a profundidad sobre cuestiones técnicas sobre las posibles causas que podrían estar generando los problemas.
En el desarrollo de uno de los sitios ecommerce que hemos tenido hace un par de meses atrás, nos topamos con un error que a muchos les puede haber pasado y por mucho que hagan cambios y pruebas no pueden dar con la razón del mismo, así mismo, no había información por ningún lado sobre esta causa del error que teníamos, por eso creí que tal vez seria interesante compartir esta anécdota relacionada con la IPN de Paypal.
Posibles tipos errores de notificación o verificación de la IPN de Paypal
Para tratar de ser más claros y que no estemos pensando que daremos la solución a otros problemas que no vienen al caso, en este articulo trataremos problemas que podrían abarcar las siguientes situaciones posibles:
- Paypal no envía respuesta a mi servidor
- Mi servidor no recibe respuesta de paypal al hacer una compra
- IPN de paypal error de notificación
- Mi código IPN no recibe notificación de Paypal
- Mi aplicación no recibe respuesta de Paypal al hacer compra
O algún que otro problema relacionado o parecido con el hecho de que cuando se hace una compra con Paypal, este no envía a nuestro servidor el resultado de la compra, o viceversa, cosa que nuestro servidor no recibe la respuesta y por consiguiente no se puede interactuar con dicha respuesta, incluido en ello que se guarde la venta en la base de datos.
Antes de continuar, vamos a dar por entendido que se esta usando Sandbox de Paypal, el cual es el modulo de pruebas para Paypal, no es recomendable hacer pruebas con el modulo oficial.
¿Qué es y cómo funciona la IPN de Paypal?
Aunque la mayoría de los que estén viendo este articulo ya tengan idea o ya sepan de esto, no está demás explicarlo de manera superficial para aquellos que quizá estén un poco confusos.
Por siglas en ingles IPN son las iniciales de Instant Payment Notification o lo que en español se traduce Notificación Instantánea de Pago. La cual hace referencia al modulo de Paypal para las notificaciones que se hacen desde Paypal a nuestra aplicación cuando se hace un pago, la respuesta puede ser positiva o que se ha generado algún error o que se ha cancelado el pago, estas respuestas la recibe nuestra aplicación.
Es decir, cuando tienes integrado las pasarelas de pago o el botón de pago de Paypal en cualquier aplicación web donde requiera el pago de tus servicios o productos, normalmente el botón o la aplicación te manda a una página de Paypal donde se realizara el pago, entonces, al estar en una pagina externa fuera de tu sitio web, en principio no hay manera de que tu aplicación se entere si el pago se ha realizado o no efectivamente, por ello Paypal envía una respuesta a nuestro aplicación de nuestro servidor, la cual normalmente es recibida mediante una URL (o un link llamada comúnmente) de nuestra aplicación.
Entonces el error se genera en intercambio de información, es aquí donde trataremos de solucionar el problema.
Esta imagen puede tratar de reflejar un poco cómo funciona la interacción de tu servidor y la IPN de paypal.
Si deseas saber mas sobre lo que es la IPN de Paypal aquí tienes el link para poder ver mas sobre el mismo.
Descartando Posibles razones por las que se genera el error de la respuesta de Paypal mediante IPN
Pueden ser varias, sin embargo, para descartarlas vamos tratar de considerar por lo menos las que ahora mismo se me vienen en mente, entre los cuales pueden ser errores de código, configuración de Paypal (o Sandbox de Paypal), configuraciones de tu servidor u otros.
Vamos a descartar aquellas que vamos a dar por entendido que ya intentaste solucionar aplicando sus respectivas respuestas, aunque trataremos de darte la solución de cada una que mencionemos, pero de forma superficial, esto dado que hay bastante información sobre esos casos, cosa que después podamos centrarnos en la causa que hemos tenido nosotros y no se ha podido encontrar información al respecto.
Verificar la configuración de cuenta de Paypal
Ya sea en la cuenta oficial de Paypal o en la cuenta de Sandbox (lo recomendable para pruebas es Sandbox), debemos estar asegurados que las configuraciones estén correctamente realizadas.
Entre ellas una de las comunes y por sentido común la necesaria es la habilitación de las notificaciones instantáneas de pago de Paypal, aunque esto es opcional siempre y cuando que en tu aplicación no este configurado la URL IPN que recibe las notificaciones de Paypal. De todos modos, esta configuración está en la sección de configuración de cuenta. Respecto a esta posibilidad, existe mucha información en internet al respecto.
Habilitar cURL en la configuración de PHP del servidor
El modulo IPN funciona con cURL de php, el cual permite el intercambio de datos entre diferentes servidores, lo cual debe estar habilitado esto en la configuración de PHP de nuestro servidor. También hay información de sobra al respecto en internet. Imagínense tener que estar dándoles las respuestas a cada uno de estos casos cuando ya existe dicha info, tendríamos un articulo muy tedioso y largo, cuando ya de por si es así xD.
Errores de código en el desarrollo de la aplicación
Aunque no lo creas, es un error muy común en nosotros los desarrolladores web, un simple punto y coma en el código (;) puede ser la diferencia entre terminar tu aplicación o tener dolores de cabeza tratando de buscar el error.
Debemos estar seguros que todas las variables, constantes, clases, métodos, funciones y todo lo que se relacione, estén correctamente escritos y vinculados. De todos modos, si tenemos activada la opción de display_errors en la configuración de PHP, la aplicación nos muestra en que línea del código está el error.
Así mismo la llamada a la URL de recepción de datos de la IPN, debe estar bien configurada, obviamente, mejor si esta en modo seguro (SSL / HTTPS), a estas alturas sobra decir esto. Dicha URL Normalmente se lanza en un campo input del form del botón de pago.
Ninguna de estas soluciones funciona para el problema de la IPN
Si te has llegado a asegurar que ninguno de estos mencionados anteriormente logró dar solución a tu problema, probablemente estemos hablando ya de que prácticamente tu servidor no esta recibiendo respuesta sea TRUE o FALSE. En este caso debemos considerar directamente que nuestro servidor está bloqueando la conexión de Paypal, por lo cual no puede enviarnos la respuesta a nuestra aplicación.
Entonces debemos comprobar esto, para ello en nuestro departamento de desarrollo web usamos la técnica de comprobar ingresos de errores en puntos clave de nuestro código, para verificar hasta donde llega a ejecutarse dicho código y donde para. Entonces lo ideal seria que en nuestro código apliquemos la función por defecto de PHP para guardar errores (error_log) justo después de donde supuestamente debemos recibir respuesta de Paypal, en esta llamada debemos guardar cualquier texto que no sea necesariamente la respuesta de Paypal, para así descartar que paypal nos esta dando una respuesta vacía.
Una vez ejecutado la aplicación, deberíamos revisar en nuestro registro de errores, si esa llamada ha logrado guardar el error, el caso de no, tendremos la certeza de que Paypal no puede comunicarse con nuestro servidor. Entonces lo más probable es que nuestro servidor este bloqueando la IP de paypal.
El encargado de bloquear IPs en nuestro servidor normalmente es el CSF del Firewall, con esta aplicación se asignas IPs en una lista negra de forma automática cuando esta IP parece sospechosa, obviamente Paypal no lo es, pero por alguna x razón pudo haber llegado a parar ahí su IP o sus IPs.
Para solucionar esto basta con ingresar como administrador root en nuestro servidor y quitar dicha IP de la lista, o mejor aún, adicionalmente agregar la IP de paypal en la lista blanca para tratar de evitar que vuelva a pasar el problema.
Ahora ¿Y cómo hago esto Jhomar?, para esto te dejo este articulo donde se te explica como agregar o quitar IPs de nuestro Firewall en WHM, pretender dejarte en este mismo post un artículo como este, ya se hace un poco pesado incluso para mí. No obstante, debo mencionarte algunos puntos que debemos considerar antes de desbloquear a paypal para que la IPN funcione correctamente
¿Cómo y que IPs de Paypal debemos desbloquear en nuestro servidor para que funcione la IPN?
Debemos considerar que Paypal tiene varias IPs, así que tendremos que ver cuáles son las que se deben trabajar, según pude recopilar información de la red, estas son las IPs que se deben considerar:
Según una consulta en en stackoverflow, estas son las IPs de Paypal:
173.0.84.8, 173.0.84.40, 173.0.88.8, 173.0.88.40, 64.4.248.8, 173.0.92.8, 173.0.93.8, 64.4.249.8
Poor otro lado, según el portal oficial de Paypal, estos son las IPs que debemos considerar, sería bueno empezar por estas, pero las de arriba están por si con estas tampoco dan:
- 173.0.80.0/20
- 64.4.240.0/21
- 64.4.248.0/22
- 66.211.168.0/22
- 91.243.72.0/23
En esa misma pagina muestra que usos se le da a estas IPs, por si a alguien le sirve de info igual cuando tenga otro problema relacionado con esos módulos de Paypal.
Ahora que ya tenemos estos datos, podemos proceder a desbloquear a Paypal para que nuestra aplicación reciba las respuestas de la IPN.
De todos modos, si se te complica mucho esto, siempre podemos pedir que nos ayuden al departamento de soporte técnico del proveedor de hosting que tengas, si estas con nosotros en LogicalWeb con nuestro servicio de hosting web, estaríamos encantados de poder ayudarte con los problemas que tengas.
¡Saludos!
Una respuesta a “Error de notificación de respuesta de Paypal Mediante la IPN”
[…] este post fue inicialmente creado como complemento a nuestro otro post donde solucionamos problemas de bloqueos de IP de Paypal en nuestro servidor, el método sirve para cualquier otro […]