Referencia de API para Cambiar Plan
API de Vista Previa de Cambio de Plan
Guía de Integración de Suscripciones
¿Qué es una actualización o downgrade de suscripción?
Cambiar de plan te permite mover a un cliente entre niveles o cantidades de suscripción. Úsalo para:- Alinear precios con uso o características
- Pasar de mensual a anual (o viceversa)
- Ajustar la cantidad para productos basados en asientos
Cuándo usar cambios de plan
- Actualiza cuando un cliente necesita más características, uso o asientos
- Downgrade cuando el uso disminuye
- Migra usuarios a un nuevo producto o precio sin cancelar su suscripción
Requisitos previos
Antes de implementar cambios en el plan de suscripción, asegúrate de tener:- Una cuenta de comerciante de Dodo Payments con productos de suscripción activos
- Credenciales de API (clave de API y clave secreta de webhook) desde el panel de control
- Una suscripción activa existente para modificar
- Un endpoint de webhook configurado para manejar eventos de suscripción
Guía de Implementación Paso a Paso
Sigue esta guía completa para implementar cambios en el plan de suscripción en tu aplicación:Entender los Requisitos de Cambio de Plan
- Qué productos de suscripción se pueden cambiar a cuáles otros
- Qué modo de prorrata se ajusta a tu modelo de negocio
- Cómo manejar los cambios de plan fallidos de manera elegante
- Qué eventos de webhook rastrear para la gestión de estado
Elige tu Estrategia de Prorrata
- prorated_immediately
- difference_immediately
- full_immediately
- Calcula el monto prorrateado exacto basado en el tiempo restante del ciclo
- Cobra un monto prorrateado basado en el tiempo no utilizado restante en el ciclo
- Proporciona facturación transparente a los clientes
Implementar la API de Cambio de Plan
prorated_immediately, full_immediately, o difference_immediately.Manejar Eventos de Webhook
subscription.active: Cambio de plan exitoso, suscripción actualizadasubscription.plan_changed: Plan de suscripción cambiado (actualización de mejora/reducción/adición)subscription.on_hold: Fallo en el cargo por cambio de plan, suscripción pausadapayment.succeeded: Cargo inmediato por cambio de plan exitosopayment.failed: Fallo en el cargo inmediato
Actualizar el Estado de tu Aplicación
- Concede/revoca características basadas en el nuevo plan
- Actualiza el panel del cliente con los nuevos detalles del plan
- Envía correos electrónicos de confirmación sobre cambios de plan
- Registra cambios de facturación para fines de auditoría
Probar y Monitorear
- Prueba todos los modos de prorrata con diferentes escenarios
- Verifica que el manejo de webhooks funcione correctamente
- Monitorea las tasas de éxito de los cambios de plan
- Configura alertas para cambios de plan fallidos
Vista Previa de Cambios de Plan
Antes de comprometerte a un cambio de plan, usa la API de Vista Previa para mostrar a los clientes exactamente lo que se les cobrará:- Node.js SDK
- Python SDK
API de Cambio de Plan
Usa la API de Cambio de Plan para modificar el producto, la cantidad y el comportamiento de prorrata para una suscripción activa.Ejemplos de inicio rápido
- Node.js SDK
- Python SDK
- Go SDK
- HTTP
invoice_id y payment_id se devuelven solo cuando se crea un cargo inmediato y/o una factura durante el cambio de plan. Siempre confía en los eventos de webhook (por ejemplo, payment.succeeded, subscription.plan_changed) para confirmar resultados.Gestión de Addons
Al cambiar planes de suscripción, también puedes modificar addons:Modos de Prorrata
Elige cómo facturar al cliente al cambiar de planes:prorated_immediately
- Cargos por la diferencia parcial en el ciclo actual
- Si está en prueba, se cargan inmediatamente y se cambia al nuevo plan ahora
- Reducción: puede generar un crédito prorrateado aplicado a renovaciones futuras
full_immediately
- Carga el monto total del nuevo plan inmediatamente
- Ignora el tiempo restante del antiguo plan
difference_immediately son específicos de la suscripción y distintos de Créditos de Clientes. Se aplican automáticamente a futuras renovaciones de la misma suscripción y no son transferibles entre suscripciones.difference_immediately
- Mejora: carga inmediatamente la diferencia de precio entre los planes antiguo y nuevo
- Reducción: añade el valor restante como crédito interno a la suscripción y se aplica automáticamente en las renovaciones
Escenarios de Ejemplo
Actualización: Básico ($30) → Pro ($80) con difference_immediately
Actualización: Básico ($30) → Pro ($80) con difference_immediately
Downgrade: Plus ($50) → Starter ($20) con difference_immediately
Downgrade: Plus ($50) → Starter ($20) con difference_immediately
Actualización a mitad de ciclo con prorated_immediately
Actualización a mitad de ciclo con prorated_immediately
Reiniciar facturación con full_immediately
Reiniciar facturación con full_immediately
Manejo de webhooks
Rastrea el estado de la suscripción a través de webhooks para confirmar cambios de plan y pagos.Tipos de eventos a manejar
subscription.active: suscripción activadasubscription.plan_changed: plan de suscripción cambiado (cambios de mejora/reducción/adición)subscription.on_hold: fallo en el cargo, suscripción pausadasubscription.renewed: renovación exitosapayment.succeeded: pago por cambio de plan o renovación exitosapayment.failed: fallo en el pago
Verificar firmas y manejar intenciones
- Manejador de Rutas de Next.js
- Express.js
Mejores Prácticas
Sigue estas recomendaciones para cambios de plan de suscripción confiables:Estrategia de Cambio de Plan
- Prueba a fondo: Siempre prueba los cambios de plan en modo de prueba antes de producción
- Elige prorrata cuidadosamente: Selecciona el modo de prorrata que se alinee con tu modelo de negocio
- Maneja fallos de manera elegante: Implementa un manejo de errores adecuado y lógica de reintento
- Monitorea tasas de éxito: Rastrea las tasas de éxito/fallo de cambios de plan e investiga problemas
Implementación de Webhook
- Verifica firmas: Siempre valida las firmas de los webhooks para asegurar autenticidad
- Implementa idempotencia: Maneja eventos de webhook duplicados de manera elegante
- Procesa de manera asíncrona: No bloquees las respuestas de webhook con operaciones pesadas
- Registra todo: Mantén registros detallados para depuración y fines de auditoría
Experiencia del Usuario
- Comunica claramente: Informa a los clientes sobre cambios de facturación y tiempos
- Proporciona confirmaciones: Envía correos electrónicos de confirmación para cambios de plan exitosos
- Maneja casos extremos: Considera períodos de prueba, prorratas y pagos fallidos
- Actualiza la UI de inmediato: Refleja los cambios de plan en la interfaz de tu aplicación
Problemas Comunes y Soluciones
Resuelve problemas típicos encontrados durante cambios de plan de suscripción:Cargo creado pero suscripción no actualizada
Cargo creado pero suscripción no actualizada
- El procesamiento del webhook falló o se retrasó
- El estado de la aplicación no se actualizó después de recibir webhooks
- Problemas de transacción en la base de datos durante la actualización del estado
- Implementa un manejo robusto de webhooks con lógica de reintento
- Usa operaciones idempotentes para actualizaciones de estado
- Agrega monitoreo para detectar y alertar sobre eventos de webhook perdidos
- Verifica que el endpoint de webhook sea accesible y responda correctamente
Créditos no aplicados después de un downgrade
Créditos no aplicados después de un downgrade
- Expectativas del modo de prorrateo: las reducciones acreditan la diferencia total del precio del plan con
difference_immediately, mientras queprorated_immediatelycrea un crédito prorrateado basado en el tiempo restante en el ciclo - Los créditos son específicos de la suscripción y no se transfieren entre suscripciones
- El saldo de crédito no es visible en el panel del cliente
- Usa
difference_immediatelypara reducciones cuando desees créditos automáticos - Explica a los clientes que los créditos se aplican a las renovaciones futuras de la misma suscripción
- Implementa un portal para clientes para mostrar saldos de crédito
- Revisa la vista previa de la próxima factura para ver los créditos aplicados
La verificación de la firma del webhook falla
La verificación de la firma del webhook falla
- Clave secreta de webhook incorrecta
- Cuerpo de la solicitud en bruto modificado antes de la verificación de la firma
- Algoritmo de verificación de firma incorrecto
- Verifica que estás usando el correcto
DODO_WEBHOOK_SECRETdesde el panel - Lee el cuerpo de la solicitud en bruto antes de cualquier middleware de análisis JSON
- Usa la biblioteca estándar de verificación de webhook para tu plataforma
- Prueba la verificación de la firma del webhook en el entorno de desarrollo
El cambio de plan falla con error 422
El cambio de plan falla con error 422
- ID de suscripción o ID de producto inválidos
- Suscripción no en estado activo
- Parámetros requeridos faltantes
- Producto no disponible para cambios de plan
- Verifica que la suscripción exista y esté activa
- Verifica que el ID de producto sea válido y esté disponible
- Asegúrate de que se proporcionen todos los parámetros requeridos
- Revisa la documentación de la API para los requisitos de parámetros
El cargo inmediato falla durante el cambio de plan
El cargo inmediato falla durante el cambio de plan
- Fondos insuficientes en el método de pago del cliente
- Método de pago expirado o inválido
- El banco rechazó la transacción
- La detección de fraude bloqueó el cargo
- Maneja los eventos de webhook de
payment.failedadecuadamente - Notifica al cliente para que actualice el método de pago
- Implementa lógica de reintento para fallos temporales
- Considera permitir cambios de plan con cargos inmediatos fallidos
Suscripción en espera después del cambio de plan
Suscripción en espera después del cambio de plan
on_holdQué sucede:
Cuando un cargo por cambio de plan falla, la suscripción se coloca automáticamente en estado de on_hold. La suscripción no se renovará automáticamente hasta que se actualice el método de pago.Solución: Actualiza el método de pago para reactivar la suscripciónPara reactivar una suscripción desde el estado de on_hold después de un cambio de plan fallido:- Actualiza el método de pago usando la API de Actualización de Método de Pago
- Creación automática de cargo: La API crea automáticamente un cargo por las deudas restantes
- Generación de factura: Se genera una factura para el cargo
- Procesamiento de pago: El pago se procesa usando el nuevo método de pago
- Reactivación: Tras un pago exitoso, la suscripción se reactiva al estado de
active
subscription.on_hold: Suscripción colocada en espera (recibido cuando falla el cargo por cambio de plan)payment.succeeded: Pago por deudas restantes exitoso (después de actualizar el método de pago)subscription.active: Suscripción reactivada después de un pago exitoso
- Notifica a los clientes de inmediato cuando falle un cargo por cambio de plan
- Proporciona instrucciones claras sobre cómo actualizar su método de pago
- Monitorea eventos de webhook para rastrear el estado de reactivación
- Considera implementar lógica de reintento automática para fallos temporales de pago
Referencia de API para Actualizar Método de Pago
Probando tu Implementación
Sigue estos pasos para probar a fondo tu implementación de cambio de plan de suscripción:Configurar entorno de prueba
- Usa claves de API de prueba y productos de prueba
- Crea suscripciones de prueba con diferentes tipos de plan
- Configura un endpoint de webhook de prueba
- Establece monitoreo y registro
Probar diferentes modos de prorrateo
- Prueba
prorated_immediatelycon varias posiciones de ciclo de facturación - Prueba
difference_immediatelypara mejoras y reducciones - Prueba
full_immediatelypara reiniciar ciclos de facturación - Verifica que los cálculos de crédito sean correctos
Probar manejo de webhook
- Verifica que se reciban todos los eventos de webhook relevantes
- Prueba la verificación de la firma del webhook
- Maneja eventos de webhook duplicados de manera elegante
- Prueba escenarios de fallo en el procesamiento de webhooks
Probar escenarios de error
- Prueba con IDs de suscripción inválidos
- Prueba con métodos de pago expirados
- Prueba fallos de red y tiempos de espera
- Prueba con fondos insuficientes
Manejo de Errores
Maneja errores comunes de la API de manera elegante en tu implementación:Códigos de Estado HTTP
200 OK
200 OK
400 Bad Request
400 Bad Request
401 No autorizado
401 No autorizado
DODO_PAYMENTS_API_KEY sea correcto y tenga los permisos adecuados.404 Not Found
404 Not Found
422 Unprocessable Entity
422 Unprocessable Entity
500 Internal Server Error
500 Internal Server Error
Formato de Respuesta de Error
Próximos pasos
- Revisa la API de Cambio de Plan
- Explora Créditos de Clientes
- Implementa alertas para
subscription.on_hold - Consulta nuestra Guía de Integración de Webhooks