Quiero almacenar la orden de compra en firebase, una vez que se hace clic en el boton Ir a pagar Se despliega el boton de Mercado pago que me lleva a un enlace propio de MP, cuando realice el pago en mercado pago, no antes porque sino se almacena la compra sin haber pagado, quiero q vuelva una respuesta al front q se realizo ese pago o en todo caso q almacene directamente en la firebase desde el server. Hasta el momento no encuentro la solución.
Esto es una parte del código, falta el resto pero es mucho código para pegar todo.
Front:
Compra = () => {//Almacenamos los datos de la orden d compra const orden = { compra: { nombre: user.nombre || "", email: user.email || "", telefono: user.telefono || "", domicilio: user.domicilio || "", barrio: user.barrio || "", ciudad: user.ciudad || "", provincia: user.provincia || "", postal: user.postal || "", fechaCompra: getCurrentDate(), items: carrito, total: obtenerTotal(), formaRetiro: formaRetiro, formaPago: formaPago, numeroTarjeta: numeroTarjeta, comprobante: comprobante },const [preferenceId, setPreferenceId] = useState(null); const createPreference = async () => { try { const response = await axios.post("http://localhost:8080/create_preference", { description: "Compra Appilcha", price: obtenerTotal(), quantity: 1 }); //Enviamos la orden de compra para ser almacenada en la BBDD //await addDoc(ordenesCollection, orden.compra); const { id } = response.data; return id; } catch (error) { console.log(error); } }; const handleBuy = async () => { const id = await createPreference(); //<MpSuccess orden = {orden.compra}/> if (formaRetiro != ''&& id) { setPreferenceId(id); }else{ setFormaPago(""); Swal.fire({ position: 'center-center', icon: 'warning', title: 'Seleccione una forma de retiro', showConfirmButton: false, timer: 1500 }); } }return(<div><button className='btn btn-primary mt-3' onClick={handleBuy}>Ir a pagar</button></ div><div className='w-1/5'> {preferenceId && formaPago === "mp" && <Wallet initialization={{ preferenceId }} />}</div>)}
Server:
const express = require("express");const app = express();const cors = require("cors");const mercadopago = require("mercadopago");app.use(express.json());app.use(cors());app.get("/", function (req, res) { res.send("El servidor de MP funciona");});app.post("/create_preference", (req, res) => { let preference = { items: [ { title: req.body.description, unit_price: Number(req.body.price), quantity: Number(req.body.quantity) } ], back_urls: {"success": "http://localhost:3000","failure": "http://localhost:3000","pending": "http://localhost:3000" }, auto_return: "approved", }; mercadopago.preferences.create(preference) .then(function (response) { res.json({ id: response.body.id }); }).catch(function (error) { console.log(error); });});app.listen(8080, ()=> { console.log("El servidor esta corriendo en el puerto 8080")})