Foros del Web » Programando para Internet » PHP »

Respuesta de PayPal

Estas en el tema de Respuesta de PayPal en el foro de PHP en Foros del Web. Tengo un sistema de compra realizado usando paypal. 1. El usuario selecciona el producto y se guarda una variable de sesión con el id de ...
  #1 (permalink)  
Antiguo 28/06/2007, 14:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta de PayPal

Tengo un sistema de compra realizado usando paypal.

1. El usuario selecciona el producto y se guarda una variable de sesión con el id de producto y algún que otro dato relativo a la compra.
2. Se envían los datos de la venta por HTTP GET a paypal, el usuario ingresa a su cuenta y realiza el pago en el sitio de paypal.
3. El usuario es devuelto a mi sitio y se guardan los datos de la compra en la bd.

Suponiendo que el usuario salta el paso 2 y accede directamente a la página de confirmación, los datos se guardarían en la bd como si el usuario hubiese concluído la transacción.

¿Cómo puedo comprobar que venga sí o sí de la página de confirmación de PayPal?

Gracias!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #2 (permalink)  
Antiguo 28/06/2007, 14:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

Paypal tiene un sistema que se llama IPN creo, en el que si lo tienes activado ellos te notifican en cuanto la compra se ha realizado, entonces lo que tu tienes que hacer es diseniar tu sistema para solo almacenar la compra con un estado pendiente, y solo hasta que Paypal te notifique cambias a pagado, esto se hace de modo seguro ya que el script de Paypal le habla a tu sistema directamente.

Saludos.
  #3 (permalink)  
Antiguo 28/06/2007, 15:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Gracias!
Estuve leyendo esto: https://www.paypal.com/cgi-bin/websc...chview-outside

Pero me quedó una duda: cómo sé qué compra tengo que marcar como pagada cuando recibo el IPN? Tendría que pasarle un número de invoice y chequear ese, no?
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #4 (permalink)  
Antiguo 28/06/2007, 15:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

Asi es, tu le puedes pasar si mal no recuerdo hasta 5 campos extras los cuales te los va a enviar de regreso para que puedas confirmar el numero de pedido.

Saludos.
  #5 (permalink)  
Antiguo 28/06/2007, 16:44
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Ahhh no sabía que me enviaba TODOS los campos que yo mandaba, pensé que sólo los datos de la compra en sí.

Muchas gracias por todo!!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #6 (permalink)  
Antiguo 03/07/2007, 12:44
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Otra pregunta: ¿cómo sé que el mensaje viene de PayPal y no de cualquier lado? Hay una variable, verify_sign, pero no tengo cómo comprobar que sea válida.

Había pensado, sino, en generar una cadena aleatoria, guardarla en la db y enviarla a PayPal. Así puedo comprobar que recibo esa misma cadena. Pero no es del todo seguro ya que esa misma cadena iría en la URL.

Alguna sugerencia?

Gracias!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #7 (permalink)  
Antiguo 03/07/2007, 12:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

Es por eso que tienes que hacer el POST-Back al IPN de paypal, para que paypal te conteste si es o no valido, asi previenes que algun otro script sea el que envie la confirmacion de pago.

Si te fijas en la documentacion de Paypal, TIENES que enviar de regreso todos los datos para que te conteste con VERIFIED (si es un request que se origino desde Paypal) o INVALID (si es un request invalido.).

Saludos.
  #8 (permalink)  
Antiguo 03/07/2007, 13:04
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Ahh claro, disculpame, de la semana pasada a hoy me olvidé de ese detalle. Gracias!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #9 (permalink)  
Antiguo 03/07/2007, 13:54
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Un par de preguntas más:

1. Puedo mandar la variable txn_id cuando hago la compra? O siempre la genera paypal automaticamente?

2. Estoy programando el script para recibir el IPN, y haciendo un par de pruebas, cuando hago:

Código PHP:
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " strlen($req) . "\r\n\r\n";
$fp fsockopen ('www.sandbox.paypal.com'80$errno$errstr30);
fputs ($fp$header $req); 
No me devuelve INVALID, sino un página que dice FOUND, the document has moved here, con un link a www.sandbox.paypal.com/cgi-bin/webscr.

En este caso, $req tiene el valor cmd=_notify-validate y todas las variables que llegan por POST concatenadas (ninguna en este caso, ya que sólo estoy probando).

Busqué en google pero no encuentro solución.

Gracias!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #10 (permalink)  
Antiguo 03/07/2007, 14:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

1.- Creo que la variable txn_id la genera paypal para que tu puedas rastrear el pago en tu sistema con el de ellos (es decir con ese numero identificas un registro en el sistema de ellos, por eso es importante que la almacenes).

2.- Tu no puedes iniciar un request IPN directamente, necesitas hacer una compra "falsa" en el sandbox para que el sandbox llame a tu script y proceses el contenido.

Saludos.
  #11 (permalink)  
Antiguo 03/07/2007, 15:39
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Muchas gracias por la ayuda!
Igualmente, me sigue pasando lo mismo.
Configuré todo e hice una compra. En el script de IPN hice que envie un email con el contenido que obtiene al hacer fput, me devuelve lo siguiente:

Código:
HTTP/1.0 302 Found
Date: Tue, 03 Jul 2007 21:28:09 GMT
Content-Type: text/html; charset=iso-8859-1
Server: Apache/1.3.27 (Unix) mod_ssl/2.8.12 OpenSSL/0.9.7a mod_fastcgi/2.4.2 PHP/4.3.2
Set-Cookie: aC-6QtMWfQIUAVIPbKlEQNGuStK=YiOy2yVzsw4ZSQJYgZYVGVfwpEcb__UqirRMpxW-JwzEf6dcWLgJx1GieFnokBCBnEN_GRDaNYbaWbP9y65Sm3DCw8t9SyHkcg9kJm; path=/; domain=.paypal.com
Set-Cookie: SvfiN4zqfyzJ1gFvN8H6qdRUVje=8cdtKbzV_hG5YsHpHy2e7T66pgbfEns1o9Zt_VQ-mIOcv9yhTGWiXlkH3R0GiG2TbX0dR2n2rjxBbt4mnyT40Uj7DxswgcrDP2BB5yHuV1VeU9Lr; path=/; domain=.paypal.com
Set-Cookie: feel_cookie=61203136205F6E6F746966792D76616C696461746520622030202063203620776562736372206420302020652031372067656E6572616C2F41626F72742E78736C20662030202067203520656E5F55532068203020206920313120702F67656E2F61626F7274206A203020206B2032332050616765204E6F7420466F756E64202D2050617950616C206C20302020; expires=Wed, 31-Dec-1969 23:59:59 GMT; path=/; domain=.paypal.com
Location: http://www.sandbox.paypal.com/cgi-bin/webscr?ACA_TODAS_LAS_VARIABLES_QUE_YO_MANDÉ

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://www.sandbox.paypal.com/cgi-bin/webscr?ACA_TODAS_LAS_VARIABLES_QUE_YO_MANDÉ">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.27 Server at <A HREF="mailto:[email protected]">www.sandbox.paypal.com</A> Port 80</ADDRESS>
</BODY></HTML>
¿Por qué será?
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #12 (permalink)  
Antiguo 03/07/2007, 15:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

hmmm no lo se, estas usando SSL? o no, cuando yo lo hice lo configure con SSL para que no me diera problemas, puedes intentar eso.

Saludos.
  #13 (permalink)  
Antiguo 03/07/2007, 15:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

No, no estoy usando SSL.
Cómo hago para activarlo?
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #14 (permalink)  
Antiguo 03/07/2007, 15:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

Necesitas activar el modulo en Apache de OpenSSL, luego generar un certificado para instalarlo junto con tu configuracion de SSL. Busca en Google hay muy buenos tutoriales para hacerlo.

Saludos.
  #15 (permalink)  
Antiguo 03/07/2007, 16:01
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Gracias, ahora me pongo a investigar.
Recién probé hacer fsockopen con ssl://, pero me dio un par de errores, así que supongo que tengo que activar OpenSSL.
Pruebo y vemos :D

Mil gracias!!!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #16 (permalink)  
Antiguo 03/07/2007, 16:13
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Bueno, como no sé qué control voy a tener sobre el server en el que va a estar la aplicación, terminé usando cURL:

Código PHP:
$curl curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($curlCURLOPT_POSTtrue);
curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
curl_setopt($curlCURLOPT_POSTFIELDS$req);
$res curl_exec($curl); 
Funciona. Devuelve Invalid, pero eso es lo de menos, el pedido funciona. Ahora me fijo qué está mal.

Gracias
Fede!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #17 (permalink)  
Antiguo 03/07/2007, 16:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Respuesta de PayPal

Cierto CURL es mejor en esos casos aunque yo lo hice con fsockopen normal, haz probado el ejemplo que viene en la pagina de Paypal?
  #18 (permalink)  
Antiguo 03/07/2007, 16:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Respuesta de PayPal

Sí, el código que estaba usando al principio lo hice en base al del sitio de PayPal. Supongo que no funcionaba porque no estaba usando SSL, es la única diferencia con la llamada de ahora.

Y acaba de funcionar, había un error en la función que chequeaba si el txn_id estaba repetido.

Muchísimas gracias por todo!!!
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:22.