Creé una aplicación en Nextjs (js) y Firebase . Y agregué la extensión Stripe para hacer un sistema de suscripción. No tengo mucha experiencia con esta nueva versión 9 de Firebase, por lo que fue difícil hacerlo porque seguí un tutorial que usaba la versión 8 y ts. Todavía logré hacer que la mayoría de las cosas funcionaran, excepto esto que me está dando este error.
Este es el tutorial: https://youtu.be/P0Udy2Gi7n8?t=859 (mi problema a las 14:19)
Estoy teniendo el error aquí:
import getStripe from "./initializeStripe"; import { db } from '../firebase/firebaseClient' import { doc, getDoc, addDoc, setDoc, setCol, onSnapshot, collection } from "firebase/firestore"; export async function createCheckoutSession(uid) { const docData = { price: "price_1KvNgoI6qyGEmrlgKU3miVmT", success_url: window.location.origin, cancel_url: window.location.origin, }; const checkoutSessionRef = await setDoc(collection(db, "users", uid, "checkout_sessions"), docData); //ERROR onSnapshot(getDoc(doc(checkoutSessionRef)), (snap) => { const { sessionId } = snap.data(); if (sessionId) { // We have a session, let's redirect to checkout // Init Stripe const stripe = getStripe(); stripe.redirectToCheckout({ sessionId }) } });El error es el siguiente:
Error de tiempo de ejecución no controlado FirebaseError: tipo esperado 'mc', pero era: un objeto yc personalizado
setDoc() toma una DocumentReference como primer parámetro pero está pasando una CollectionReference . Intenta usar addDoc() en su lugar:
await addDoc(collection(db, "users", uid, "checkout_sessions"), {...data}) Esto agregará un documento con una ID de documento generada aleatoriamente. Si desea especificar el documento usted mismo, puede usar setDoc() como se muestra a continuación:
await setDoc(doc(db, "users", uid, "checkout_sessions", "DOC_ID"), {...data})