Skip to content

Plugin de Odoo

El proveedor de pagos Genius Checkout para Odoo añade Genius Checkout como opción nativa en el módulo de Pagos de Odoo. Soporta checkout hospedado de tarjeta, reembolsos parciales y totales desde las pantallas de contabilidad, tarjetas guardadas vía tokenización, y Odoo Subscriptions a través de transacciones merchant-initiated.

Requisitos

  • Odoo 17.0, 18.0 o 19.0 (Community o Enterprise). Un backport a 16.0 es directo — ver "Odoo 16 backport".
  • Una cuenta Genius Checkout con la integración Odoo activa en Merchant → Connected Apps.

Instalación

Paso 1 — conecta primero en GC

Haz esto antes de instalar el módulo Odoo para tener tu webhook secret a la mano:

  1. Inicia sesión en https://app.geniuscheckout.com.
  2. Connected Apps → Connect Odoo.
  3. Pega tu URL de Odoo + tu Odoo personal API key.
  4. GC mostrará un webhook secret de una sola vez — cópialo ahora.

Paso 2 — instala el módulo en Odoo

  1. Copia la carpeta del módulo en el path addons de Odoo como payment_geniuscheckout (o usa el import de branch GitHub de odoo.sh).
  2. Reinicia Odoo y actualiza la lista de apps.
  3. Apps → busca "Genius Checkout" → Instalar.

Paso 3 — configura el proveedor

Accounting → Configuration → Payment Providers → Genius Checkout:

AjusteValor
API KeyTu gc_test_… o gc_live_… (el prefijo controla qué entorno se usa)
Webhook SecretEl valor que copiaste del panel GC en el paso 1
StateTest Mode (validando) o Enabled (live)

Flujo de checkout

  1. El cliente llega al checkout de Odoo, elige Tarjeta (el método GC).
  2. El proveedor crea una sesión vía POST /api/v1/checkout-sessions y redirige al checkout hospedado de GC.
  3. El cliente completa el pago (3DS por GC).
  4. Asincrónicamente, GC empuja el evento a /payment/geniuscheckout/webhook. El receiver verifica HMAC-SHA256 sobre {timestamp}.{body} y transiciona la payment transaction.
  5. El return browser-side en /payment/geniuscheckout/return re-consulta la sesión GC por id y confía solo en el estado de la API (rechaza tampering de URL de retorno).

Funcionalidades soportadas

CapacidadEstado
Reembolsos (total + parcial)Sí — Odoo 17 verificado live
TokenizaciónSí — los clientes pueden guardar tarjeta al pagar
Tarjetas guardadasSí — reuso one-click en pedidos subsiguientes
SuscripcionesSí — funciona con Odoo Subscriptions; facturación recurrente vía /api/v1/payments con semántica MIT
Auth HMAC en webhooksSí — {timestamp}.{body}, hex, secret por instancia
i18nSí — strings traducidos; help text alineado con archivos PO

Suscripciones

Si sale_subscription está instalado, GC aparece automáticamente como proveedor para productos suscripción. La primera venta captura la tarjeta y la tokeniza; las facturas subsiguientes se cobran silenciosamente vía _send_payment_request — sin redirección.

Reembolsos

Desde una orden o factura confirmada:

  1. Abre la Payment Transaction relacionada.
  2. Haz clic en Refund (acción estándar de Odoo — surge automáticamente cuando support_refund='partial' está en el proveedor).
  3. Ingresa un monto (≤ original) o deja vacío para reembolso total.
  4. Odoo crea una refund transaction; el módulo envía a POST /api/v1/payments/{id}/refund y refleja el estado.

Endpoints

RutaDirecciónPropósito
/payment/geniuscheckout/returnentrante (navegador)Cliente vuelve del checkout GC
/payment/geniuscheckout/webhookentrante (S2S)Eventos transaccionales server-to-server

Seguridad de webhooks

  • HMAC-SHA256 sobre {timestamp}.{body} (hex) en X-GC-Signature.
  • Ventana de repetición de 5 minutos sobre X-GC-Timestamp.
  • El receptor rechaza proveedores cuyo secret configurado esté vacío o tenga menos de 16 caracteres.

Backport a Odoo 16

Reemplaza la extensión de selección support_refund con support_refund_partial y ajusta la firma de _get_specific_rendering_values (Odoo 16 usó una forma distinta de processing-values). Todo lo demás porta limpio.

Solución de problemas

  • Orden queda en draft tras el pago — confirma que la URL del webhook coincida con tu hostname público; revisa el log de Odoo por fallas de verificación HMAC.
  • La URL /return no avanza la orden — es intencional: el return browser-side re-consulta la sesión GC y confía solo en el estado de la API, así que una URL alterada queda en draft. Espera al webhook (normalmente segundos).
  • Icono genérico del proveedor — limpia la caché estática de Odoo; el icono está en static/description/icon.png y se cablea en data/payment_provider_data.xml.

Soporte

Released under the proprietary Genius Checkout license.