Bug Prestashop Google analytics commandes en double

Un debug qui vaut bien un article.

Prestashop 1.5.2
module gAnalytics 2.1.1
Commandes en doublon

Depuis plusieurs semaines sur le compte Analytics d’un client je voyais une commande en particulier qui était renvoyée régulièrement, plusieurs fois par jour, mais pas tout le temps.

1er debuggage corrigé par le nouvelle version du certes perfectible mais déjà excellent module gAnalytics pour Prestashop : les commandes pouvaient être envoyées plusieurs fois si le client se reconnectait sur la page de confirmation de commande. C’est bête hein, mais il faut faire une bonne petite routine pour éviter ça.

Avant cette correction c’était ainsi beaucoup de commandes qui étaient envoyées en plusieurs exemplaires (vive le taux de transformation).
Mais même après je voyais CETTE commande en particulier qui continuait à fausser énormément mes stats si bien que je devais segmenter mes rapports (avec id_transaction=…), mais je constatais alors que ça retirait aussi d’autres transactions.
A savoir que la segmentation d’un rapport porte sur les sessions répondant aux critères.
Une même session renvoyant une ancienne commande mais aussi des commandes du jour ? Comportement très étrange, je ne comprenais pas.

En isolant bien ce segment sur une seule journée pour plus de visibilité, j’ai pu afficher les pages vues dans le détail de cette session.
Et là j’ai constaté qu’il s’agissait d’une session admin. (L’admin envoie des stats analytics ?! Me dis-je d’un coup, interloquée que j’étais)
J’ai affiché une des pages vues incriminée et ouvert le code source… Et là stupeur je vois de mes yeux vus qu’effectivement la dite transaction est envoyée, le code analytics est là et… je viens donc de renvoyer la transaction à Analytics, super.

Et je décide donc d’aller debugger le module, screugneugneu.
J’avais bien sûr parcouru depuis plusieurs semaines le web à la recherche d’autres gentils développeurs qui auraient trouvé des solutions mais je n’ai rien trouvé à part des « oui moi aussi j’ai le même problème et je ne trouve pas de solution »

Mais là j’en avais juste marre.
Donc, pour résumer :
– Il y a une table [ps_]ganalytics qui enregistre -tout bêtement- les transactions à envoyer ou envoyées à GA.
– Il y a une colonne ‘sent’ qui passe de 0 à 1 lorsque la transaction est envoyée (au cas où elle n’aurait pas été envoyée par l’internaute lui même s’il n’a pas afficher la page de confirmation de commande, problème très courant) et avec un timestamp
– Dans le hook du header de l’admin s’exécute ceci :
1. select les transactions dans [ps_]ganalytics qui sont à sent=0 enregistrées il y a plus de 30 mn (le DATE_ADD(date_add, INTERVAL 30 minute) < NOW() )
2. envoie ces commandes à GA (addtrans)
3. update [ps_]ganalytics : met date_add = NOW() (et sent=1 sans doute quelque part à un moment donné…) pour ces id_transaction et avec LIMIT 1

La cause de nos soucis CAR :
– ma screugneugneu commande était en DOUBLON dans cette table [ps_]ganalytics
– une ligne avec sent à 0, une ligne avec sent à 1
– DONC il prenait la commande, il la renvoyait à GA, et… il updatait une ligne car la requête porte sur l’id_transaction et non l’id_google_analytics qui est la clé primaire ET qu’il y a ce LIMIT 1 donc au hasard il prenait la ligne qui était déjà à sent=1
– donc il y avait toujours la ligne avec sent=0
– donc il recommençait à l’envoyer encore et encore…

Résolution du problème : supprimer la ligne avec sent=0 dans la table [ps_]ganalytics, c’est tout.
Et pourquoi pas modifier les requêtes de ganalytics.php > hookBackOfficeHeader() et de controllers\admin\AdminGanalyticsAjax.php en retirant les LIMIT 1 si le coeur vous en dit.

CONCLUSION :
Si vous avez des commandes qui ne cessent de s’envoyer, que vous avez bien la dernière version du module ganalytics (2.1.1 ou supérieur) : vérifiez que vous n’avez pas des commandes en doublons dans la table [ps_]ganalytics. Voici une requête pour cela :
SELECT count(*), id_order from ps_ganalytics group by id_order having count(*)>1
Si c’est le cas et qu’il s’agit comme par miracle des commandes qui vous embêtent sur GA, bha supprimez les lignes des doublons qui ont sent à 0.

Et pourquoi pas si le coeur vous en dit supprimer les LIMIT 1 des requêtes UPDATE dans
– \modules\ganalytics\ganalytics.php > hookBackOfficeHeader()
– \modules\ganalytics\controllers\admin\AdminGanalyticsAjax.php

ps : Si vous avez un problème inverse, c’est-à-dire des commandes qui ne sont pas envoyées à Google Analytics, quelque soit votre site, CMS ou outil de développement, pratiquement tous les services de paiement en ligne incluent maintenant une option pour renvoyer directement l’internaute sur le site après avoir payé.
Ce qui a pour conséquence qu’il affiche la page de confirmation de commande, qui peut envoyer le bon code à GA lié à la bonne session.
Je gère cette problématique depuis 15 ans ! Sur Paypal il y a une option, et les modules bancaires proposent aussi cette option, souvent appelée la redirection automatique. Parlez-en à… qui de droit (ou à moi si vous vous sentez seuls !)

8 thoughts on “Bug Prestashop Google analytics commandes en double

  1. betal says:

    Alors là, je dis merci !
    40 jours que ma boutique fait un CA de 60.000€ par jour au lieu de 3.000€ … et voila, grâce à toi, je viens de voir que j’ai des dizaines de commandes en sent=0.
    Je viens de purger, j’attends quelques jours pour voir si le traitement est bon.
    Par contre comment j’ai pu avoir autant de commandes à 0, ca je ne sais pas. A par que ca coïncide avec la mise en place du code de remarketing Google…
    MERCI !

    • Pascaline says:

      En effet je n’explique pas encore pourquoi il y a des commandes en doublon dans la table du module !
      J’espère que cela à résolu votre problème en tout cas.
      Pascaline

  2. Alexandra says:

    Bonjour Pascaline, Un grand merci pour cet article car je cherche aussi depuis plusieurs semaines la solution à ce problème.
    Je suis juste coincée car je ne trouve pas cette table dans myphpadmin. Est-il possible qu’elle porte un autre nom?

    • Pascaline says:

      La table sur module Google Analytics s’appelle « ganalytic »s, et par défaut le préfixe des tables de Prestashop est « _ps », donc la table s’appelle par défaut « ps_ganalytics ».
      Parfois le préfixe n’est pas utilisé, la table s’appelera alors simplement « ganalytics », ou un autre préfixe peut être choisi (imaginez 2 instances de prestashop sur une même base de données), par exemple « ps2_ », la table s’appelera alors « ps2_ganalytics ».
      Si vous ne trouvez pas alors soit le module n’est pas installé soit c’est un autre module.

  3. Florian says:

    Merci pour cet article, je rencontre le même souci. Je n’ai cependant pas trouvé de commande en doublon ni en sent0 de la table ganalytics. J’ai supprimé toutes les entrée de cette table, on verra si cela fonctionne!

    • Pascaline says:

      Faites la liste des endroits et des modules qui envoient des commandes à Google Analytics, vous pouvez investiguez à partir de là.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *