API - Stripe Pagos y Suscripciones
Visión General
Endpoints para la gestión de pagos y suscripciones utilizando Stripe. Incluye productos de suscripción, creación de payment intents y gestión de webhooks.
GET /stripe/products/
Obtener productos de suscripción disponibles.
Response Success (200)
{
"success": true,
"data": [
{
"id": "prod_basic",
"name": "Plan Básico",
"description": "Perfecto para propietarios con pocas propiedades",
"images": ["https://stripe-images.com/basic.jpg"],
"metadata": {
"properties_limit": "5",
"features": "basic_features"
},
"prices": [
{
"id": "price_basic_monthly",
"amount": 29000,
"currency": "cop",
"interval": "month",
"interval_count": 1
},
{
"id": "price_basic_yearly",
"amount": 290000,
"currency": "cop",
"interval": "year",
"interval_count": 1
}
]
},
{
"id": "prod_pro",
"name": "Plan Profesional",
"description": "Para propietarios con múltiples propiedades",
"prices": [
{
"id": "price_pro_monthly",
"amount": 49000,
"currency": "cop",
"interval": "month",
"interval_count": 1
}
]
}
]
}
POST /stripe/create-payment-intent
Crear intención de pago para suscripción.
Request
{
"amount": 49000,
"currency": "cop",
"price_id": "price_pro_monthly",
"customer_email": "usuario@email.com",
"metadata": {
"plan_name": "Plan Profesional",
"user_id": "124"
}
}
Response Success (200)
{
"success": true,
"data": {
"client_secret": "pi_1234567890_secret_xyz",
"payment_intent_id": "pi_1234567890",
"publishable_key": "pk_test_...",
"amount": 49000,
"currency": "cop"
}
}
GET /stripe/user-subscriptions
Obtener suscripciones del usuario autenticado.
Response Success (200)
{
"success": true,
"data": [
{
"id": "sub_1234567890",
"status": "active",
"current_period_start": "2024-01-15T00:00:00Z",
"current_period_end": "2024-02-15T00:00:00Z",
"plan": {
"id": "price_pro_monthly",
"name": "Plan Profesional",
"amount": 49000,
"currency": "cop",
"interval": "month"
},
"customer": {
"email": "usuario@email.com"
},
"cancel_at_period_end": false,
"trial_end": null
}
]
}
GET /stripe/user-subscription-status
Verificar estado de suscripción del usuario.
Response Success (200)
{
"success": true,
"data": {
"has_active_subscription": true,
"subscription_status": "active",
"plan_name": "Plan Profesional",
"current_period_end": "2024-02-15T00:00:00Z",
"features": {
"properties_limit": 20,
"contracts_enabled": true,
"chatbot_enabled": true,
"analytics_enabled": true
}
}
}
GET /stripe/user-subscription-simple
Verificación simple de suscripción activa.
Response Success (200)
{
"success": true,
"data": {
"is_active": true,
"plan_name": "Plan Profesional"
}
}
POST /stripe/webhook
Webhook para eventos de Stripe.
Request Headers
Stripe-Signature: t=1234567890,v1=hash_signature
Request Body
{
"id": "evt_1234567890",
"object": "event",
"type": "customer.subscription.created",
"data": {
"object": {
"id": "sub_1234567890",
"customer": "cus_1234567890",
"status": "active"
}
}
}
Response Success (200)
{
"status": "success"
}
Planes Disponibles
Plan Básico ($29.000 COP/mes)
- Hasta 5 propiedades
- Gestión básica de inquilinos
- Reportes simples
- Soporte por email
Plan Profesional ($49.000 COP/mes)
- Hasta 20 propiedades
- Gestión avanzada
- Contratos digitales
- ChatBot incluido
- Reportes avanzados
Plan Empresarial ($99.000 COP/mes)
- Propiedades ilimitadas
- Múltiples usuarios
- API personalizada
- Soporte prioritario
- Análisis predictivo
Eventos de Webhook
Eventos Manejados
payment_intent.succeeded: Pago exitosocustomer.subscription.created: Nueva suscripcióncustomer.subscription.updated: Actualización de suscripcióncustomer.subscription.deleted: Cancelación de suscripcióninvoice.payment_succeeded: Pago de factura exitosoinvoice.payment_failed: Fallo en pago de factura
Seguridad de Webhooks
- Verificación de firma Stripe
- Validación de timestamp
- Procesamiento idempotente
- Logging de todos los eventos
Configuración Frontend
Stripe Elements
import { loadStripe } from '@stripe/stripe-js';
const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY);
Payment Intent
const { client_secret } = await fetch('/stripe/create-payment-intent', {
method: 'POST',
body: JSON.stringify({ amount: 49000, currency: 'cop' })
}).then(res => res.json());
const { error } = await stripe.confirmCardPayment(client_secret, {
payment_method: {
card: elements.getElement(CardElement),
billing_details: { name: 'Usuario' }
}
});
Métodos de Pago Soportados
- Tarjetas de crédito (Visa, Mastercard, Amex)
- Tarjetas de débito
- PSE (Pagos Seguros en Línea)
- Efecty
- Baloto