Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

412
Vistas
Flujo de pago: ¿cómo debo procesar un nuevo pedido?

Estoy tratando de crear una aplicación que permita al cliente descargar un documento personalizado después de su pedido (entonces, el producto que vendo es un documento personalizado digital en pdf).

Estoy tratando de construir eso usando React para el frontend, Node y Express para el backend y PayPal Express Checkout (implementación de pila completa) como pago.

Lo que no me queda claro es qué pasos debo seguir para tramitar un pedido .

Soy un este punto:

  1. Una vez que el cliente hace clic en el botón de PayPal en el lado del cliente, inicia una llamada en el extremo de http://localhost/api/paypal/orders que crea el pedido en el lado de Paypal y devuelve el ID de pedido de PayPal (por ejemplo id12345 )
  2. Después de que el cliente aprueba el pago en la ventana emergente de PayPal, el cliente inicia una llamada en http://localhost/api/paypal/orders/id12345/capture endpoint

¿después? ¿Qué otros puntos finales debo crear en el servidor y qué deben devolver? Tal vez... 1 para guardar el pedido real de la tienda en mi MongoDB y los detalles de la transacción, 1 para crear la factura del pedido, 1 para permitir la descarga del producto.

¿Podría aclarar qué pasos debo seguir, cuáles son los puntos finales que debo crear y qué debe devolver cada punto final?


¿Quizás algo como esto?

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Estás intentando hacer demasiadas cosas en demasiadas rutas. simplemente cree una ruta llamada algo así como process-order luego podría tener un controlador asíncrono de esa ruta que contendría funciones separadas para

  1. Almacenar los detalles del pedido en mongodb.
  2. Crear una factura
  3. Enviar un token que permita el acceso a la página de descarga.

primero, solo await la función se complete y luego llame a la siguiente.

 exports.processOrder = async (req, res, next) => { try { const newOrder = await Order.create({ order: req.params.id, details: req.body.details }) const createInvoice = () => { return newOrder._id; } const invoice = createInvoice(); const token = jwt.sign( { invoiceId = newOrder._id, }, process.env.JWT_SECRET, { expiresIn: '24h' } ); return res.status(200).json({status: 'success', message: 'you have 24 hours to download your digital goods', token}) } catch (error) { res.status(500).send(error) } }

Esta es una idea muy básica, pero básicamente almacene toda su información en un controlador, luego envíe un token con la identificación de la factura, luego, cuando vayan a descargar el libro, tendrá una ruta donde verificará el token. Si tiene éxito, se envía el libro. como esto:

 app.use( '/book-download', expressJwt({ secret: process.env.JWT_SECRET, algorithms: ['HS256'] }) ); app.get('/book-download/success', async (req, res) => { try{ const invoiceId = req.user.invoiceId; const invoice = await Invoice.find({_id: invoiceId}) if (invoice) { return res.status(200).json({status: 'success', message: 'congratulations on your new download', data: {E-book}) } else { return.res.status(404).json({status: 'fail', message: 'could not find an invoice with that ID'}) } catch (error) { return res.send(error) } });

Puede optar por enviar el pdf vía express, o puede permitirles ingresar a una determinada parte del sitio web si la devolución es válida. Ahí lo tienes, es una idea.

over 4 years ago · Santiago Trujillo Denunciar

0

En el pago rápido, debe definir el controlador de éxito/cancelación

Consulte aquí: https://www.section.io/engineering-education/nodejs-paypal-checkout/

En el controlador de éxito, según el URI devuelto => obtendrá una ID de pagador y una ID de pago. En base a eso, recupere la información de la transacción (que internamente contiene su ID de pedido). Actualice su ID de pedido como correcto/cancelado según la respuesta de PayPal.

 app.get('/success', (req, res) => { const payerId = req.query.PayerID; const paymentId = req.query.paymentId; const execute_payment_json = { "payer_id": payerId, "transactions": [{ "amount": { "currency": "USD", "total": "25.00" } }] }; // Obtains the transaction details from paypal paypal.payment.execute(paymentId, execute_payment_json, function (error, payment) { //When error occurs when due to non-existent transaction, throw an error else log the transaction details in the console then send a Success string reposponse to the user. if (error) { console.log(error.response); throw error; } else { console.log(JSON.stringify(payment)); res.send('Success'); } }); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda