Saltar al contenido

Lección 2 de 25 · Lectura y práctica

Instalar y Configurar el SDK de Stripe en tu Backend

Concepto claveEl SDK de Stripe es la herramienta principal que conecta tu backend con los servicios de pago de Stripe. Piensa en él como el traductor oficial entre tu código y la compleja infraestructura de pagos: convierte tus.

Del concepto a la práctica

Taller de esta lección

Configurar el SDK consiste en aislar la autenticación y comprobar el manejo de errores antes de crear objetos de negocio. Una función de fábrica evita que cada ruta construya clientes distintos o lea directamente secretos.

Ejemplo resuelto

Con el paquete stripe instalado y módulos ESM, la configuración mínima sería:

js
import Stripe from "stripe";
const key = process.env.STRIPE_SECRET_KEY;
if (!key) throw new Error("Falta STRIPE_SECRET_KEY");
const stripe = new Stripe(key);

La ruta de creación de cliente usa esa única instancia y registra solo el identificador devuelto, nunca el secreto ni todos los datos sensibles.

Confirma la versión del SDK y el contrato API al que está vinculada en el proyecto y el endpoint de eventos. Los campos pueden cambiar entre versiones; captura las referencias de la respuesta real en vez de copiar propiedades de un ejemplo histórico. Un error de red tras una creación no prueba que nada se haya creado: conserva la misma clave idempotente al reintentar la misma intención.

Pruébalo

  1. Ejecuta el backend sin la variable.

  2. Comprueba que falla antes de aceptar peticiones.

  3. Usa un mock para el resultado ficticio, o una clave de prueba válida de tu sandbox autorizado.

  4. Simula una respuesta correcta y otra con error de autenticación.

Error frecuente: capturar cualquier excepción y devolver éxito. Corrección: separar errores de configuración, validación y servicio, y devolver un estado apropiado.

Comprueba tu resultado

El resultado esperado es un fallo explícito cuando falta la variable, una sola instancia del cliente y un registro que contenga únicamente request_id, categoría del error y estado HTTP.

Proveedor de pago que envía un webhook verificado al servidor; registro idempotente antes de conceder acceso.
CursaloMapa de práctica
Confirmar el pago en el servidor

El servidor concede acceso a partir de un evento verificado del proveedor y un registro persistente. La pantalla de éxito del navegador es una notificación, no una prueba suficiente de pago. La idempotencia evita duplicar la operación cuando el evento llega más de una vez.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

Concepto clave

El SDK de Stripe es la herramienta principal que conecta tu backend con los servicios de pago de Stripe. Piensa en él como el traductor oficial entre tu código y la compleja infraestructura de pagos: convierte tus solicitudes en llamadas API seguras y procesa las respuestas de Stripe de manera confiable. Sin este SDK, tendrías que manejar manualmente autenticación, serialización de datos y manejo de errores, lo que sería como construir tu propio puente en lugar de usar uno ya probado.

En el contexto de suscripciones y facturación, el SDK no solo procesa pagos, sino que gestiona todo el ciclo de vida: creación de clientes, configuración de productos, manejo de suscripciones y procesamiento de webhooks. Es el orquestador central que coordina todas las operaciones de facturación recurrente, asegurando que cada componente (cliente, producto, suscripción, factura) esté correctamente sincronizado.

Cómo funciona en la práctica

La implementación sigue un flujo estructurado: primero instalas el paquete, luego configuras las credenciales, después inicializas el cliente y finalmente comienzas a usar las diferentes funcionalidades. Veamos el proceso paso a paso:

  1. Instalación del paquete mediante tu gestor de dependencias
  2. Configuración de las claves API (pública y secreta) en variables de entorno
  3. Inicialización del cliente Stripe en tu aplicación
  4. Implementación de tus primeros endpoints para crear clientes y productos
  5. Configuración del manejo básico de webhooks

Este enfoque asegura que tu integración sea segura (las claves sensibles nunca están en el código), mantenible (configuración centralizada) y escalable (listo para añadir más funcionalidades).

Código en acción

Aquí tienes la configuración básica en Node.js con Express:

// 1. Instalación (ya realizada via npm/yarn)
// npm install stripe

// 2. Configuración inicial
const express = require('express');
const Stripe = require('stripe');
require('dotenv').config();

const app = express();
app.use(express.json());

// Inicialización del cliente Stripe
const stripe = Stripe(process.env.STRIPE_SECRET_KEY);

// 3. Endpoint para crear un cliente
app.post('/api/create-customer', async (req, res) => {
  try {
    const { email, name } = req.body;
    
    const customer = await stripe.customers.create({
      email,
      name,
      metadata: {
        userId: '12345', // ID de tu sistema
        plan: 'premium'
      }
    });
    
    res.json({ success: true, customerId: customer.id });
  } catch (error) {
    console.error('Error creando cliente:', error);
    res.status(500).json({ error: error.message });
  }
});

// 4. Endpoint para crear un producto con precio recurrente
app.post('/api/create-product', async (req, res) => {
  try {
    const { name, description, amount, interval } = req.body;
    
    // Primero creamos el producto
    const product = await stripe.products.create({
      name,
      description,
      metadata: {
        internalCode: 'PROD_001'
      }
    });
    
    // Luego el precio asociado
    const price = await stripe.prices.create({
      product: product.id,
      unit_amount: amount, // en centavos
      currency: 'usd',
      recurring: {
        interval: interval || 'month'
      }
    });
    
    res.json({ 
      success: true, 
      productId: product.id, 
      priceId: price.id 
    });
  } catch (error) {
    console.error('Error creando producto:', error);
    res.status(500).json({ error: error.message });
  }
});

app.listen(3000, () => {
  console.log('Servidor ejecutándose en puerto 3000');
});

Y aquí cómo mejorar la configuración para producción:

// Configuración mejorada para producción
const stripe = Stripe(process.env.STRIPE_SECRET_KEY, {
  apiVersion: '2023-10-16', // Versión específica para consistencia
  maxNetworkRetries: 3, // Reintentos automáticos
  timeout: 10000, // Timeout de 10 segundos
  telemetry: false // Desactiva telemetría en producción
});

// Middleware para verificar webhooks
const endpointSecret = process.env.STRIPE_WEBHOOK_SECRET;

app.post('/webhook', express.raw({type: 'application/json'}), 
  async (req, res) => {
    const sig = req.headers['stripe-signature'];
    
    let event;
    try {
      event = stripe.webhooks.constructEvent(
        req.body, sig, endpointSecret
      );
    } catch (err) {
      console.error('Webhook signature verification failed:', err.message);
      return res.status(400).send(`Webhook Error: ${err.message}`);
    }
    
    // Manejo del evento
    switch (event.type) {
      case 'customer.subscription.created':
        await handleSubscriptionCreated(event.data.object);
        break;
      case 'invoice.payment_succeeded':
        await handlePaymentSucceeded(event.data.object);
        break;
      default:
        console.log(`Unhandled event type: ${event.type}`);
    }
    
    res.json({received: true});
  }
);

Errores comunes

  • Exponer la clave secreta en el frontend: La clave secreta (STRIPE_SECRET_KEY) solo debe usarse en el backend. En el frontend usa la clave pública (STRIPE_PUBLISHABLE_KEY).
  • No validar webhooks: Siempre verifica la firma de los webhooks usando stripe.webhooks.constructEvent(). Sin esto, cualquiera podría enviarte eventos falsos.
  • Manejo inadecuado de errores: Stripe devuelve errores específicos (card_declined, insufficient_funds). Captúralos y proporcióna mensajes claros al usuario.
  • No versionar la API: Especifica una versión de API en la configuración para evitar cambios rotos cuando Stripe actualice su API.
  • Olvidar el manejo de idempotencia: Para operaciones críticas como crear suscripciones, usa claves de idempotencia para evitar cobros duplicados.

Checklist de dominio

  1. SDK instalado correctamente y funcionando en tu entorno de desarrollo
  2. Claves API configuradas como variables de entorno (nunca en el código)
  3. Cliente Stripe inicializado con configuración apropiada para tu entorno
  4. Endpoints básicos implementados (crear cliente, producto, precio)
  5. Manejo de errores implementado para todas las operaciones de Stripe
  6. Webhooks configurados y validando firmas correctamente
  7. Logs implementados para rastrear todas las interacciones con Stripe

Configura un entorno de integración completo con Stripe

Implementa un backend básico que integre Stripe siguiendo estas instrucciones:

  1. Crea un nuevo proyecto Node.js con Express
  2. Instala las dependencias necesarias: stripe, express, dotenv
  3. Configura un archivo .env con tus claves de Stripe (usa claves de test)
  4. Implementa los siguientes endpoints:
    • POST /api/customers - Crea un nuevo cliente en Stripe
    • POST /api/products - Crea un producto con precio recurrente mensual
    • POST /api/subscriptions - Crea una suscripción para un cliente existente
    • POST /webhook - Endpoint para recibir y validar webhooks
  5. Asegúrate de que cada endpoint:
    • Valide los datos de entrada
    • Maneje errores específicos de Stripe
    • Registre las operaciones en consola
  6. Prueba tu implementación usando el dashboard de Stripe Test
Pistas
  • Usa el método stripe.customers.create() para crear clientes, incluyendo metadata relevante
  • Para webhooks, recuerda usar express.raw() middleware y validar la firma con stripe.webhooks.constructEvent()
  • Configura diferentes precios (monthly, yearly) para el mismo producto usando stripe.prices.create()

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Implementación Profesional de Suscripciones y Facturación con Stripe

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.