Plugin Odoo
Le fournisseur de paiement Genius Checkout pour Odoo ajoute Genius Checkout comme option native dans le module Payment d'Odoo. Il prend en charge le checkout hébergé carte, les remboursements partiels et totaux depuis les écrans comptables, les cartes enregistrées via tokenisation, et Odoo Subscriptions via des transactions merchant-initiated.
Prérequis
- Odoo 17.0, 18.0 ou 19.0 (Community ou Enterprise). Un backport 16.0 est direct — voir "Backport Odoo 16".
- Un compte Genius Checkout avec l'intégration Odoo activée sous Merchant → Connected Apps.
Installation
Étape 1 — connectez côté GC d'abord
Faites ceci avant d'installer le module Odoo pour avoir votre webhook secret sous la main :
- Connectez-vous à
https://app.geniuscheckout.com. - Connected Apps → Connect Odoo.
- Collez votre URL Odoo + votre Odoo personal API key.
- GC affiche un webhook secret unique — copiez-le maintenant.
Étape 2 — installez le module dans Odoo
- Copiez le dossier du module dans votre path
addonsOdoo souspayment_geniuscheckout(ou utilisez l'import branche GitHub d'odoo.sh). - Redémarrez Odoo et mettez à jour la liste des apps.
- Apps → cherchez "Genius Checkout" → Installer.
Étape 3 — configurez le provider
Accounting → Configuration → Payment Providers → Genius Checkout :
| Réglage | Valeur |
|---|---|
| API Key | Votre gc_test_… ou gc_live_… (le préfixe contrôle l'environnement) |
| Webhook Secret | La valeur copiée du tableau de bord GC à l'étape 1 |
| State | Test Mode (validation) ou Enabled (live) |
Flux de checkout
- Le client arrive au checkout Odoo, choisit Carte bancaire (la méthode GC).
- Le provider crée une session via
POST /api/v1/checkout-sessionset redirige le client vers le checkout hébergé GC. - Le client complète le paiement (3DS par GC).
- De manière asynchrone, GC envoie l'événement à
/payment/geniuscheckout/webhook. Le récepteur vérifie HMAC-SHA256 sur{timestamp}.{body}et fait transitionner la payment transaction Odoo. - Le retour côté navigateur à
/payment/geniuscheckout/returnre-fetch la session GC par ID et ne fait confiance qu'au statut de l'API (le tampering d'URL de retour est rejeté).
Fonctionnalités supportées
| Capacité | Statut |
|---|---|
| Remboursements (total + partiel) | Oui — Odoo 17 vérifié live |
| Tokenisation | Oui — les clients peuvent enregistrer une carte au checkout |
| Cartes enregistrées | Oui — réutilisation one-click sur les commandes suivantes |
| Abonnements | Oui — fonctionne avec Odoo Subscriptions ; les factures récurrentes se débitent via /api/v1/payments en sémantique MIT |
| Auth HMAC webhook | Oui — {timestamp}.{body}, hex, secret par instance |
| i18n | Oui — chaînes traduites ; help text aligné avec les fichiers PO |
Abonnements
Si sale_subscription est installé, GC apparaît automatiquement comme provider pour les produits abonnement. La première vente capture la carte et la tokenise ; les factures suivantes sont débitées silencieusement via _send_payment_request — pas de redirection client.
Remboursements
Depuis une commande ou facture confirmée :
- Ouvrez la Payment Transaction liée.
- Cliquez Refund (action standard Odoo — affichée automatiquement quand
support_refund='partial'est détecté sur le provider). - Saisissez un montant (≤ original) ou laissez vide pour un remboursement total.
- Odoo crée une refund transaction ; le module l'envoie à
POST /api/v1/payments/{id}/refundet reflète l'état de la réponse.
Endpoints
| Route | Direction | Rôle |
|---|---|---|
/payment/geniuscheckout/return | entrant (navigateur) | Le client revient du checkout GC |
/payment/geniuscheckout/webhook | entrant (S2S) | Événements transactionnels server-to-server |
Sécurité webhook
- HMAC-SHA256 sur
{timestamp}.{body}(hex) dansX-GC-Signature. - Fenêtre de rejeu de 5 minutes sur
X-GC-Timestamp. - Le récepteur rejette les providers dont le secret configuré est vide ou fait moins de 16 caractères.
Backport Odoo 16
Remplacez l'extension de selection support_refund par support_refund_partial et ajustez la signature _get_specific_rendering_values (Odoo 16 utilisait une forme différente de processing-values). Tout le reste se porte proprement.
Dépannage
- Commande reste en
draftaprès paiement — confirmez que l'URL webhook dans le tableau de bord GC correspond à votre hostname public Odoo ; vérifiez le log Odoo pour les échecs HMAC. - L'URL
/returnne fait pas avancer la commande — c'est intentionnel : le retour côté navigateur re-fetch désormais la session GC et ne fait confiance qu'au statut de l'API, donc une URL trafiquée reste en draft. Attendez le webhook (généralement quelques secondes). - Icône provider générique — videz le cache statique d'Odoo ; l'icône est dans
static/description/icon.pnget câblée dansdata/payment_provider_data.xml.
Support
- Issues du module : github.com/geniuscheckout/odoo-module/issues
- Support GC : [email protected]
