馃摝 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:
- 馃挸 Stripe para pagos en l铆nea
- 馃敟 Firebase para autenticaci贸n y base de datos en tiempo real
- 馃寪 GitHub API o OpenWeather para obtener datos externos
馃挸 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>
);
}
.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>
);
}
馃З Conclusi贸n
- Next.js permite integrar servicios externos de forma segura mediante API Routes.
- Usa variables de entorno (
.env.local) para almacenar claves privadas. - Stripe y Firebase son ejemplos populares para pagos y backend sin servidor.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias