Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

411
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda