{"id":4502,"date":"2023-05-13T13:16:28","date_gmt":"2023-05-13T13:16:28","guid":{"rendered":"https:\/\/logicalweb.bo\/blog\/?p=4502"},"modified":"2023-07-06T20:08:37","modified_gmt":"2023-07-06T20:08:37","slug":"error-de-notificacion-de-respuesta-de-paypal-mediante-la-ipn","status":"publish","type":"post","link":"https:\/\/logicalweb.bo\/blog\/error-de-notificacion-de-respuesta-de-paypal-mediante-la-ipn\/","title":{"rendered":"Error de notificaci\u00f3n de respuesta de Paypal Mediante la IPN"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Algo muy com\u00fan cuando trabajamos desarrollando aplicaciones web y a la misma vez tratar con el manejo de un servidor, es que nos topemos con problemas dif\u00edciles de descifrar constantemente, m\u00e1s si no tenemos mucha experiencia a profundidad sobre cuestiones t\u00e9cnicas sobre las posibles causas que podr\u00edan estar generando los problemas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el desarrollo de uno de los sitios ecommerce que hemos tenido hace un par de meses atr\u00e1s, 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\u00f3n del mismo, as\u00ed mismo, no hab\u00eda informaci\u00f3n por ning\u00fan lado sobre esta causa del error que ten\u00edamos, por eso cre\u00ed que tal vez seria interesante compartir esta an\u00e9cdota relacionada con la IPN de Paypal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Posibles tipos errores de notificaci\u00f3n o verificaci\u00f3n de la IPN de Paypal<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para tratar de ser m\u00e1s claros y que no estemos pensando que daremos la soluci\u00f3n a otros problemas que no vienen al caso, en este articulo trataremos problemas que podr\u00edan abarcar las siguientes situaciones posibles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Paypal no env\u00eda respuesta a mi servidor<\/li>\n\n\n\n<li>Mi servidor no recibe respuesta de paypal al hacer una compra<\/li>\n\n\n\n<li>IPN de paypal error de notificaci\u00f3n<\/li>\n\n\n\n<li>Mi c\u00f3digo IPN no recibe notificaci\u00f3n de Paypal<\/li>\n\n\n\n<li>Mi aplicaci\u00f3n no recibe respuesta de Paypal al hacer compra<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O alg\u00fan que otro problema relacionado o parecido con el hecho de que cuando se hace una compra con Paypal, este no env\u00eda 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es y c\u00f3mo funciona la IPN de Paypal?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque la mayor\u00eda de los que est\u00e9n viendo este articulo ya tengan idea o ya sepan de esto, no est\u00e1 dem\u00e1s explicarlo de manera superficial para aquellos que quiz\u00e1 est\u00e9n un poco confusos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por siglas en ingles IPN son las iniciales de Instant Payment Notification o lo que en espa\u00f1ol se traduce Notificaci\u00f3n Instant\u00e1nea de Pago. La cual hace referencia al modulo de Paypal para las notificaciones que se hacen desde Paypal a nuestra aplicaci\u00f3n cuando se hace un pago, la respuesta puede ser positiva o que se ha generado alg\u00fan error o que se ha cancelado el pago, estas respuestas la recibe nuestra aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es decir, cuando tienes integrado las pasarelas de pago o el bot\u00f3n de pago de Paypal en cualquier aplicaci\u00f3n web donde requiera el pago de tus servicios o productos, normalmente el bot\u00f3n o la aplicaci\u00f3n te manda a una p\u00e1gina 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\u00f3n se entere si el pago se ha realizado o no efectivamente, por ello Paypal env\u00eda una respuesta a nuestro aplicaci\u00f3n de nuestro servidor, la cual normalmente es recibida mediante una URL (o un link llamada com\u00fanmente) de nuestra aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces el error se genera en intercambio de informaci\u00f3n, es aqu\u00ed donde trataremos de solucionar el problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta imagen puede tratar de reflejar un poco c\u00f3mo funciona la interacci\u00f3n de tu servidor y la IPN de paypal.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"458\" src=\"https:\/\/logicalweb.bo\/blog\/wp-content\/uploads\/proceso-como-funciona-paypal-ipn-1.png\" alt=\"\" class=\"wp-image-4531\" srcset=\"https:\/\/logicalweb.bo\/blog\/wp-content\/uploads\/proceso-como-funciona-paypal-ipn-1.png 600w, https:\/\/logicalweb.bo\/blog\/wp-content\/uploads\/proceso-como-funciona-paypal-ipn-1-300x229.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Si deseas saber mas sobre lo que es la IPN de Paypal <a href=\"https:\/\/developer.paypal.com\/api\/nvp-soap\/ipn\/\" target=\"_blank\" rel=\"noopener nofollow\" title=\"\">aqu\u00ed tienes el link<\/a> para poder ver mas sobre el mismo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Descartando Posibles razones por las que se genera el error de la respuesta de Paypal mediante IPN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00f3digo, configuraci\u00f3n de Paypal (o Sandbox de Paypal), configuraciones de tu servidor u otros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a descartar aquellas que vamos a dar por entendido que ya intentaste solucionar aplicando sus respectivas respuestas, aunque trataremos de darte la soluci\u00f3n de cada una que mencionemos, pero de forma superficial, esto dado que hay bastante informaci\u00f3n sobre esos casos, cosa que despu\u00e9s podamos centrarnos en la causa que hemos tenido nosotros y no se ha podido encontrar informaci\u00f3n al respecto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verificar la configuraci\u00f3n de cuenta de Paypal<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e9n correctamente realizadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entre ellas una de las comunes y por sentido com\u00fan la necesaria es la habilitaci\u00f3n de las notificaciones instant\u00e1neas de pago de Paypal, aunque esto es opcional siempre y cuando que en tu aplicaci\u00f3n no este configurado la URL IPN que recibe las notificaciones de Paypal. De todos modos, esta configuraci\u00f3n est\u00e1 en la secci\u00f3n de configuraci\u00f3n de cuenta. Respecto a esta posibilidad, existe mucha informaci\u00f3n en internet al respecto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Habilitar cURL en la configuraci\u00f3n de PHP del servidor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00f3n de PHP de nuestro servidor. Tambi\u00e9n hay informaci\u00f3n de sobra al respecto en internet. Imag\u00ednense tener que estar d\u00e1ndoles las respuestas a cada uno de estos casos cuando ya existe dicha info, tendr\u00edamos un articulo muy tedioso y largo, cuando ya de por si es as\u00ed xD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Errores de c\u00f3digo en el desarrollo de la aplicaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque no lo creas, es un error muy com\u00fan en nosotros los desarrolladores web, un simple punto y coma en el c\u00f3digo (;) puede ser la diferencia entre terminar tu aplicaci\u00f3n o tener dolores de cabeza tratando de buscar el error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debemos estar seguros que todas las variables, constantes, clases, m\u00e9todos, funciones y todo lo que se relacione, est\u00e9n correctamente escritos y vinculados. De todos modos, si tenemos activada la opci\u00f3n de <em>display_errors<\/em> en la configuraci\u00f3n de PHP, la aplicaci\u00f3n nos muestra en que l\u00ednea del c\u00f3digo est\u00e1 el error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed mismo la llamada a la URL de recepci\u00f3n 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\u00f3n de pago.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ninguna de estas soluciones funciona para el problema de la IPN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si te has llegado a asegurar que ninguno de estos mencionados anteriormente logr\u00f3 dar soluci\u00f3n a tu problema, probablemente estemos hablando ya de que pr\u00e1cticamente tu servidor no esta recibiendo respuesta sea TRUE o FALSE. En este caso debemos considerar directamente que nuestro servidor est\u00e1 bloqueando la conexi\u00f3n de Paypal, por lo cual no puede enviarnos la respuesta a nuestra aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces debemos comprobar esto, para ello en nuestro departamento de <a href=\"https:\/\/logicalweb.bo\/servicio-desarrollo-web\" target=\"_blank\" rel=\"noopener\" title=\"\">desarrollo web<\/a> usamos la t\u00e9cnica de comprobar ingresos de errores en puntos clave de nuestro c\u00f3digo, para verificar hasta donde llega a ejecutarse dicho c\u00f3digo y donde para. Entonces lo ideal seria que en nuestro c\u00f3digo apliquemos la funci\u00f3n por defecto de PHP para guardar errores (<em>error_log<\/em>) justo despu\u00e9s 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\u00ed descartar que paypal nos esta dando una respuesta vac\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez ejecutado la aplicaci\u00f3n, deber\u00edamos 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\u00e1s probable es que nuestro servidor este bloqueando la IP de paypal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El encargado de bloquear IPs en nuestro servidor normalmente es el CSF del Firewall, con esta aplicaci\u00f3n se asignas IPs en una lista negra de forma autom\u00e1tica cuando esta IP parece sospechosa, obviamente Paypal no lo es, pero por alguna x raz\u00f3n pudo haber llegado a parar ah\u00ed su IP o sus IPs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para solucionar esto basta con ingresar como administrador root en nuestro servidor y quitar dicha IP de la lista, o mejor a\u00fan, adicionalmente agregar la IP de paypal en la lista blanca para tratar de evitar que vuelva a pasar el problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora \u00bfY c\u00f3mo hago esto Jhomar?, para esto te dejo este articulo donde se te explica <a href=\"https:\/\/logicalweb.bo\/blog\/como-desbloquear-una-ip-en-firewall-csf-whm\/\" target=\"_blank\" rel=\"noopener\" title=\"\">como agregar o quitar IPs de nuestro Firewall en WHM<\/a>, pretender dejarte en este mismo post un art\u00edculo como este, ya se hace un poco pesado incluso para m\u00ed. No obstante, debo mencionarte algunos puntos que debemos considerar antes de desbloquear a paypal para que la IPN funcione correctamente<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo y que IPs de Paypal debemos desbloquear en nuestro servidor para que funcione la IPN?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Debemos considerar que Paypal tiene varias IPs, as\u00ed que tendremos que ver cu\u00e1les son las que se deben trabajar, seg\u00fan pude recopilar informaci\u00f3n de la red, estas son las IPs que se deben considerar:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seg\u00fan una consulta en en stackoverflow, estas son las IPs de Paypal:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poor otro lado, seg\u00fan el <a href=\"https:\/\/www.paypal.com\/us\/cshelp\/article\/what-are-the-ip-addresses-for-paypal-nvpsoap-servers-ts1056\" target=\"_blank\" rel=\"noopener nofollow\" title=\"\">portal oficial de Paypal<\/a>, estos son las IPs que debemos considerar, ser\u00eda bueno empezar por estas, pero las de arriba est\u00e1n por si con estas tampoco dan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>173.0.80.0\/20<\/li>\n\n\n\n<li>64.4.240.0\/21<\/li>\n\n\n\n<li>64.4.248.0\/22<\/li>\n\n\n\n<li>66.211.168.0\/22<\/li>\n\n\n\n<li>91.243.72.0\/23<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00f3dulos de Paypal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora que ya tenemos estos datos, podemos proceder a desbloquear a Paypal para que nuestra aplicaci\u00f3n reciba las respuestas de la IPN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De todos modos, si se te complica mucho esto, siempre podemos pedir que nos ayuden al departamento de soporte t\u00e9cnico del proveedor de hosting que tengas, si estas con nosotros en LogicalWeb con nuestro <a href=\"https:\/\/logicalweb.bo\/web-hosting\" target=\"_blank\" rel=\"noopener\" title=\"\">servicio de hosting web<\/a>, estar\u00edamos encantados de poder ayudarte con los problemas que tengas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Saludos!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Algo muy com\u00fan cuando trabajamos desarrollando aplicaciones web y a la misma vez tratar con el manejo de un servidor, es que nos topemos con problemas dif\u00edciles de descifrar constantemente, m\u00e1s si no tenemos mucha experiencia a profundidad sobre cuestiones t\u00e9cnicas sobre las posibles causas que podr\u00edan estar generando los problemas. En el desarrollo de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4532,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[233,231,232,230],"class_list":["post-4502","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-programacion-web","tag-firewall","tag-ipn-paypal","tag-ips","tag-paypal"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/posts\/4502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/comments?post=4502"}],"version-history":[{"count":3,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/posts\/4502\/revisions"}],"predecessor-version":[{"id":4533,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/posts\/4502\/revisions\/4533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/media\/4532"}],"wp:attachment":[{"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/media?parent=4502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/categories?post=4502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/logicalweb.bo\/blog\/wp-json\/wp\/v2\/tags?post=4502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}