Qué puede hacer un proveedor personalizado
- Aparecer en el Marketplace de aplicaciones y en Pagos → Integraciones.
- Cobrar pagos únicos y recurrentes.
- Hacer cobros fuera de sesión con métodos de pago guardados.
- Gestionar suscripciones manuales y calendarios de suscripción.
- Mantener Chateea al día mediante webhooks.
Conceptos clave
Requisitos
- Acceso al panel de desarrolladores del Marketplace de aplicaciones.
- Un servicio backend (Node.js, Python, Ruby, PHP, Java u otro) alojado en la nube.
- Un dominio público para la URL de redirección de OAuth, la página personalizada, el
queryUrl, los webhooks y elpaymentsUrl. - Conocimientos de OAuth 2.0, APIs HTTP con JSON y manejo de webhooks.
Flujo general
- Crea una app del Marketplace en la categoría de proveedor de pagos personalizado.
- Crea un backend que gestione OAuth, webhooks y las solicitudes al
queryUrl. - Publica las páginas de configuración (página personalizada) y de cobro (
paymentsUrl). - Configura los modos de prueba y en vivo, y prueba todo el flujo de punta a punta.
Paso 1: crea la app en el Marketplace
Configuración (Settings)
Permisos necesarios (scopes):Proveedor de pagos (Payment Provider)
Perfil y páginas personalizadas
- En Profile, elige la categoría Third Party Provider para que la app aparezca en el Marketplace y en Pagos → Integraciones.
- En Custom Pages, indica la URL de tu página de configuración. Se abre después de instalar la app y al hacer clic en Gestionar integración. Úsala para conectar y desconectar la pasarela, pedir las credenciales de prueba y en vivo, y llamar a la API de integración.
Paso 2: instalación y registro del proveedor
Cuando alguien instala tu app:- Chateea abre tu URL de redirección con el código de OAuth.
- Tu backend cambia el código por un token de acceso.
- Se carga tu página personalizada.
- Tu backend llama a la API Create Public Provider Config para registrar el proveedor y que aparezca como opción de pago.
locationId es el identificador de la cuenta de Chateea donde se instaló la app.
Paso 3: credenciales de prueba y en vivo
Con la API Connect Config envías, para cada modo, dos claves:apiKey: clave secreta que Chateea incluye en sus llamadas a tuqueryUrl.publishableKey: clave pública que usa tu iframe para iniciar el pago.
Paso 4: el iframe de pago
Todos los cobros ocurren dentro de un iframe que carga tupaymentsUrl, y la comunicación se hace con eventos.
1. Tu iframe avisa que está listo:
payment_initiate_props), entre ellos:
queryUrl:
Paso 5: métodos guardados y suscripciones manuales
Guardar un método de pago
Agrega"addCardOnFileSupported": true al evento custom_provider_ready solo si tu pasarela guarda métodos de pago y ya implementaste guardar, listar y cobrar. Chateea enviará un evento setup_initiate_props (con mode: "setup", sin cobro) y tu iframe responderá con custom_element_success_response o custom_element_error_response. El método guardado debe aparecer después al listar los métodos de ese contacto.
Listar métodos: list_payment_methods
Chateea envía locationId, contactId, apiKey y type. Responde con una lista:
apiKey y el cliente de tu pasarela.
Cobrar un método guardado: charge_payment
Se usa en cobros fuera de sesión o facturas. Chateea envía paymentMethodId, contactId, transactionId, chargeDescription, amount, currency y apiKey. Tu respuesta incluye success, failed, chargeId, message y un objeto con el estado del cobro, con esta forma:
status puede ser succeeded, failed, pending o processing, y chargedAt es una marca de tiempo Unix en segundos. El nombre exacto de cada objeto de estado está en la documentación de la API de Chateea.
Suscripciones manuales
Si tu pasarela admite métodos guardados, puede aceptar suscripciones creadas desde Chateea sin pasar por un pago (por ejemplo, “empieza el día X y cobra cada mes”). Primero declara la capacidad con la API Update Capabilities. Después:create_subscription: Chateea envíaapiKey,locationId,contactId,paymentMethodId,subscriptionId,transactionId,startDate(AAAA-MM-DD),currency,amount,recurringAmountyproductDetails(con intervalo, período de prueba y número total de ciclos). Responde consuccess,failed,message, un objetotransactionopcional (si hubo cobro inicial) y un objetosubscriptionobligatorio con el ID de la suscripción y su estado de la suscripción. Si la suscripción empieza en el futuro sin cobro inicial, puedes omitirtransaction.cancel_subscription: Chateea envíasubscriptionIdyapiKey. Responde{ "status": "canceled" }.
scheduled, trialing, active, expired, canceled, unpaid, incomplete.
Paso 6: reembolsos
Chateea llama a tuqueryUrl con type: "refund", amount, transactionId, chargeId y apiKey. Los reembolsos pueden ser parciales y una transacción puede tener varios, siempre que el total no supere el monto original. Responde:
Paso 7: webhooks hacia Chateea
Tu sistema envía webhooks (POST con JSON) al endpoint de pagos personalizados de Chateea para informar cambios. Soporte te indica la URL exacta.locationId y el apiKey. Consulta los nombres exactos de los campos obligatorios por evento en la documentación de la API de Chateea.
Forma del estado de la suscripción y del estado del cobro:
amount suele ir en la unidad mínima de la moneda (monto × 100).
Lista de verificación antes de salir en vivo
- App creada con los permisos correctos y con Settings, Payment Provider, Profile y Custom Pages configurados.
- La URL de redirección recibe el código y el backend obtiene el token; los webhooks de instalación y desinstalación funcionan.
- Create Public Provider Config se llama al instalar, con
queryUrlypaymentsUrlcorrectos. - Connect Config se llama para prueba y en vivo, y el proveedor está marcado como predeterminado.
- El iframe emite
custom_provider_ready, procesapayment_initiate_propsy responde éxito, error o cierre;verifyresponde bien en los tres casos. - Métodos guardados:
addCardOnFileSupported,setup_initiate_props,list_payment_methodsycharge_payment. - Suscripciones manuales: capacidad declarada y
create_subscriptioncon los estados de cobro y suscripción correctos. - Reembolsos con
type: "refund". - Webhooks enviados con los eventos y datos correctos.
- Flujos completos probados en modo prueba y los críticos repetidos en vivo.
Preguntas frecuentes
¿Qué lenguaje o framework puedo usar?
¿Qué lenguaje o framework puedo usar?
¿Puedo probar antes de salir en vivo?
¿Puedo probar antes de salir en vivo?
¿Cómo registro errores?
¿Cómo registro errores?
queryUrl, de los webhooks que envías y de las respuestas de la API. Te ahorrará mucho tiempo al depurar en producción.¿Puedo integrar varias pasarelas en una sola app?
¿Puedo integrar varias pasarelas en una sola app?
La suscripción sigue en Incompleta aunque envié subscription.active
La suscripción sigue en Incompleta aunque envié subscription.active
verify, no el webhook. Incluye en esa respuesta success, un estado del cobro válido, subscriptionStatus y el estado de la suscripción. Si faltan o están mal, la suscripción puede quedarse en Incompleta.¿Envío los webhooks antes o después de verify?
¿Envío los webhooks antes o después de verify?
verify, tú respondes con los estados del cobro y de la suscripción y, en paralelo, tu sistema puede enviar el webhook que corresponda. verify es la fuente de verdad del estado inicial; los webhooks mantienen todo sincronizado después y sirven de respaldo.¿Cómo manejo una suscripción que empieza en prueba sin cobro?
¿Cómo manejo una suscripción que empieza en prueba sin cobro?
trialing con una fecha nextCharge futura. Aun sin cobro, envía el evento de éxito desde el iframe para que Chateea llame a verify, y responde con success: true, subscriptionStatus: "trialing" y el estado de la suscripción (con trialEnd y nextCharge). El webhook subscription.trialing es opcional.¿Quién ejecuta los cobros recurrentes?
¿Quién ejecuta los cobros recurrentes?
subscription.charged después de cada cobro correcto.¿Qué diferencia hay entre una suscripción desde el pago y una creada manualmente?
¿Qué diferencia hay entre una suscripción desde el pago y una creada manualmente?
mode: "subscription", Chateea crea una suscripción Incompleta y una transacción Pendiente, carga tu iframe y luego llama a verify. En el flujo manual, alguien de tu equipo crea la suscripción en Chateea, se llama a create_subscription y tu respuesta fija el estado directamente, sin iframe ni verify. Después tú ejecutas el calendario y envías subscription.charged.El transactionId de verify no coincide con lo que veo en mi sistema
El transactionId de verify no coincide con lo que veo en mi sistema
transactionId, chargeId, subscriptionId y el contexto de contacto y cuenta), prioriza chargeId al consultar tu pasarela y, si no logras conciliarlo, registra el payload completo y devuelve estados coherentes con el pago que realmente se cobró.Las tarjetas guardadas aparecen al crear suscripciones pero no en la ficha del contacto
Las tarjetas guardadas aparecen al crear suscripciones pero no en la ficha del contacto

