馃摝 Integraci贸n con APIs externas (Stripe, Firebase, etc.)

Curso Next.js — Integraci贸n con APIs externas

馃摝 Integraci贸n con APIs externas (Stripe, Firebase, etc.)

Aprende c贸mo conectar tu aplicaci贸n Next.js con APIs externas como Stripe, Firebase y otros servicios, gestionando datos de forma segura y eficiente tanto en el cliente como en el servidor.


馃實 ¿Por qu茅 integrar APIs externas?

Las APIs externas permiten que tu aplicaci贸n Next.js se comunique con servicios de terceros (pagos, bases de datos en la nube, autenticaci贸n, anal铆tica, etc.). Esta integraci贸n ampl铆a las capacidades de tu app sin necesidad de desarrollar todo desde cero.

Algunos ejemplos comunes incluyen:


馃挸 Integraci贸n con Stripe (pagos)

Stripe es una de las plataformas m谩s usadas para procesar pagos online. Con Next.js puedes crear endpoints seguros en el servidor y formularios en el cliente para gestionar los pagos.

馃搫 Instalaci贸n
npm install stripe
馃搫 pages/api/checkout.js
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export default async function handler(req, res) {
  if (req.method === 'POST') {
    try {
      const session = await stripe.checkout.sessions.create({
        payment_method_types: ['card'],
        line_items: [
          {
            price_data: {
              currency: 'usd',
              product_data: { name: 'Curso Next.js' },
              unit_amount: 1999,
            },
            quantity: 1,
          },
        ],
        mode: 'payment',
        success_url: 'http://localhost:3000/success',
        cancel_url: 'http://localhost:3000/cancel',
      });
      res.status(200).json({ id: session.id });
    } catch (err) {
      res.status(500).json({ error: err.message });
    }
  } else {
    res.setHeader('Allow', 'POST');
    res.status(405).end('Method Not Allowed');
  }
}
      
馃搫 app/checkout/page.js
'use client';
import { useState } from 'react';

export default function CheckoutPage() {
  const [loading, setLoading] = useState(false);

  const handleCheckout = async () => {
    setLoading(true);
    const res = await fetch('/api/checkout', { method: 'POST' });
    const data = await res.json();
    window.location.href = `https://checkout.stripe.com/pay/${data.id}`;
  };

  return (
    <div className="text-center p-4">
      <h3 className="mb-3">Comprar curso Next.js</h3>
      <button onClick={handleCheckout} disabled={loading}
        className="btn btn-primary">
        {loading ? 'Procesando...' : 'Pagar con Stripe'}
      </button>
    </div>
  );
}
      
馃挕 Consejo: Nunca coloques tu clave privada de Stripe en el cliente. Gu谩rdala en .env.local y accede a ella desde el servidor.

馃敟 Integraci贸n con Firebase

Firebase ofrece m煤ltiples servicios como autenticaci贸n, base de datos en tiempo real y almacenamiento. Para integrarlo en tu aplicaci贸n Next.js:

馃搫 Instalaci贸n
npm install firebase
馃搫 lib/firebase.js
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_FIREBASE_KEY,
  authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
  storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_SENDER_ID,
  appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
};

const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
      
馃搫 app/usuarios/page.js
'use client';
import { useEffect, useState } from 'react';
import { collection, getDocs } from 'firebase/firestore';
import { db } from '../../lib/firebase';

export default function Usuarios() {
  const [usuarios, setUsuarios] = useState([]);

  useEffect(() => {
    const obtenerDatos = async () => {
      const querySnapshot = await getDocs(collection(db, 'usuarios'));
      setUsuarios(querySnapshot.docs.map(doc => doc.data()));
    };
    obtenerDatos();
  }, []);

  return (
    <div className="p-4">
      <h3 className="text-center mb-3">馃懃 Lista de Usuarios</h3>
      {usuarios.map((u, i) => (
        <div key={i} className="border p-2 rounded mb-2">
          <strong>{u.nombre}</strong> - {u.email}
        </div>
      ))}
    </div>
  );
}
      
✅ Con este setup puedes leer, escribir y autenticar usuarios f谩cilmente desde Firebase.

馃З Conclusi贸n

馃挕 Consejo: Mant茅n la l贸gica sensible (claves, endpoints, tokens) siempre en el lado del servidor o protegida con variables de entorno.

Publicar un comentario

0 Comentarios