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 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 ou 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.
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 d'une mauvaise saisie du montant
- 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.
- sur Odoo v14, la ligne de paiement est automatiquement validée,
- faire en sorte que l'IP du lecteur CB ne change pas : configuration en IP fixe ou en DHCP static mapping,
- 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,
- 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
- 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.
Une fois la configuration terminée, vous pouvez démarrer la session de caisse. Voilà une mini-vidéo qui montre l'utilisation sur Odoo v14, sur un paiement réel que j'ai réalisé à l'abbaye de Randol le 15 juillet 2023.