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.
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 :
1 2 3 4 5 6 |
$autoResponseUrl = $this->context->link->getModuleLink( 'atos', // module 'validation', // controller array(), // GET params false // use SSL ? ); |
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 :
1 2 3 4 5 6 |
/* Force HTTP over HTTPS, because Atos doesn't support it * for the automatic response * ¯\_(ツ)_/¯ */ global $useSSL; $useSSL = false; |
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.
1 2 3 4 5 6 7 |
<Virtualhost *:80> ServerName boutique.fr ServerAlias www.boutique.fr ErrorLog /var/log/apache2/boutique.fr.redir.error.log CustomLog /var/log/apache2/boutique.fr.redir.access.log combined RedirectPermanent / https://www.boutique.fr/ </Virtualhost> |
Si vous êtes dans ce cas de figure, vous obtiendrez les logs suivantes sur le port 80. Et rien sur le port 443.
1 |
160.92.133.135 - - [21/Jul/2017:14:26:18 +0200] "POST /module/atos/validation HTTP/1.0" 301 527 "-" "-" |
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.
1 |
160.92.133.135 - - [21/Jul/2017:15:00:00 +0200] "POST /module/atos/validation HTTP/1.0" 301 3445 "-" "-" |
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.
1 2 3 4 5 6 |
# Cette configuration doit figurer dans le virtualhost du port 80 uniquement (pas dans le .htaccess) <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{THE_REQUEST} "!^POST /module/atos/validation HTTP/1.0$" RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> |
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) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# curl --http1.0 -X POST http://www.boutique.fr/module/atos/validation DATA parameter is missing # curl --http1.1 -X POST http://www.boutique.fr/module/atos/validation <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://www.boutique.fr/module/atos/validation">here</a>.</p> </body></html> #curl --http1.1 -X GET http://www.boutique.fr/module/atos/validation <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://www.boutique.fr/module/atos/validation">here</a>.</p> </body></html> |
É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.
Bonjour,
j’ai mis en place votre solution et ça a fonctionné, j’ai bien récupéré la commande dans le backoffice.
Cependant la page de confirmation de commande était, elle, en boucle de redirection… Avez-vous une idée pour résoudre ce problème ?
Précision : en fait quand je mets ces lignes, tout le site est en boucle de redirection…
Merci beaucoup
Bonjour,
Les redirections peuvent être initiées par le serveur web (fichier de conf ou .htaccess), ou encore par le script PHP (voire JS).
Les boucles de redirection sont souvent un ping-pong entre les deux parties. Une configuration adaptée devrait permettre que l’URL voulue (votre page de confirmation) réponde sans redirection.
Ici ma configuration rewrite doit figurer dans le virtualhost:80, et elle a pour effet de tout rediriger vers HTTPS sauf les quelques requêtes Atos. Votre site répond-il correctement en HTTPS ?
Il faudrait que je regarde votre site de plus près pour être plus utile. Il y a peut-être quelque chose à faire entre votre société et la mienne ?
Cordialement
Bonjour,
merci beaucoup pour votre réponse.
Notre admin serveur vient de trouver la solution (ça peut servir à quelqu’un d’autre) :
« la réécriture spécifique à Atos doit exister uniquement en http, donc je l’ai ajoutée directement dans le virtualhost concerné (dans un .htaccess elle s’applique en http et en https). »
Du coup j’ai pu supprimer les lignes du htaccess et tout fonctionne correctement.
Merci encore,
Agnès
Je vous remercie de venir enrichir cette page, avec la solution à votre problème.
Pour ma part j’ai clarifié ma rédaction sur ce point.
Au plaisir de vous revoir dans la blogosphère,
Cordialement
Bonjour
Pourriez vous me donner plus de précision sur la correction à apporter?
Bonjour,
savez-vous si le module SIPS 2.0 fonctionne en https ?
Même si la manipulation au niveau du vhost n’est pas très complexe, il me semble plus judicieux de partir sur un module qui gère le https nativement.
Mais j’aimerais en être sûr avant de dépenser 200€…
https://addons.prestashop.com/fr/paiement-carte-wallet/17209-sips-20-atos-worldline-15-16-17.html?utm_source=back-office&utm_medium=push-addons&utm_campaign=back-office-FR&utm_content=download
Merci.
Bonjour,
Je n’ai jamais essayé ce module SIPS 2.0 donc je ne peux pas me prononcer. Comme vous le savez probablement, le fonctionnement de l’auto-validation dépend des protocoles supportés par les serveurs Atos, et non pas du module en lui-même.
Si vous avez la réponse à cette question, cela m’intéresse.
Cordialement
Bonjour,
Votre solution m’intéresse beaucoup, j’ai le même souci avec ATOS v1.3.5, puis-je savoir qu’est-ce qu’il faut ajouter exactement et où.
Merci beaucoup
Cordialement
Bonjour,
Le site doit proposer la page de validation Atos en HTTP, et le reste du site en HTTPS.
Il faut à tout prix éviter de proposer toutes les pages en HTTP+HTTPS sous peine de pénalité SEO.
Dans ce but, j’ai proposé une réécriture conditionnelle.
Mais la configuration fine dépend de votre environnement d’hébergement.
Le plus sûr est de vous retourner vers votre prestataire. Nous proposons également ces services en tant que société de services du numérique.
Cordialement
Bonjour,
J’ai le même problème avec la version 3.2.0 de ATOs et prestashop 1.7, un retour client sur l’historique des commandes, vide, un panier toujours plein et ni le commercant, ni le client est prévenu de la commande.
Tout ça, depuis que j’ai passé le site en https …
Pouvez-vous m’indiquer si votre solution fonctionne encore ? J’ai testé de mettre votre code :
# Cette configuration doit figurer dans le virtualhost du port 80 uniquement (pas dans le .htaccess)
RewriteEngine on
RewriteCond %{THE_REQUEST} « !^POST /module/atos/validation HTTP/1.0$ »
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
dans le fichier .htaccess à la racine, d’abord tout en haut, celà m’a envoyer une erreur en allant sur le site, et si je le met à la fin du htaccess, j’ai toujours le même soucis avec ATOS …
Merci beaucoup
Bonjour, la configuration proposée est valable pour le fichier de configuration apache sur le VirtualHost du port 80, et en aucun cas le .htaccess (cf. commentaire explicite). L’idée générale est que le site doit répondre aux requêtes Atos sur le port 80, et répondre une redirection 301 vers https sur toutes les autres pages. Une méthode minimaliste peut consister à servir le site sur le port 80 et 443, et à faire confiance à Prestashop pour les redirections 301 (plutôt que ma redirection). Faites-vous accompagner par un prestataire comme Deltasight pour cette opération délicate 🙂
Bonjour,
Vous pouvez m’indiquez par email votre tarif pour cette prestation ?
Merci,