¿Configurando PayPal return URL y haciendo que vuelva automáticamente?

Esta es una pregunta de seguimiento a: PHP: ¿forma fácil de iniciar el pago de PayPal?

Entonces, mi problema es que estoy especificando la URL de retorno. Sin embargo, después de pagar con PayPal, termino en una pantalla que dice:

Usted acaba de completar su pago. XXXX, acabas de completar tu pago. Su ID de transacción para este pago es: XXXXXXXXXXXXX.

Le enviaremos un correo electrónico de confirmación a XX@XXXX.com. Esta transacción aparecerá en su extracto como PAYPAL.

Go to PayPal account overview 

Necesito que no se muestre esta pantalla y vaya directamente a la URL de retorno. Yo tengo:

  • Establecer la variable “retorno”
  • Establezca la variable “rm” en: 2 (que de acuerdo con la guía = ” el navegador del comprador se redirige a la URL de devolución utilizando el método POST, y se incluyen todas las variables de pago “)

De hecho, aquí está mi forma completa:

 
<!-- -->

¿Alguna idea de cómo puedo hacer que vuelva automáticamente? Alternativamente, ¿cómo obtengo el resultado del pago en mi sitio web para poder actualizar la base de datos? ¿Qué es IPN?

Debe habilitar el retorno automático en su cuenta de PayPal; de lo contrario, ignorará el campo de return .

De la documentación (actualizada para reflejar el nuevo diseño):

El retorno automático está desactivado por defecto. Para activar el retorno automático:

  1. Inicie sesión en su cuenta de PayPal en https://www.paypal.com . Aparece la página Información general de mi cuenta.
  2. Haga clic en la pestaña secundaria Perfil. La página de Resumen de perfil aparece.
  3. Haga clic en el enlace Mis herramientas de venta en la columna de la izquierda.
  4. En la sección Venta en línea, haga clic en el enlace Actualizar en la fila de Preferencias del sitio web. Aparece la página Preferencias de pago del sitio web
  5. En Devolución automática de pagos en el sitio web, haga clic en el botón de opción Activar para habilitar el Retorno automático.
  6. En el campo URL de devolución, ingrese la URL a la que desea redirigir a sus contribuyentes después de que completen sus pagos. NOTA: PayPal verifica la URL de devolución que ingresa. Si la URL no está formateada correctamente o no se puede validar, PayPal no activará la devolución automática.
  7. Desplázate hasta la parte inferior de la página y haz clic en el botón Guardar.

IPN es para notificación de pago instantánea. Le proporcionará información más confiable / útil que la que obtendrá de la devolución automática.

La documentación para IPN está aquí: https://www.x.com/sites/default/files/ipnguide.pdf

Documentación en línea para IPN: https://developer.paypal.com/docs/classic/ipn/gs_IPN/

El procedimiento general es pasar un parámetro notify_url con la solicitud y configurar una página que maneje y valide las notificaciones de IPN, y PayPal enviará solicitudes a esa página para notificarle cuándo pagos / reembolsos / etc. atravesar. Esa página de controlador de IPN sería el lugar correcto para actualizar la base de datos y marcar los pedidos como pagos.

Formulario de muestra usando PHP para pagos directos.

 

recorra amablemente los campos notify_url, return, cancel_return

código de muestra para manejar ipn (my_ipn.php) que es solicitado por paypal después de que se haya realizado el pago.

Para obtener más información sobre cómo crear una IPN, consulte este enlace.

 < ?php // Check to see there are posted variables coming into the script if ($_SERVER['REQUEST_METHOD'] != "POST") die("No Post Variables"); // Initialize the $req variable and add CMD key value pair $req = 'cmd=_notify-validate'; // Read the post from PayPal foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; } // Now Post all of that back to PayPal's server using curl, and validate everything with PayPal // We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments) //$url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; $url = "https://www.paypal.com/cgi-bin/webscr"; $curl_result = $curl_err = ''; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req))); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $curl_result = @curl_exec($ch); $curl_err = curl_error($ch); curl_close($ch); $req = str_replace("&", "\n", $req); // Make it a nice list in case we want to email it to ourselves for reporting // Check that the result verifies if (strpos($curl_result, "VERIFIED") !== false) { $req .= "\n\nPaypal Verified OK"; } else { $req .= "\n\nData NOT verified from Paypal!"; mail("you@youremail.com", "IPN interaction not verified", "$req", "From: you@youremail.com"); exit(); } /* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH 1. Make sure that business email returned is your business email 2. Make sure that the transaction s payment status is  completed  3. Make sure there are no duplicate txn_id 4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */ // Check Number 1 ------------------------------------------------------------------------------------------------------------ $receiver_email = $_POST['receiver_email']; if ($receiver_email != "you@youremail.com") { //handle the wrong business url exit(); // exit script } // Check number 2 ------------------------------------------------------------------------------------------------------------ if ($_POST['payment_status'] != "Completed") { // Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete } // Check number 3 ------------------------------------------------------------------------------------------------------------ $this_txn = $_POST['txn_id']; //check for duplicate txn_ids in the database // Check number 4 ------------------------------------------------------------------------------------------------------------ $product_id_string = $_POST['custom']; $product_id_string = rtrim($product_id_string, ","); // remove last comma // Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount // END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------ //////////////////////////////////////////////////// // Homework - Examples of assigning local variables from the POST variables $txn_id = $_POST['txn_id']; $payer_email = $_POST['payer_email']; $custom = $_POST['custom']; // Place the transaction into the database // Mail yourself the details mail("you@youremail.com", "NORMAL IPN RESULT YAY MONEY!", $req, "From: you@youremail.com"); ?> 

La imagen a continuación lo ayudará a comprender el proceso de PayPal. Flujo del proceso de Paypal

Para una lectura adicional, consulte los siguientes enlaces;

Espero que esto te ayude..:)

una forma que he encontrado:

intente insertar este campo en su código de formulario generado:

  

rm significa método de retorno ;

2 significa (publicar)

Luego de que el usuario compra y vuelve a la URL de tu sitio, esa URL también obtiene los parámetros POST

ps si usa php, intente insertar var_dump($_POST); en su url de retorno (script), luego haga una compra de prueba y cuando regrese a su sitio verá las variables que tiene en su url.

¡Creo que la idea de establecer los valores de Retorno automático como la descrita anteriormente por Kevin es un poco extraña!

Digamos, por ejemplo, que tiene varios sitios web que usan la misma cuenta de PayPal para manejar sus pagos, o que tiene varias secciones en un sitio web que realizan diferentes tareas de compra y que requieren diferentes direcciones de devolución cuando el pago esta completado. Si coloco un botón en mi página como se describe arriba en la sección ‘Ejemplo de formulario usando PHP para pagos directos’, puede ver que hay una línea allí:

 input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php" 

donde establece el valor de retorno individual. ¿Por qué tiene que establecerse en general, también en la sección de perfil?!?!

Además, como solo puede establecer un valor en la sección de perfil, significa (AFAIK) que no puede usar el retorno automático en un sitio con múltiples acciones.

Comentarios por favor?

Compartiendo esto ya que recientemente he encontrado problemas similares a este hilo

Durante mucho tiempo, mi script funcionó bien (formulario de pago básico) y devolvió las variables POST a mi página success.php y los datos IPN como variables POST también. Sin embargo, últimamente, noté que la página de retorno (success.php) ya no recibía ningún POST vars. ¡Probé en Sandbox y vivo y estoy bastante seguro de que PayPal ha cambiado algo!

El notify_url aún recibe los datos de IPN correctos, lo que me permite actualizar el DB, pero no he podido mostrar un mensaje de éxito en la página de mi URL de retorno (success.php).

A pesar de probar muchas combinaciones para activar y desactivar opciones en las preferencias de pago del sitio web de PayPal y la IPN, he tenido que hacer algunos cambios en mi script para asegurarme de que todavía puedo procesar un mensaje. Lo he logrado activando PDT y Auto Return, después de seguir esta excelente guía .

Ahora todo funciona bien, pero el único problema es que la URL de retorno contiene todas las variables PDT, lo que es feo.

También puede encontrar esto útil

en la página de pago, busque el elemento de formulario oculto ‘cancel_return’:

Establezca el valor del elemento de formulario cancel_return en la URL a la que desea regresar: