Pagos multi-método

Ofrece varios métodos de pago en una sola sesión y deja que el cliente elija.

Los pagos multi-método te permiten ofrecer al cliente opciones alternativas cuando su método preferido falla. Por ejemplo, si rechazan la tarjeta de un cliente, puedes ofrecerle automáticamente una transferencia SPEI o un voucher OXXO como respaldo.

Cómo funciona el flujo de fallback

La lógica de fallback crea una lista priorizada de métodos de pago e intenta cada uno hasta que una transacción tenga éxito. Así, si el método preferido falla (fondos insuficientes, tarjeta rechazada o un problema técnico), tu sistema prueba automáticamente alternativas sin que el cliente tenga que elegir otra opción manualmente.

El flujo sigue estos pasos:

Empieza con el método preferido del cliente y llama a la API de Tonder.

Si es authorized o pending, completa la transacción.

Si el pago falla o es rechazado, comprueba si hay métodos alternativos disponibles.

Si existen más métodos, intenta automáticamente el siguiente en tu lista de prioridad.

Si todos los métodos se agotan, muestra un mensaje de error; de lo contrario, procesa el pago exitoso.

La experiencia del usuario primero. Informa siempre a los usuarios sobre los intentos de fallback. Pide permiso antes de cambiar a métodos alternativos en lugar de redirigir automáticamente a métodos que no eligieron.

Paso 1: define tu estrategia de fallback

Planea el orden de prioridad de tus métodos. Una secuencia típica:

  1. Tarjeta: el método más común e inmediato.
  2. SPEI: una alternativa confiable, en especial para montos grandes.
  3. OXXO: respaldo final para usuarios sin cuenta bancaria o tarjeta.

Tu lógica del lado del servidor controla este flujo. La API de Tonder procesa cada petición como una transacción independiente.

Paso 2: implementa el loop de fallback

Crea una función que intente cada método secuencialmente hasta que uno tenga éxito:

import uuid

def process_payment_with_fallback(customer_data, amount, preferred_method="CARD"):
    """Intenta procesar un pago con un método preferido, con fallbacks."""

    payment_methods_priority = [
        preferred_method,
        "CARD",      # Respaldo a tarjeta si no era el preferido
        "SPEI",      # Luego, transferencia bancaria
        "oxxopay"    # Respaldo final en efectivo
    ]

    # Evita intentos duplicados (p. ej. si preferred_method ya es 'CARD')
    unique_methods = list(dict.fromkeys(payment_methods_priority))

    for method in unique_methods:
        print(f"Intentando pago con el método: {method}")
        try:
            payment_data = {
                "operation_type": "payment",
                "amount": amount,
                "currency": "MXN",
                "customer": customer_data,
                "payment_method": {"type": method},
                "client_reference": f"order-{uuid.uuid4()}"
            }

            result = tonder_api.process_payment(payment_data)

            # Una iniciación exitosa tiene estado 'authorized' o 'pending'.
            if result.get("status") in ["authorized", "pending"]:
                print(f"Pago iniciado con {method}. Transaction ID: {result['id']}")
                return result
            else:
                print(f"El pago con {method} falló con estado: {result.get('status')}")

        except Exception as e:
            print(f"La llamada para el método {method} falló: {e}")
            continue

    raise Exception("Todos los métodos de pago fallaron para esta transacción.")

Siguientes pasos

¿Te resultó útil esta página?

En esta página