Problème avec log E-commerce et plugin Matomo Analytics

  • Posts: 47
  • Thank you received: 5
1 year 3 weeks ago #368209

-- HikaShop version -- : 6.0.0
-- Joomla version -- : 4.4.13
-- PHP version -- : 8.1.32

Bonjour,

Je précise d'abord que j'utilise Matomo sans cookies. Cependant cela semble causer des problèmes avec le Log E-Commerce.

Quand un utilisateur effectue une commande sur mon site, le panier est toujours affiché comme étant abandonné, même si l'utilisateur a bien passé par l'étape de confirmation.

La commande e-commerce est toujours enregistré, mais comme une visite séparée (voir la capture d'écran).

J'utilise le plugin gratuit Matomo Analytics avec Hikashop et rien d'autre.
Merci

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 86099
  • Thank you received: 14200
  • MODERATOR
1 year 3 weeks ago #368213

Bonjour,

Merci de votre retour. J'ai étudié le problème et je pense avoir la solution.
J'ai mis à jour le plugin avec des modifications qui devraient permettre d'éviter le souci:
www.hikashop.com/marketplace/product/271-matomo.html
Je vous laisse mettre à jour le plugin et le tester.

The following user(s) said Thank You: brettv

Please Log in or Create an account to join the conversation.

  • Posts: 47
  • Thank you received: 5
10 months 1 week ago #369188

Bonjour,

Alors après quelques achats effectués sur mon site, je peux confirmer que malheureusement le bogue est toujours là.

Matomo affiche Panier abandonné soit après l'étape de confirmation ou bien juste après la seconde étape (cid-2) du passage en caisse.

Ci-joint le Log d'une commande confirmée sur mon site. Merci à l'avance de votre attention.

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 47
  • Thank you received: 5
4 days 23 hours ago #373251

Bonjour, alors après avoir effectué plusieurs tests et transactions en mode sandbox, je pense avoir trouvé la solution au problème de la variable visitor_id manquant et le message d’erreur dans le journal.

La première chose que j’ai corrigé est l’ajout de 'end' dans l’étape de vérification du contenu de la variable $page_task. Il s’agit de la page de confirmation de commande affichée par HikaShop après le retour d'un processeur de paiement comme Stripe et selon ma compréhension du plugin, le champ caché contenant la variable visitor_id doit toujours être disponible.

Par ailleurs, il semble que la variable $_SESSION n’a jamais été proprement alimentée avec la valeur de l’identifiant du visiteur.

Pour obtenir cette valeur, j’ai dû renoncer à utiliser Matomo sans cookies, car le cookie Matomo contient justement cette information et je peux l’accéder en tout temps. J’ai donc ajouté une simple boucle pour trouver le cookie Matomo associé à la variable site_id et extraire l’ID du visiteur.

Voici la méthode avec les changements que j’ai apportés :

public function onHikashopBeforeDisplayView (&$view) {
		$app = \Joomla\CMS\Factory::getApplication();
    
    $this->init();    
		
    $site = false;
		if(version_compare(JVERSION,'4.0','>=') && $app->isClient('site'))
			$site = true;
		if(version_compare(JVERSION,'4.0','<') && $app->isSite())
			$site = true;
		if(!$site)
			return;

		// Track the Matomo visitor ID on HikaShop pages during display, step, and order completion (end).
		$page_view = $view->getName();
		$page_task = $view->getLayout();

    if($page_view == 'checkout' && in_array($page_task, array('show', 'step', 'end'))) {

      if (empty($_SESSION['hikashop_matomo_visitor_id'])) {
          // Get Matomo visitor ID from the Matomo cookie matching this site's ID and put it into the existing session variable.
          foreach ($_COOKIE as $name => $value) {
              // Matomo visitor cookies have the format: _pk_id.<site_id>.<domain_hash>
              if (strpos($name, '_pk_id') !== 0)
                  continue;

              $parts = explode('_', $name); // PHP converts dots in cookie names to underscores when populating $_COOKIE

              // Expected PHP cookie representation: _pk_id_<site_id>_<domain_hash>
              if (count($parts) < 4)
                  continue; // Skip cookies with an unexpected format.

              // Make sure this cookie belongs to our configured Matomo site.
              if ((string) $parts[3] !== $this->site_id)
                  continue;

              // The cookie value starts with the 16-character visitor ID.
              $value_parts = explode('.', $value);

              if (empty($value_parts[0]))
                  continue; // Skip cookies with no visitor ID.

              $visitor_id = trim($value_parts[0]);

              // check that the value is exactly 16 hexadecimal characters
              if (preg_match('/^[a-f0-9]{16}$/i', $visitor_id)) {
                  $_SESSION['hikashop_matomo_visitor_id'] = $visitor_id; // Now we can assign the visitor ID to the session variable
                  break;
              }
          }
      }

      $view->extra_data['matomo'] = '
    <input type="hidden" id="hikashop_checkout_matomo_visitor_id"
      name="checkout[matomo][visitor_id]"
      value="'.$view->escape(@$_SESSION['hikashop_matomo_visitor_id']).'"/>';
    }
}

En espérant que ces changements peuvent vous aider dans la mise à jour du plugin, la prochaine chose serait d’ajouter le pistage pour les robots AI :woohoo:

Please Log in or Create an account to join the conversation.

  • Posts: 86099
  • Thank you received: 14200
  • MODERATOR
4 days 10 hours ago #373254

Bonjour,

Merci beaucoup pour ce diagnostic, il était juste sur les deux points. La variable de session n'était en effet jamais alimentée par le plugin : il la lisait sans que rien ne l'écrive, donc l'identifiant ne venait que du champ caché rempli par le script de Matomo. Et ce champ manquait effectivement sur la page de fin du passage en caisse, celle qui s'affiche au retour d'une passerelle de paiement.

Nous avons publié la version 1.1.2 du plugin avec vos deux corrections, plus une troisième qui devrait compter au moins autant dans votre cas :

- l'identifiant du visiteur est maintenant lu dans le cookie de Matomo quand le formulaire n'en porte pas, exactement comme vous l'avez fait, et il est conservé en session pour toute la visite ;
- le champ caché est ajouté aussi sur la page de fin du passage en caisse ;
- le navigateur et la langue de l'acheteur sont désormais envoyés avec la vente. C'est le point important pour un Matomo sans cookies : la vente part de votre serveur et non du navigateur du client, et sans ces informations Matomo ne pouvait pas la rattacher à la visite en cours, il y voyait un autre visiteur. D'où la vente enregistrée comme une visite séparée et le panier resté affiché comme abandonné, même avec l'adresse IP qui était déjà transmise.

Une précision sur le mode sans cookies : dans ce mode il n'existe pas d'identifiant de visiteur persistant, le cookie n'étant pas écrit, donc le rattachement repose entièrement sur la reconnaissance que Matomo fait à partir de l'adresse IP, du navigateur et de la langue. Cela devrait donc nettement mieux fonctionner qu'avant, mais si vous voulez un rattachement exact à tous les coups, garder les cookies de Matomo reste la solution fiable, comme vous l'avez constaté.

Le plugin est à retélécharger ici : www.hikashop.com/marketplace/product/271-matomo.html

Sur le pistage de l'IA, il n'y a probablement rien à ajouter dans le plugin : Matomo le fait déjà lui-même. Les visites qui arrivent depuis un assistant comme ChatGPT, Claude ou Perplexity sont classées dans un canal "AI Assistant", disponible en auto-hébergé depuis Matomo 5.5.0, avec un rapport dédié dans Acquisition, et un rapport sur les robots conversationnels a été ajouté en 5.8.0. Cela fonctionne avec le code de suivi que le plugin pose déjà, et avec la correction ci-dessus vos ventes seront rattachées à ces visites, donc vous verrez ce que ces assistants vous rapportent réellement.

Les robots d'indexation IA eux-mêmes, GPTBot, ClaudeBot et les autres, sont un autre sujet : ils n'exécutent pas le JavaScript, donc aucun code de suivi posé dans vos pages ne peut les voir. Ils ne se mesurent que sur les requêtes brutes, avec l'import des journaux de votre serveur dans Matomo. C'est du ressort de votre hébergement plutôt que d'un plugin de boutique.

Please Log in or Create an account to join the conversation.

  • Posts: 47
  • Thank you received: 5
4 days 2 hours ago #373267

Super, merci nicolas pour le retour rapide et les explications.

Please Log in or Create an account to join the conversation.

Time to create page: 0.067 seconds
Powered by Kunena Forum