Le point sur les incompatibilités entre la dernière version de Prestashop 1.7.6 et certains modules utilisant des scripts PHP sans faire appel à un contrôleur Prestashop dûment déclaré. Si vous écoutez le support Prestashop, il parait que le module Sips 1.0 – Atos Worldline v5.0.1 (05/07/2019) est compatible avec Prestashop v1.7.6.0 (10/07/2019). De mon coté je ne fais pas ce constat : la validation des paiements ne fonctionne pas et voici comment la corriger.

Sommaire

Comportement anormal

Suite à un paiement d’un panier via le module Atos, la commande est créée mais le paiement n’est jamais validé en automatique. Les logs du serveur laissent apparaitre le message suivant.

Cela ressemble énormément au bug rencontré par des utilisateurs Prestashop en Juillet dernier sur cette page.

La page https://www.site.com/modules/atos/validation.php  est en cause, et elle est utilisée par le serveur bancaire pour indiquer à la boutique Prestashop si le paiement est validé ou pas.

La mauvaise pratique fautive

Dans certaines versions du module Atos plus anciennes (la 3.1.3 par exemple) on déclenchait cette validation par l’une des URL suivantes :

  • Avec URL rewriting : https://www.site.com/module/atos/validation  (notez l’absence de s à module)
  • Sans URL rewriting : https://www.site.com/index.php?fc=module&module=atos&controller=validation

Avec ce type d’URL on appelle le contrôleur validation dans le module atos. C’est cette méthode d’appel qui est conseillée et qui devra être adoptée à nouveau par le module Atos. Elle n’aurait jamais du être abandonnée en premier lieu. Visiblement Prestashop a resserré la vis avec sa dernière mise à jour, et la mauvaise pratique de programmation qui passait jusque là n’est plus possible.

Pour déclarer ce contrôleur de validation par nous-mêmes nous alons créer le fichier /modules/atos/controllers/front/validation.php  (comme sur l’ancienne version Atos 3.1.3). Ce fichier contiendra le contenu de /modules/atos/validation.php  avec quelques modifications.

J’ai essayé de tourner avec Atos 3.1.3 sur Prestashop 1.7.6.0 sans succès car cette version du modune n’est pas compatible PS1.7 et si la configuration est possible, le paiement CB n’apparait pas au client. Pas plus de chances avec Atos 3.2.0 qui reprend déjà cette mauvaise pratique fautive.

La solution : créer un contrôleur de module

Il semblerait que le problème soit assez récent, et commun avec un grand nombre de plateformes de paiement. D’ici quelques temps, les éditeurs devraient mettre à jour leurs modules pour permettre le fonctionnement avec les dernières versions de Prestashop.

Visiblement le forumeur c00lsp0t sur prestashop.com a réussi à faire fonctionner son module de paiement clicandpay avec sa banque Crédit du Nord (source). Ses explications sont, dans une certaine mesure, transposables à Atos.

Voici comment j’ai procédé pour faire fonctionner Atos Wordline 1.0 v5.0.1 avec Prestashop 1.7.6.0.

L’idée est de créer un contrôleur dans le module Prestashop. Il y a déjà un contrôleur /modules/atos/controllers/front/orderconfirmation.php  et on va lui rajouter /modules/atos/controllers/front/validation.php .

/var/www/site/modules/atos/controllers/front/validation.php :

Toutes les fonctions dirname(__FILE__)  devront être surveillées pour rajouter ../..  juste après car le contrôleur est 2 dossiers plus profond que le script validation.php original. Sans cela il est bien possible que vous receviez un email du type Error reading pathfile (/var/www:site/modules/atos/controllers/front/pathfile) .

/modules/atos/views/templates/front/validation.tpl :

Un thème Smarty doit être accouplé au contrôleur, même s’il ne sert à rien. Chez moi j’ai créé un fichier d’une seule ligne et deux octets qui contient juste : « ok ». Ce fichier est indispensable en raison de la ligne $this->template = _PS_MODULE_DIR_.'atos/views/templates/front/validation.tpl'; que nous venons d’ajouter au contrôleur /modules/atos/controllers/front/validation.php . Et cette ligne est indispensable au risque de se retrouver avec l’erreur suivante :

/modules/atos/atos.php :

C’est ici que l’on modifie la valeur de l’URL d’auto-validation Atos (aussi appelée IPN) pour passer de https://www.site.com/modules/atos/validation.php à https://www.site.com/index.php?fc=module&module=atos&controller=validation.

On pourrait envisager de s’en passer avec une réécriture d’URL gérée par mod_rewrite avec Apache ou la ligne suivante avec nginx.

Je préfère néanmoins configurer la bonne URL de validation sans jouer avec les redirections d’URL de rustines.

La table ps_currency

Enfin, il n’est pas idiot de vérifier que la table ps_currency est cohérente dans la base de données car une donnée manquante (code iso, iso numérique) ou une précision à 6 peuvent causer des bugs (source).

Conclusion

L’utilisation des modules de paiement CB Atos est malheureusement un passage obligé pour bon nombre d’entre nous. Il est dommage que ces modules critiques ne soient pas supervisés par l’équipe de développement de Prestashop pour garantir un socle de fonctionnalités minimales à chaque mise à jour.

Cela n’est pas ma première déception avec le module Prestashop d’Atos. Il y a 2 ans je vous faisais part de leur incompatibilité avec HTTPS pour la validation des paiements. De la part d’Atos, il ne serait pas idiot de refondre totalement ce module avec un vrai chef de projet de développement web, qui inculque sa ligne de conduite avec du code propre, plutôt que d’empiler les rustines au fil des mises à jour.

En attendant on remet ça à plus tard, car tant que les ventes tombent, nul besoin de chercher plus loin 🙂