M
Maseres
Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
<?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);
}
?>
<?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.";
}
?>
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ónHola, 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!
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.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
El IPN tiene una opcion sandbox en la cual puedes probar tambien.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!
En paypal developer creas la cuenta y te puedes asignar saldoPues... 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
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.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!
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?