Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

342
Views
¿Cómo enviar metadatos en franja durante el proceso de pago?
const combineData = function (prod, pot, data) { const newData = [...prod, ...pot]; const finalCheckout = []; for (let i = 0; i < newData.length; i++) { finalCheckout.push({ name: newData[i].plantName || newData[i].potName, images: [newData[i].images[0]], amount: newData[i].price * 100, currency: "inr", quantity: data[i].quantity, metadata: { id: String(newData[i]._id) },// **Mongoose ID** }); } return finalCheckout; }; exports.getCheckOutSession = catchAsync(async (req, res, next) => { const [product, pot] = filterVal(req.body.product); const userId = req.user._id; const products = await ProductModel.find({ _id: { $in: product } }); const pots = await PotModel.find({ _id: { $in: pot } }); const newData = combineData(products, pots, req.body.product); // 2. create the checkout session const session = await stripe.checkout.sessions.create({ payment_method_types: ["card"], success_url: `${req.protocol}://${req.get("host")}/?alert=booking`, cancel_url: `${req.protocol}://${req.get("host")}/products/`, customer_email: req.user.email, client_reference_id: userId, line_items: newData, }); res.status(200).json({ status: "success", url: session.url, }); });

Estoy creando un sitio web de comercio electrónico, cuando el usuario realiza un pago, quiero enviar la identificación del producto almacenada en mi base de datos mongodb como metadatos en stripe. Pero estoy recibiendo un error de cómo resolver esto.

Error:parameter_unknown - line_items[0][metadatos] Parámetro desconocido recibido: line_items[0][metadatos]

Stripe está rechazando la identificación de mongodb tiene metadatos

"metadatos": { "id": "61e40a5a7d83539092e7a92f" }

NOTA: Estoy enviando todos los datos exitosos como precio, nombre, cantidad de imágenes, cantidad en la función combineData anterior.

  1. He probado el código anterior sin clave de metadatos. Funciona bien, mi pago está registrado y el evento de webhook está registrado en Stripe.
  2. Cuando uso la palabra clave de metadatos, el error anterior ocurre en stripe.
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Primero debe crear producto + precio.

Después de informar a Stripe de los elementos de línea, el token de sesión se devolverá al lado del cliente y los usuarios serán redirigidos a la página de pago de Stripe.

Stripe podrá saber qué elementos (por ejemplo, imagen, nombre del producto, descripción del producto) mostrar al usuario, a través de los elementos de línea que envió al crear la sesión.

Si simplemente pasa un _id de MongoDB, Stripe no sabrá qué elementos mostrar, ya que no tienen información del producto.

 const session = await stripe.checkout.sessions.create({ customer: customerId, billing_address_collection: 'auto', payment_method_types: ['card'], line_items: [ { price: STRIPE_PRODUCT_PRICE, //price of created product // For metered billing, do not pass quantity quantity: 1, }, ], // success_url: `${YOUR_DOMAIN}?success=true&session_id={CHECKOUT_SESSION_ID}`, // cancel_url: `${YOUR_DOMAIN}?canceled=true`, });

Ejemplo de cómo se ve el producto de la tira y la identificación del precio. Un mismo producto puede tener muchos precios diferentes.

 STRIPE_PRODUCT=prod_I7a38cue83jd STRIPE_PRICE=price_1HXL0wBXeaFPR83jhdue883

Estas referencias te serán útiles.

Crear un producto: https://stripe.com/docs/api/products/create

Crear un precio: https://stripe.com/docs/api/prices/create

Normalmente almacenaré la identificación del producto y la identificación del precio como stripe_product_id y stripe_product_price en la base de datos local de MongoDB para que pueda usarla durante el pago.

Entonces, después de recibir el pedido, puede crear primero un pedido local, con los productos y la cantidad, luego...

 const line_items = ordered_products.map(product => ({ price: product.stripe_product_price, quantity: product.quantity })) const session = await stripe.checkout.sessions.create({ .... line_items, ... })

Método avanzado: creación de productos y precios sobre la marcha.

Esto es más tedioso porque necesita hacer más controles.

Puede hacer referencia a la creación de elementos de línea en el siguiente enlace de los documentos de la banda.

https://stripe.com/docs/api/checkout/sessions/object

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!