Guardar y reutilizar métodos de pago
Guardar y reutilizar métodos de pago
Usa este flujo cuando necesitas guardar la tarjeta de un cliente y cobrarla después sin que vuelva a ingresar sus datos. Es útil para cobros mensuales de monto variable, cargos por consumo, cargos adicionales a una suscripción o renovaciones administradas por tu sistema.
El cliente siempre ingresa la tarjeta en un checkout alojado por Recurrente. Tu sistema guarda únicamente el payment_method_id retornado por Recurrente y lo usa para crear cobros futuros.
Antes de guardar una tarjeta, asegúrate de que el cliente acepte términos claros sobre cómo se harán los cobros futuros: frecuencia, cómo se calcula el monto, cuándo se cobra y cómo puede cancelar o actualizar su método de pago.
Flujo general
- Crea o identifica el cliente en Recurrente.
- Crea un checkout con
mode: "setup"para tokenizar la tarjeta sin cobrarla. - Envía el
checkout_urlal cliente. - Cuando el cliente completa el checkout, guarda el
payment_method.id. - Usa
POST /api/one_time_paymentspara cobrar ese método guardado cuando tengas el monto final.
Paso 1: Crear o identificar el cliente
Si ya tienes un cliente en Recurrente, usa su customer_id al crear el checkout de tokenización. Si solo tienes el user_id, también puedes enviarlo.
La respuesta incluye el id del cliente:
Paso 2: Crear un checkout de tokenización
Crea un checkout con mode: "setup". Este checkout no cobra nada; solo guarda la tarjeta para usos futuros.
Recurrente responde con una URL alojada:
Redirige al cliente a checkout_url o envíasela por email, WhatsApp o dentro de tu app.
Paso 3: Guardar el payment_method_id
Cuando el cliente completa el checkout, Recurrente emite setup_intent.succeeded. El método guardado viene dentro de data.checkout.payment_method.
Guarda data.checkout.payment_method.id. Ese es el token que usarás para cobros futuros.
Si no recibes webhooks, consulta el checkout después de que el cliente vuelva a tu success_url: GET /api/checkouts/{id}. Cuando el checkout está completado, la respuesta incluye payment_method.id.
Paso 4: Cobrar después con un monto variable
Cuando tu sistema sabe el monto a cobrar, crea un pago único con el payment_method_id guardado. Usa una llave de idempotencia única por intento de cobro para evitar duplicados si necesitas reintentar la solicitud.
Respuesta exitosa:
Si el banco rechaza el cobro, Recurrente responde con error y no debes reusar la misma Idempotency-Key para un nuevo intento de cobro. Crea un intento nuevo con una llave distinta cuando el cliente confirme que desea reintentar o actualice su método de pago.
Cobros variables asociados a una suscripción
Si el cliente ya tiene una suscripción y quieres agregar cargos variables, tienes dos opciones.
Para cobrar inmediatamente el método guardado de la suscripción:
Para agregar el cargo al próximo ciclo de la suscripción:
mode: "next_cycle" crea un invoice_item pendiente. También admite montos negativos para créditos.
Actualizar la tarjeta guardada
Cuando el cliente necesite cambiar tarjeta, crea otro checkout mode: "setup". Al completarlo, guarda el nuevo payment_method.id.
Si el método pertenece a una suscripción, actualízala con:
Si solo usas cobros variables con POST /api/one_time_payments, guarda el nuevo payment_method_id en tu sistema y úsalo para los siguientes cobros.
Consideraciones
POST /api/one_time_paymentsrequiere que tu cuenta tenga cobros únicos habilitados.- El
payment_method_iddebe pertenecer a un cliente de tu cuenta. - Los cobros futuros pueden fallar aunque la tokenización haya sido exitosa. Maneja errores de banco y permite que el cliente actualice su tarjeta.
- Los webhooks reales solo se envían para eventos de producción. Para validar el flujo completo de tokenización, usa una llave LIVE; el checkout de
setupno cobra un monto. - Nunca recolectes ni almacenes números de tarjeta directamente. Usa siempre el checkout alojado de Recurrente.

