Vous avez réussi à installer un module Atos SIPS 1.0 pour encaisser la carte bleue sur votre compte bancaire, mais le paiement de la commande n’est jamais validé dans la boutique ? Vous faites peut-être les frais d’un manque de la part de Atos : ses serveurs bancaires ne sont pas capables de valider les paiements en utilisant HTTPS mais seulement HTTP.

Sur le principe, les informations qui suivent sont valables dès lors que le système Atos est utilisé. Mais ici en pratique, mes exemples utilisent une boutique PrestaShop et le module « Sips 1.0 – Atos Worldline » en version 3.2.0.

Si vous interrogez le support Prestashop sur la question, il est possible qu’il vous redirige vers cette page. Nous pouvons réaliser pour vous une prestation de correction du problème rencontré sur votre serveur, appelez le 01 85 47 02 25.

Sommaire

L’auto-validation Atos

Le principe de l’auto-validation Atos, c’est que le serveur d’encaissement bancaire renvoie une requête POST vers la boutique en lui confirmant que le paiement a bien été accepté. On parle d’un échange HTTP entre le serveur de la banque et le serveur web (indépendamment du client qui a fait sa commande). Cela est l’équivalent de PayPal IPN.

L’adresse d’autovalidation avec le module en version 3.2.0 est  http://www.boutique.fr/module/atos/validation  et dans ce schéma d’URL on reconnaît le contrôleur boutique (module), le choix du module (atos) et le contrôleur module (validation). Le précédent schéma d’URL avec les anciennes versions était  http://www.boutique.fr/modules/atos/validation.php  avec le répertoire (modules/atos) et le fichier validation.php.

Atos ne sait pas valider en HTTPS

Dans le fichier atos.php l’adresse d’auto-validation est définie comme suit :

Ne vous avisez surtout pas de modifier le quatrième paramètre false (use SSL ?) vers true car vous engendreriez alors une boucle de redirections 301 entre https://www.boutique.fr/module/atos/validation  et http://www.boutique.fr/module/atos/validation.

De plus, le fichier /modules/atos/controllers/front/validation.php contient les lignes suivantes :

Vous pourriez éviter la boucle sans fin de redirections 301 en touchant à useSSL, mais cela ne vous avancera pas plus puisque Atos ne supporte pas le HTTPS. C’est le code qui le dit.

Le problème posé

Si vous redirigez le site HTTP vers HTTPS inconditionnellement

Le problème qui se pose, c’est qu’un site HTTPS n’a pas forcément de point d’entrée HTTP, ou bien ce point d’entrée peut n’être qu’une règle de redirection 301 inconditionnelle sans définir de répertoire racine du site.

Par exemple, j’utilise ce système de VirtualHost minimal pour mes redirections. Pas de répertorie racine, pas de moteur d’exécution PHP, rien qu’une redirection 301 inconditionnelle.

Si vous êtes dans ce cas de figure, vous obtiendrez les logs suivantes sur le port 80. Et rien sur le port 443.

Si vous tentez la validation HTTPS

Si vous tentez malgré tout de faire valider l’adresse  https://www.boutique.fr/module/atos/validation  grâce aux modifications précitées dans le code du module, voici la ligne de log que vous obtiendrez avec une mystérieuse redirection 301. Cette redirection 301 doit vous mettre la puce à l’oreille car le code souhaité est un 200.

Une solution proposée

La solution ? Il faut configurer le serveur web pour servir le site à la fois sur le port 80 (HTTP) et 443 (HTTPS). Le port 80 n’est ici utile que pour l’URL d’auto-validation Atos. Sur Apache il faut donc dédier un Virtualhost, implémenter un moteur d’exécution PHP et la bonne connexion à la base de données MySQL. Tout cela rien que pour la validation Atos qui ne supporte pas HTTPS. C’est très étonnant pour un service bancaire où la sécurité et la confidentialité des échanges sont cruciaux.

Voici ce que je vous propose pour limiter l’usage du port 80 au strict minimum, dans le VirtualHost du port 80. Difficile de faire plus strict : ci-dessous on exige le protocole HTTP/1.0 (une antiquité remplacée par HTTP/1.1 depuis 1999) en méthode POST avec le chemin /module/atos/validation, et sinon, on redirige en HTTPS.

Depuis le 17/09/2018 je remarque que Atos emploie parfois HTTP/1.0 et parfois HTTP/1.1. Il faut donc modifier la redirection d’URL ci-dessus pour s’adapter aux deux cas.

Pour tester (la première tentative est fructueuse, le message d’erreur provient du module Atos) :

Épilogue : dialogue avec la banque

Les informations présentes dans cet article sont le fruit de mes tests pour tenter de comprendre le fonctionnement de la validation Atos. Le commentaire du code source du module Prestashop indique expressément que le HTTPS n’est pas géré, information que j’ai prise pour argent comptant (sans jeux de mots).

Mais selon cette page, le protocole de validation (HTTP ou HTTPS) dépendrait de ce qui a été communiqué à la banque. Les sites basculant du HTTP au HTTPS devraient en informer la banque pour une possible prise en charge du HTTPS sur les validations de paiements. Je n’ai personnellement pas testé.

Si vous avez d’autres informations en votre possession pour tenter d’expliquer le fonctionnement des serveurs de validation Atos, vous pouvez commenter cet article.