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 grave 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.

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 l’information suivante :

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 qui sort on ne sait d’où. Cette redirection 301 doit vous mettre la puce à l’oreille car le code souhaité est un 200.

Conclusion

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 Atos qui n’est pas foutu de sécuriser ses échanges de validation bancaire.

On marche sur la tête.

Voici ce que je vous propose pour limiter le port 80 au strict minimum. Difficile de faire plus strict : ci-dessous pour utiliser le port 80 on exige le protocole HTTP/1.0 (il n’y a plus que Atos pour utiliser cette antiquité remplacée par HTTP/1.1 depuis 1999) en méthode POST avec le chemin /module/atos/validation.

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