Optimiza tus pagos en PayPal con un flujo seguro y claro: desde la captura con el SDK hasta el envío de detalles al backend con un form oculto y método post. Aquí verás cómo validar monto, tipo de pago y datos del comprador para guardar la orden en tu base de datos con confianza.
¿Qué es la captura de una transacción en PayPal y por qué importa?
La creación de la orden no mueve el dinero. La captura transfiere los fondos a tu cuenta y te devuelve los detalles necesarios para validar y almacenar la operación. Además, puedes verificar el tipo de pago, la cantidad y datos del comprador.
Crear orden no es igual a recibir dinero.
Capturar confirma y liquida el pago en tu cuenta.
Puedes validar monto, tipo de pago y estado de la compra.
¿Dónde inicia el flujo con el SDK de PayPal?
Desde la sección de basic integration, paso 5, usas onApprove para capturar la orden. Copia los dos parámetros que pasas a create order dentro de onApprove y llama a la función de captura disponible en actions.
Usa actions.order.capture para ejecutar la captura.
Recibe una promesa y maneja sus detalles en un callback.
paypal.Buttons({// createOrder: ...onApprove:function(data, actions){return actions.order.capture().then(function(details){// details: información de la transacción capturada.});}}).render('#paypal-button-container');
¿Qué validaciones puedes hacer tras la captura?
Con los detalles puedes confirmar el precio del producto, el tipo de pago y el estado. Si el producto es físico, PayPal expone la sección shipping para la dirección de envío, y la información del comprador bajo payer (nombre, ID, email).
Campo payer: nombre, ID de comprador y email.
Campo shipping: dirección para enviar productos físicos.
ID de la transacción: clave para futuras modificaciones y auditoría.
¿Cómo enviar los detalles al backend de forma segura?
Realizar la captura solo en el front end no basta. Envía la información al backend con un form y método post para procesar y persistir los datos con seguridad.
¿Cómo crear el formulario oculto?
Coloca el form debajo del contenedor del botón. Define la action hacia la ruta /success, método post, y un input oculto para los detalles.
document.getElementById: referencia el form y el input.
JSON.stringify: serializa el objeto de detalles.
submit: envía los datos a /success en tu backend.
¿Qué procesar y guardar en el backend tras /success?
En tu archivo de routes (por ejemplo, index.js), recibe el campo details, parsea el JSON y crea la orden en la base de datos con tu modelo (por ejemplo, Orden). Guarda tanto campos clave como el objeto completo en un campo meta para auditoría.
// Ruta POST /successapp.post('/success',function(req, res){const details =JSON.parse(req.body.details);// Crear la orden en BD (modelo: Orden):// - PayPal ID// - nombre del comprador// - status de la compra// - email// - meta: todos los detalles de la orden// Responder o redirigir según tu flujo.});
Guarda PayPal ID, nombre, status y email.
Usa meta para persistir todos los detalles de la orden.
Valida precio y dirección de shipping si el producto es físico.
Implementa reglas: cupones, cancelación o modificación según tus criterios.
¿Tienes dudas sobre validar montos, manejar shipping o el diseño de tu modelo de datos? Cuéntame tu caso en los comentarios y lo revisamos juntos.
F por los que no sabemos nada de código :"v, claro que no es excusa, voy a hacer unos cursos de Code Stream y Fundamentos de ingeniería de Software para tener más contexto.
Y por ejemplo que se haría en el caso que se encuentre una anomalía en el backend ya sea porque el cliente modifico la petición o algo, ¿cómo cancelo?
abraham. Si la persona cambia la petición (osea, el method), en realidad NO va a poder realizar la compra, ya que estaría perdiendo la conexión con la base de datos de PAYPAL, entonces no habría forma de que confirme su compra.
A lo que me refiero es a qué se hace en el caso de que en el cliente se modifique el código existente para calcular el costo ya que se manda todo desde el cliente, osea en lugar de modificar el method modificar el body de la petición
var paypalform =document.getElementById(‘paypal-form’);var detailsInput =document.getElementById(‘details-input’);var jsonDetails =JSON.stringify(details);detailsInput.value= jsonDetails;paypalForm.submit();
Al hacer pagar con mi cuenta de comprador de prueba ... no redirecciona al "/succss"
en product.ejs es en la linea 27 "method" en lugar de "metod"
Gracias
primer comentario
En caso de que, por usar el ejemplo que da el profesor, deba cancelar el pago porque el precio fue modificado, como se rechaza esa transaccion?
Ami no me hace la redireccion aunque si pasa los datos del details como json
Comparte un repositorio con tu código para poder ayudarte
Hola, lo que no entiendo es la BASE DE DATOS, de que tipo es, como se llama, etc
Si mal no recuerdo es sqlite
Trato de dar la explicacion mas clara posible:
.
La base de datos del ejercicio se llama “database”.
.
Se hace uso del motor de base de datos mas liviano (por decirlo asi) llamado SQLite.
.
Esta base de datos esta almacenada en un archivo llamado database.sqlite3 que se encuentra en la raiz del proyecto.
.
Esta base de datos se genera gracias a un ORM, instalado en el proyecto, llamado Sequelize, el cual usa unos archivos llamados migraciones, para poblar dos tablas llamadas products y orders respectivamente.
.
Finalmente como comentario extra, los archivos de sqlite son visibles en visual studio code si se instala un pluggin o tambien en aplicaciones para ver bases de datos como HeidiSQL que es open source. Alguna vez tambien conoci una extencion para firefox que podia ver los arhcivos sql, pero no recuerdo su nombre.
Creación de formulario para mandar al backend y verificar.
captura y verificación de transacciones
Consulta así como funciona el btn de paypal, la tarjeta de crédito o débito también funcionan de buena manera ??
¿Entonces con el ID de la transacción se podría realizar otro cobro en caso de que como comentas el usuario lo altere?
¿cómo puedo verificar en el backend que la transacción de paypal ha sido creada? si la captura solo la hago en el frontend el usuario podría modificar el llamado POST al backend y engañarme, no?
Creo que ahi entra en juego tu astucia como backend para asegurarte de que el post no fue modificado de manera fraudulenta
Entiendo que esto es para integración de una aplicación web pero en una app como podria realizar la integración?