Lo primero gracias por tu ayuda. Estoy tratando de pasar un valor publicado desde el lado del cliente al objeto Stripe create-checkout-session para cobrar una cantidad personalizada por un pastel según lo determinado en el lado del cliente.
Si desea ver mi código completo, consulte https://github.com/calumbradley/cakeitorleaveit
Los datos de precio se reciben a través de una ruta que se llama /datos en el req.cuerpo[0].precio
Parece que no puedo encontrar una manera de pasar esto a los datos de precio de la sesión de pago y creación y luego al valor de cantidad de unidad.
Consulte el código de mi servidor Express a continuación. El error se menciona en el comentario a la derecha de unit_amount.
Tenga en cuenta que he hecho esta pregunta de una forma u otra anteriormente, ¡desafortunadamente todavía estoy atascado en ella!
app.post('/data', (req, res, next) => { console.log(req.body[0].price); //logs an int of 7 to the console res.send({message : "Successful request"}) next() }) app.post("/create-checkout-session", async (req, res) => { const session = await stripe.checkout.sessions.create({ payment_method_types: ["card"], line_items: [ { price_data: { currency: "gbp", unit_amount: req.body[0].price, //errors with "TypeError: Cannot read properties of undefined (reading 'price')" product_data: { name: "CakeItOrLeaveIt", // description: "", cake it or leave it description // images: [], cake it or leave it logo }, }, quantity: 1, }, ], mode: "payment", success_url: `http://localhost:4242/success.html`, cancel_url: `http://localhost:4242/cancel.html`, }); res.redirect(303, session.url); }); app.listen(4242, () => console.log(`Node server listening on port ${port}!`));Parece que espera recibir dos solicitudes HTTP separadas:
POST /dataPOST /create-checkout-session Tenga en cuenta que express maneja estas dos solicitudes de forma completamente independiente. Cada función de req recibirá un objeto de solicitud que contiene los datos de la solicitud actual. Entonces, la solicitud a la ruta POST /data incluye el price (como vio al imprimirlo en la consola), pero la solicitud a POST /create-checkout-session solo incluirá los datos que se proporcionaron directamente en esa solicitud. Si el price no estaba en esa solicitud, no estará disponible en el req de solicitud.
Si necesita compartir datos entre las solicitudes, debe hacer algo para que eso suceda. Podría simplemente guardarlo localmente, pero no es una buena idea porque solo tendría un valor para todos los usuarios que podrían estar enviando solicitudes a su servidor. Necesita una forma de distinguir los datos de un usuario de otro.
Una forma común de manejar eso es usar el módulo de sesión rápida. El uso de este módulo le permitiría asociar datos con una sesión de usuario en particular y compartirlos entre diferentes rutas. Pero si está utilizando la API de Stripe, probablemente tenga su propia forma de manejar las sesiones. En ese caso, debe consultar la documentación de Stripe para comprender cómo funcionan sus sesiones.