Point de vente Odoo : liaison caisse <-> lecteur CB

Akretion annonce la disponibilité d'un nouveau module OCA qui implémente la liaison bi-directionnelle sur IP entre l'interface du point de vente d'Odoo et le lecteur CB. Le nom technique de ce nouveau module est l10n_fr_pos_caisse_ap_ip et il est disponible sur le projet Github l10n-france de l'OCA pour Odoo version 14 et version 16. Ce module implémente la version 3 du protocole caisse (anciennement appelé protocole Concert) de l'Association du paiement. En France, la liaison entre la caisse et le lecteur CB est standardisé par l'Association du paiement. Le protocole a d'abord été disponible sur port série et USB ; depuis la version 3 du protocole, il est également disponible sur IP. Il est implémenté par Ingenico, Verifone et d'autres constructeurs de terminaux de paiement pour les terminaux vendus en France.

Quand il est utilisé sur IP, le protocole fonctionne par un échange bi-directionnel de chaînes de caractères sur une liaison TCP directe entre la caisse et le lecteur CB. L'échange de caractères se fait directement sur TCP, sans aucun autre protocole au dessus de TCP.

Avantage : simplicité.

Inconvénient : le code Javascript d'un navigateur Web ne peut pas ouvrir une socket TCP "brute" (sauf à utiliser des APIs spécifique à un navigateur Web particulier). Il n'est donc pas possible d'implémenter ce protocole directement dans le code Javascript du point de vente d'Odoo. Dans l'implémentation actuelle, le code Javascript d'Odoo appelle une méthode du serveur Odoo et c'est le serveur Odoo qui ouvre la socket TCP vers le lecteur CB. Si le serveur Odoo est hébergé sur Internet, cela implique la mise en place d'une redirection de port TCP vers le lecteur CB. Il est conseillé de restreindre cette redirection de port par IP source, en la limitant à l'IP du serveur Odoo.

Avec l'implémentation qui a été réalisée, la liaison est bi-directionnelle :

  • Odoo envoie le montant au lecteur CB, ce qui évite de taper manuellement le montant sur le lecteur CB et donc évite le risque de saisir un montant erroné !
  • Odoo attend la réponse du lecteur CB :
    • si le paiement ne passe pas, un message d'erreur est envoyé au caissier avec la raison de l'échec.
    • si le paiement passe, la transaction est automatiquement validée dans Odoo :
      • sur Odoo v14, la ligne de paiement est automatiquement validée,
      • sur Odoo v16, non seulement la ligne de paiement est automatiquement validée, et, dans le cas d'un paiement total, la vente est automatiquement validée également.

Avant de mettre en place la liaison caisse entre Odoo et le lecteur CB, il faut au préalable :
  1. faire en sorte que l'IP du lecteur CB ne change pas : configuration en IP fixe ou en DHCP static mapping,
  2. dans le cas où Odoo est hébergé sur Internet, mettre en place une redirection de port TCP vers le lecteur CB (port 8888 sur TPE Ingenico) filtrée sur l'IP du serveur Odoo,
  3. sur le lecteur CB, activer la liaison caisse sur IP. Exemple avec un lecteur Ingenico Desk/5000 :
    • touche Param en bas à gauche
    • 1. Panneau de contrôle
    • 1. Connexion Caisse
    • Sélectionner Active
    • Sélectionner IP/Eth

Dans Odoo, une fois le module l10n_fr_pos_caisse_ap_ip installé, il faut aller dans le menu Point de vente > Configuration > Modes de paiement. Sur le mode de paiement CB, dans le champ "Utiliser un terminal de paiement", sélectionnez "Caisse AP sur IP (France uniquement)" et renseignez l'IP et le port sur lesquels le serveur Odoo pourra joindre le lecteur CB. Le champ "Mode de paiement" a 2 valeurs possibles :
  • Carte (valeur par défaut), pour un paiement par CB,
  • Chèque, dans le cas où on utilise une imprimante de chèque connectée au lecteur CB, telle que l'imprimante Ingenico i2200.

undefined

Une fois la configuration terminée, vous pouvez démarrer la session de caisse. La mini-vidéo ci-dessous montre l'utilisation de la liaison caisse <-> lecteur CB sur Odoo v14, sur un paiement réel que j'ai réalisé à l'abbaye de Randol le 15 juillet 2023.


Pour pouvoir tester ce module Odoo ou développer sur ce module, il faut disposer d'un vrai lecteur CB et réaliser de vraies transactions... ce complique sérieusement les choses ! Pour que cela ne soit pas un obstacle, Rémi de Lattre a développé un simulateur de lecteur CB en python qui émule le protocole caisse AP sur IP. Il est disponible sous licence GPL sur le projet Github caisse-ap-ip. Le module Odoo l10n_fr_pos_caisse_ap_ip a été développé en utilisant ce simulateur, et il a marché du premier coup lors de sa mise en production avec un lecteur CB Ingenico... preuve que le simulateur est fidèle à la réalité !

Le développement de ce module Odoo a été co-financé par Akretion France et Camptocamp.

Lumière sur l'auteur

Fondateur
Alexis de Lattre
Fondateur - France
Spécialiste Odoo et logiciel libre
Alexis de Lattre is a co-founder of the French company Anevia, where he held the positions of Managing Director and Financial Director of Production and Logistics and Director of Computer Services. Anevia is a company with 40 employees and specializes in the development and sale of video server...
Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considérerons que vous acceptez l'utilisation des cookies.