Integración de botón PayPal con redirección automática

  • Autor Autor Maseres
  • Fecha de inicio Fecha de inicio
M

Maseres

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
I need that when a client makes a payment using the PayPal button, automatically upon receiving the payment it redirects to my website indicated in the return URL, without the user having to wait 10 seconds, nor having to click the button to return to the merchant's website, thank you.

En Español:

Necesito que cuando un cliente haga un pago mediante el boton de paypal, automaticamente al recibir el pago redirija hacia mi sitio web indicado en la url de retorno, sin que el usuario tenga que esperar ni 10 segundos, ni que tampoco tenga que darle al boton de regresar al sitio web del comerciante, gracias.
 
Pasos para configurar la redirección automática:
  1. Inicia sesión en tu cuenta de PayPal:
    • Accede a tu cuenta de PayPal Business o Premier.
  2. Configura la URL de retorno:
    • Ve a Configuración de la cuenta (ícono de engranaje en la esquina superior derecha).
    • Selecciona Herramientas comerciales y luego busca la sección de Pagos en el sitio web.
    • Haz clic en Actualizar en la opción Preferencias del sitio web.
    • Activa Retorno automático y especifica la URL de retorno. Este será el enlace al cual deseas redirigir a los clientes después de que completen el pago.
  3. Evita el botón de regreso:
    • Asegúrate de que la opción de "Retorno automático" esté habilitada. Esto permite que los clientes sean redirigidos automáticamente sin necesidad de presionar el botón de regresar.
  4. Incluye la URL de retorno en tu botón de PayPal:
    • Si estás generando un botón de pago manualmente, agrega el siguiente parámetro a tu código:
<input type="hidden" name="return" value="https://tusitioweb.com/tu-url-de-retorno">
    • Esto asegura que, incluso si el cliente no es redirigido automáticamente, tenga la opción de volver a tu sitio.
  1. Configura el IPN (opcional):
    • Si necesitas una validación extra para asegurarte de que el pago fue exitoso antes de redirigir al cliente, configura el Notificador de Pago Instantáneo (IPN) desde las herramientas de PayPal.
  2. Prueba la integración:
    • Realiza un pago de prueba para verificar que la redirección funciona correctamente y que el cliente es llevado automáticamente a la URL especificada.
Nota importante:
  • PayPal necesita que la URL de retorno sea HTTPS para mayor seguridad.
  • Algunas configuraciones pueden variar ligeramente dependiendo de tu cuenta y la región.
 
Hola, gracias por contestar!

he estado mirando, he activado el IPN en Paypal y he creado un archivo llamado notification.php, y he puesto en el IPN en mi cuenta de Paypal: https://misitioweb.com/notification.php
y he puesto el siguiente código en ese archivo:

Insertar CODE, HTML o PHP:
<?php
// URL para validar la IPN
$paypal_url = "https://ipnpb.paypal.com/cgi-bin/webscr";

// Leer datos POST de PayPal
$postData = file_get_contents('php://input');

// Agregar "cmd=_notify-validate" para la validación
$validationData = 'cmd=_notify-validate&' . $postData;

// Configurar cURL para validar con PayPal
$ch = curl_init($paypal_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $validationData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

// Enviar la solicitud a PayPal
$response = curl_exec($ch);
curl_close($ch);

// Validar la respuesta
if (strcmp($response, "VERIFIED") == 0) {
    // Procesar la transacción
    $data = [];
    parse_str($postData, $data);

    $payment_status = $data['payment_status'];
    $txn_id = $data['txn_id'];
    $receiver_email = $data['receiver_email'];
    $payment_amount = $data['mc_gross'];
    $payment_currency = $data['mc_currency'];

    // Validar datos y guardar en la base de datos
    if ($payment_status == "Completed") {
        // Guardar la transacción en tu sistema
        file_put_contents('logs/ipn.log', json_encode($data));
    }
} else {
    // Manejar errores
    file_put_contents('logs/ipn.log', "Error: " . $response);
}
?>

Se supone que cuando se haga un pago, se activa el IPN, que es esa URL... "
https://misitioweb.com/notification.php", y en mi url de retorno tengo:
<input type="hidden" name="return" value="https://misitioweb.com/tpv_ok.php">

Y en el archivo tpv_ok.php tengo:

Insertar CODE, HTML o PHP:
<?php
  if (isset($_GET['tx'])) {
    $txn_id = $_GET['tx'];

    // Opcional: Validar detalles de la transacción con PayPal
    $paypal_url = "https://api-m.paypal.com/v1/checkout/orders/{$txn_id}";

    // Mostrar un mensaje al usuario
    echo "¡Gracias por tu pago! El ID de tu transacción es: " . htmlspecialchars($txn_id);
  } else {
    echo "No se recibió ninguna transacción.";
  }
  ?>

Se supone que con esto debería de valer no?

Nota: la url de retorno viene en el código HTML, no la he activado en mi panel de Paypal, porque le estoy pasando parámetros en esa url de retorno, para poder activar el producto digital en mi base de datos!

Gracias!
 
Última edición:
Necesitas una cuenta de empresas para que el retorno sea automático y no dependas de que el cliente presione el botón, la versión clásica funciona bien pero hay que presionar el dichoso botón para que se active el retorno especificado en el campo hidden
 
Hola, gracias por contestar!

he estado mirando, he activado el IPN en Paypal y he creado un archivo llamado notification.php, y he puesto en el IPN en mi cuenta de Paypal: https://misitioweb.com/notification.php
y he puesto el siguiente código en ese archivo:

Insertar CODE, HTML o PHP:
<?php
// URL para validar la IPN
$paypal_url = "https://ipnpb.paypal.com/cgi-bin/webscr";

// Leer datos POST de PayPal
$postData = file_get_contents('php://input');

// Agregar "cmd=_notify-validate" para la validación
$validationData = 'cmd=_notify-validate&' . $postData;

// Configurar cURL para validar con PayPal
$ch = curl_init($paypal_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $validationData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

// Enviar la solicitud a PayPal
$response = curl_exec($ch);
curl_close($ch);

// Validar la respuesta
if (strcmp($response, "VERIFIED") == 0) {
    // Procesar la transacción
    $data = [];
    parse_str($postData, $data);

    $payment_status = $data['payment_status'];
    $txn_id = $data['txn_id'];
    $receiver_email = $data['receiver_email'];
    $payment_amount = $data['mc_gross'];
    $payment_currency = $data['mc_currency'];

    // Validar datos y guardar en la base de datos
    if ($payment_status == "Completed") {
        // Guardar la transacción en tu sistema
        file_put_contents('logs/ipn.log', json_encode($data));
    }
} else {
    // Manejar errores
    file_put_contents('logs/ipn.log', "Error: " . $response);
}
?>

Se supone que cuando se haga un pago, se activa el IPN, que es esa URL... "
https://misitioweb.com/notification.php", y en mi url de retorno tengo:
<input type="hidden" name="return" value="https://misitioweb.com/tpv_ok.php">

Y en el archivo tpv_ok.php tengo:

Insertar CODE, HTML o PHP:
<?php
  if (isset($_GET['tx'])) {
    $txn_id = $_GET['tx'];

    // Opcional: Validar detalles de la transacción con PayPal
    $paypal_url = "https://api-m.paypal.com/v1/checkout/orders/{$txn_id}";

    // Mostrar un mensaje al usuario
    echo "¡Gracias por tu pago! El ID de tu transacción es: " . htmlspecialchars($txn_id);
  } else {
    echo "No se recibió ninguna transacción.";
  }
  ?>

Se supone que con esto debería de valer no?

Nota: la url de retorno viene en el código HTML, no la he activado en mi panel de Paypal, porque le estoy pasando parámetros en esa url de retorno, para poder activar el producto digital en mi base de datos!

Gracias!
Una duda, con esto ya no necesitas el botón regresar para validar el pago???, me interesa no tener que presionarlo, pero no tengo una cuenta empresarial para usar el script que requiere el ID de la app para funcionar sin ese botón
 
Pues yo lo he integrado así, aun no lo he probado, he puesto en modo sandbox la cuenta, se supone que debe funcionar así, he creado el archivo en la carpeta logs/ipn.log

Mi cuenta de PayPal es business

De momento no se ha creado ningún pago...
Consultando la IA... Dice que con eso basta.
Te voy diciendo este fin de semana. Cuando tenga saldo en el banco, pruebo, y te comento, gracias!
 
Última edición:
Una duda, con esto ya no necesitas el botón regresar para validar el pago???, me interesa no tener que presionarlo, pero no tengo una cuenta empresarial para usar el script que requiere el ID de la app para funcionar sin ese botón
Con IPN efectivamente no necesitas que el usuario le de boton ni vuelva a la web para validar el pago, no necesitas una cuenta empresa para poder activar el IPN.
 
Pues yo lo he integrado así, aun no lo he probado, he puesto en modo sandbox la cuenta, se supone que debe funcionar así, he creado el archivo en la carpeta logs/ipn.log

De momento no se ha creado ningún pago...
Consultando la IA... Dice que con eso basta.
Te voy diciendo este fin de semana. Cuando tenga saldo en el banco, pruebo, y te comento, gracias!
El IPN tiene una opcion sandbox en la cual puedes probar tambien.
 
Pues... yo he puesto la cuenta en modo sandbox, he registrado otra cuenta... pero me dice que necesito saldo para poder efectuar la operación, lo cual estoy esperando a tener saldo en el banco para poder probar.

Si eres tan amable de explicarme el proceso para probar, te lo agradezco un monton! Gracias
 
Pues... yo he puesto la cuenta en modo sandbox, he registrado otra cuenta... pero me dice que necesito saldo para poder efectuar la operación, lo cual estoy esperando a tener saldo en el banco para poder probar.

Si eres tan amable de explicarme el proceso para probar, te lo agradezco un monton! Gracias
En paypal developer creas la cuenta y te puedes asignar saldo
 
Si si ya lo hice pero esto dicen desde el departamento de soporte de paypal:

Por el momento, solo podemos ofrecer estas dos opciones: esperar 10 segundos para ser redirigido automáticamente o el comprador debe hacer clic en el botón para volver a su "URL de retorno".

Entiendo su problema y sus inquietudes. Sin embargo, esto no es algo que PayPal pueda hacer.

Deberá diseñar un inicio de sesión diferente en su proceso de pago para proporcionar el producto digital a sus compradores.

Me temo que no hay nada más que podamos hacer desde el lado de PayPal.

No entiendo muy bien que quiere decir con eso...
 
Al final me he decidido por stripe!

es muy facil de implementar, y no hace falta que pinche el usuario en volver a la web...

un saludo!
 
Al final me he decidido por stripe!

es muy facil de implementar, y no hace falta que pinche el usuario en volver a la web...

un saludo!
claro, stripe es mucho más simple en ese aspecto, pero si incluyes el campo <input type='hidden' name='notify_url' value='urldetuarchivoipn'> cuando completas la compra automáticamente se dispara por ajax ese archivo, lo malo es que no te detecta $_SESSION, me dio un montón de broncas para conectar con la bd porque necesitas las rutinas de php 7 a fuerzas, etc.

Pero con esto puedes guardar un estado donde compruebas que el usuario si hizo el pago y aunque cierre la ventana sin presionar el botón "Regresar al sitio web del comerciante" tu ya tienes la seguridad de que hizo el pago, ya solo tienes que comprobar cuando cierre la ventana si ese estado está guardado y así estás seguro de que si pagó o no.
 
El día 20 de diciembre realicé un pago de 76$ USDT a la cuenta de Binance del señor Joel (Binance ID: 11281839) para que realizara unas modificaciones en mi página web y agregara un sistema API de WhatsApp. Sin embargo, nunca cumplió con el trabajo. Dos meses después, me contactó y le expliqué que ya había realizado el trabajo con otra persona, pero que aún necesitaba el sistema API. En ese momento, acordó reintegrarme 70$ USDT, dio una fecha específica para hacerlo, pero incumplió su palabra y dejó de responderme.

Al revisar los comentarios de otros clientes en este foro, me di cuenta de que no soy el único afectado, ya que hay personas a las que les debe hasta 400$ y alega no tener dinero. En conclusión, perdí mi tiempo y mi dinero debido a su falta de profesionalismo y honestidad. No recomiendo su servicio bajo ninguna circunstancia, ya que considero que es una estafa. No se dejen engañar por esta persona.
 
Atrás
Arriba