IntegracionesPublicado el 30 de octubre de 2024 · 12 min de lectura

Integración completa de Stripe con Drupal: Desde cero hasta producción

Guía detallada para integrar Stripe con Drupal, manejando suscripciones, webhooks y cumplimiento de PCI-DSS.

La clave para escalar un negocio servicio o SaaS es dejar de cobrar manualemente. Automatizar tus cobros con Stripe no solo te ahorra tiempo, sino que hace que tu negocio sea más valioso.

Beneficios para tu Negocio

  • Ingresos Recurrentes: Suscripciones automáticas sin perseguir facturas.
  • Menos Errores: Olvídate de comprobar transferencias manuales.
  • Seguridad Total: Tus clientes confían en pagar con tarjeta.
  • Escalabilidad: Cobra a 10 o a 10.000 clientes sin trabajo extra.

En este artículo, te muestro cómo integramos Stripe en plataformas Drupal para convertir un negocio manual en una máquina de facturación automática y segura.

El Objetivo: Facturar mientras duermes

Nuestro cliente perdía horas cada mes gestionando cobros y persiguiendo impagos. Necesitaban una solución que:

  • Cobrará suscripciones mensuales y anuales automáticamente.
  • Gestionara facturas e impuestos sin intervención humana.
  • Permitiera a los usuarios actualizar sus tarjetas o planes solos.
  • Cumpliera con toda la normativa de seguridad bancaria (PCI-DSS).

Arquitectura de la integración

Para esta integración, utilizamos una arquitectura que separa claramente las responsabilidades para máxima seguridad y modularidad:

Frontend & Stripe Elements

Formulario de pago seguro que envía datos directamente a Stripe, sin tocar tu servidor (PCI-DSS compliant).

Backend Drupal

Gestiona usuarios, permisos y "escucha" a Stripe para saber si una suscripción está activa.

Webhooks

El "pegamento" en tiempo real. Stripe avisa a Drupal cuando un pago ocurre, falla o se cancela.

Seguridad

Uso de tokens seguros y validación de firmas criptográficas en cada comunicación.

Implementación paso a paso

1. Configuración de credenciales

Primero, creamos un módulo personalizado de Drupal para gestionar las credenciales de Stripe de forma segura (nunca hardcoded):

// Configuración en settings.php o mediante variables de entorno
$settings['stripe_public_key'] = $_ENV['STRIPE_PUBLIC_KEY'];
$settings['stripe_secret_key'] = $_ENV['STRIPE_SECRET_KEY'];
$settings['stripe_webhook_secret'] = $_ENV['STRIPE_WEBHOOK_SECRET'];

2. Creación del formulario de pago

Utilizamos Stripe Elements para crear un formulario de pago seguro que cumple con PCI-DSS:

// Ejemplo simplificado de integración frontend
const elements = stripe.elements();
const cardElement = elements.create('card');
cardElement.mount('#card-element');

// Manejo del submit del formulario
form.addEventListener('submit', async (event) => {
  event.preventDefault();
  const {token, error} = await stripe.createToken(cardElement);
  // Enviar token a Drupal para procesamiento
});

3. Procesamiento de pagos en Drupal

Implementamos un servicio personalizado para interactuar con la API de Stripe:

// Ejemplo de creación de cliente y suscripción
$customer = \Stripe\Customer::create([
  'email' => $user->getEmail(),
  'source' => $token,
]);

$subscription = \Stripe\Subscription::create([
  'customer' => $customer->id,
  'items' => [['price' => $price_id]],
]);

Manejo de suscripciones

Una de las partes más complejas fue el manejo de diferentes estados de suscripciones. Automatizamos la respuesta a cada escenario:

  • Suscripción activaAcceso completo inmediato a la plataforma.
  • Periodo de graciaSi el pago falla, damos unos días de acceso mientras reintentamos el cobro.
  • Cancelada/ImpagoEl sistema revoca el acceso automáticamente y envía emails de recuperación.

Webhooks: La clave de la sincronización

Los webhooks mantienen Drupal actualizado en tiempo real. Por ejemplo, si una suscripción se renueva automáticamente en Stripe, Drupal recibe el aviso y extiende el acceso.

// Endpoint para manejar webhooks de Stripe
public function handleWebhook(Request $request) {
  // Verificación de firma y manejo de eventos...
  switch ($event->type) {
    case 'customer.subscription.created':
      // Activar suscripción
      break;
    case 'invoice.payment_succeeded':
      // Registrar factura
      break;
    case 'customer.subscription.deleted':
      // Revocar acceso
      break;
  }
}

Errores comunes y cómo evitarlos

Almacenar datos sensiblesNunca guardes números de tarjeta en tu BD. Viola PCI-DSS.
Ignorar webhooksSin ellos, tu sistema no sabrá si una renovación falló o tuvo éxito.
Manejo de errores pobreMuestra mensajes claros al usuario si su tarjeta es rechazada.
Testing insuficientePrueba escenarios límite: tarjetas caducadas, fondos insuficientes, etc.

Conclusión

La integración de Stripe con Drupal es un proceso complejo pero esencial para muchas plataformas de comercio electrónico y SaaS. Con una arquitectura bien pensada, atención a la seguridad y manejo adecuado de webhooks, es posible crear una integración robusta y escalable.

Si necesitas integrar Stripe con tu plataforma Drupal o tienes un proyecto complejo de integración de pagos, contáctame para una consulta gratuita.

¿Necesitas una integración robusta a medida?

Si prefieres delegar la complejidad técnica a un perfil Senior (Stripe, APIs, integraciones complejas), consulta mi calculadora de precios para desarrollos a medida.

Calcula tu presupuesto en 1 minuto

Deja de cobrar manualmente

Analizamos tu proceso de cobro y te decimos cómo automatizarlo al 100%.

¿Hablamos? Respondo en menos de 24h