Insertion du code de suivi des conversions AdWords

52 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour,

 

Dans haut.php, les lignes

if (defined('IN_PAYMENT_VALIDATION_LANDING_PAGE')) {
$tpl->assign('total_produit_ht', $GLOBALS['total_produit_ht']);
$tpl->assign('display_google_tag', true);
}

doivent-être placées après $tpl = $GLOBALS['tplEngine']->createTemplate('haut.tpl');

Dans ok.php, il y a bien define('IN_PAYMENT_VALIDATION_LANDING_PAGE', true); avant l'include de haut.php ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Simon,

Merci, effectivement comme vous l'aviez constaté, le test n'était pas au bon endroit dans haut.php
Et dans ok.php, vous m'aviez donné le code define('IN_PAYMENT_VALIDATION_LANDING_PAGE') mais sans le ,true à la fin ... 

J'ai donc corrigé tout ça et l'affichage du script google réagit désormais bien selon la page affiché.

Par contre, j'ai désoramis d'autres soucis concernant entre autres la variable total_produit_ht

J'obtiens l'erreur suivante sur la page ok.php 
Notice: Undefined index: total_produit_ht in /home/www/ledsboutique/modeles/white/haut.php on line 33

Et donc l'information du montant du panier HT ne remonte pas chez google.

 

Pour info, dans mon fichier ok.php, vous m'aviez demandé de mettre :
$GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']['total_produit_ht']; (juste avant le init du panier)
mais cela me créait une erreur fatale.

J'ai donc modifié en :
$GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']->total_produit_ht;
suivant le modèle de ligne suivante dans ce même fichier
$_SESSION['session_caddie']->init();

Je n'ai donc plus d'erreur fatale mais peut-être le problème vient-il de là...
Merci par avance.

François.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

je ne sais pas ce qui provoquait une erreur fatal, la ligne que vous avez ajouté semble bonne. Avez-vous encore un problème de montant vide?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Simon, Non je n'ai toujours pas de remontée du montant. (enfin si je l'ai eu une seule fois en réactualisant la page du retour boutique mais plus depuis)
Comment peut-on faire ?
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Re,

Bon, j'ai quelques pistes.
Comme je vous le disais, j'utilise les fichiers d'un module que ma fourni SystemPay et il y a quelque différence dans leur version du ok.php (validation.php chez eux)
Et c'est de là que vient le problème et non de haut.php.

Je m'explique :
Dans leur fichier le $_SESSION['session_caddie']->init(); est dans un test.
J'avais donc mis la ligne $GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']->total_produit_ht; dans ce test, juste avant l'init du caddie comme vous me l'aviez demandé.

Mais visiblement le fait que l'on soit dans un test pose problème.
En effet, lorsque je sort la ligne du test, je n'ai plus d'erreur Notice et j'ai bien une valeur remonté chez google, ce qui constitue une avancée en soi.
Malheureusement cette valeur est égale à zéro.
Cela me semblerai logique si elle était déplacée après le  $_SESSION['session_caddie']->init(); car le montant est remit à 0 après cette ligne mais le truc c'est que même si je la déplace avant, c'est pareil, montant = 0

Pour le module systempay je vais voir ça avec eux du coup.
Et je vais donc poursuivre mes tests sur votre module paypal et voir ce que ça donne.
Je reviens vers vous à ce sujet dans le week-end.

Merci.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Re,

J'avance, petit à petit avec mes modestes connaissances...
Donc en fait le problème que j'avais soulevé n'en est pas un.
J'avais effectivement une Notice: Undefined index: total_produit_ht in /home/www/ledsboutique/modeles/white/haut.php on line 33
mais c'est justement à cause du test dans le fichier qui conditionne la suite des opérations et ce, suivant l'id du statut de paiement.
Et moi j'actualisais ma page à chaque modif, mais j'oubliais de repasser la commande "en attente de paiement" pour se remettre dans le bon contexte à cet instant du processus de paiement.

En fait dans le module fourni par systempay, il n'y a pas de fichier IPN pour la communication avec le serveur.
C'est la page validation.php (l'équivalent de la page ok.php) qui fait les 2 et qui est donc executée 2 fois:

- Une première fois par le serveur de paiement (ce qui met à jour le statut de paiement, qui vide la panier, qui envoi les mails de notifications) 
- Une deuxieme fois par l'utilisateur (s'il clique sur retourner à la boutique) mais à ce moment là, le statut de paiement est déja en réglé, le panier déja réinitialisé, etc.... donc récupération impossible de la variable...

Donc finalement, le problème résultant est que le montant remonté est à 0...
Il va falloir que je modifie les tests de manière à executer les bonnes choses aussi bien pour le premier passage que pour le second sur cette page.

A vous lire.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

J'ai trouvé le problème ! et il est également valable sur votre module systempay.
En fait vous m'aviez dit de placer la ligne :

$GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']->total_produit_ht; 

 juste avant l'init du caddie, pour être sûr de récupérer la valeur de la variable avant la mise à zéro du caddie.

Le souci c'est que lorsque l'on arrive sur ok.php (ou validation.php, peut importe...)
le caddie est déjà réinitialisé à cause de configuration.inc.php qui réalise un test similaire selon le statut de paiement qui, dans le processus, à déjà été mis à jour par le fichier ipn.php (ou la première execution de validation.php dans mon cas)

 

// Test pour savoir si une commande est en cours.
	// Si tel est le cas, on vérifie son statut de paiement et si elle est payée, alors on réinitialise le caddie
	if (!empty($_SESSION['session_caddie']->commande_id)) {
		$query_com = query("SELECT *
			FROM peel_commandes
			WHERE id ='" . intval($_SESSION['session_caddie']->commande_id) . "' AND id_utilisateur = '" . intval($_SESSION['session_utilisateur']['id_utilisateur']) . "'");
		$result_com = fetch_object($query_com);
		if ($result_com && in_array($result_com->id_statut_paiement, array('2', '3'))) {
			$_SESSION['session_caddie']->init();
			unset($_SESSION['session_commande']);
		}

du coup j'ai modifié la fin du test pour ajouter une condition :
 

if ($result_com && in_array($result_com->id_statut_paiement, array('2', '3')) && (!defined('IN_PAYMENT_VALIDATION_LANDING_PAGE'))) {
			$_SESSION['session_caddie']->init();
			unset($_SESSION['session_commande']);
		}

Du coup, soit le panier est réinitialisé comme avant par configuration.inc.php.
Soit l'utilisateur arrive bien sur la page ok.php et à ce moment là, le caddie n'est réinitialisé qu'après avoir récupéré la valeur de la variable.
Merci de me dire si ma modification peut générer un dommage collatéral selon vous.
 

Voila, j'ai encore pas mal d'avertissement google sur d'autres paramètres du script qui sont mal ou pas remonté mais en ce qui concerne la variable total_produit_ht, c'est résolu !
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

Merci de me dire si ma modification peut générer un dommage collatéral selon vous.

A priori non, étant donné que la réinitialisation du panier se fait aussi dans les pages de validation du paiement. Si l'utilisateur fait un retour arrière via le navigateur après le paiement et consulte à nouveau le site, la session tout de même supprimée donc je ne vois pas de cas de figure où la modification que vous faite pose problème.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

C'est ce que je me suis dit aussi.
Merci Simon.

Je reviens vers vous si j'ai besoin concernant mes autre petits soucis sur ce script.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

J'ai besoin de récupérer d'autres variables pour mon script google parmi lesquelles :

- N° de commande
- Nom du site
- TVA

- frais de livraison HT
- Ville département et pays du client

et

- réf produit
- nom du produit
- categorie du produit
- prix unitaire du produit
- quantité du produit


Pour les frais de livraison ht, je crois avoir trouvé la variable 'cout_transport_ht' dans session_caddie
La ville, cp et pays se trouve dans session_commande je pense....
Mais quel est le nom des autres variables ? et dans quelle session les récupérer ?

 

--

 

 

Si j'ai bien compris, une fois que j'aurais le nom des variables, il faudra suivre le même procédé que pour 'total_produit_ht' ?

C'est à dire une ligne du genre dans la page ok.php
$GLOBALS['total_produit_ht'] = $_SESSION['session_caddie']->total_produit_ht; 

Puis la conversion tpl dans haut.php
$tpl->assign('total_produit_ht', $GLOBALS['total_produit_ht']);

puis l'utilisation de la variable {$total_produit_ht} dans haut.tpl

 

?


Merci.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour

 

// - N° de commande
$_SESSION['session_caddie']->commande_id
//- Nom du site
$GLOBALS['site']
// - TVA - frais de livraison HT
$_SESSION['session_caddie']->cout_transport_ht
// - Ville département et pays du client
$_SESSION['session_utilisateur']['code_postal'] => Récupérer les deux premiers chiffres.
$_SESSION['session_utilisateur']['ville']


Pour récupérer ces infos il faut faire une boucle sur article
foreach ($_SESSION['session_caddie']->articles as $numero_ligne => $product_id) {
    // - réf produit
    $product_object = new Product($product_id);
    $_SESSION['session_caddie']->reference[$numero_ligne];
    // - nom du produit
    $product_object->name;
    // - categorie du produit
    $product_object->categorie;
    // - prix unitaire du produit
    $_SESSION['session_caddie']->prix[$numero_ligne];
    // - quantité du produit
    $_SESSION['session_caddie']->quantite[$numero_ligne];
}

 

Si j'ai bien compris, une fois que j'aurais le nom des variables, il faudra suivre le même procédé que pour 'total_produit_ht' ?

 

Oui il faut reprendre le même principe.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Simon, et merci.

le code suivant

foreach ($_SESSION['session_caddie']->articles as $numero_ligne => $product_id) {
    // - réf produit
    $product_object = new_product($product_id);
    $_SESSION['session_caddie']->reference[$numero_ligne];
    // - nom du produit
    $product_object->name;
    // - categorie du produit
    $product_object->categorie;
    // - prix unitaire du produit
    $_SESSION['session_caddie']->prix[$numero_ligne];
    // - quantité du produit
    $_SESSION['session_caddie']->quantite[$numero_ligne];
}

Je le mets dans ok.php ? à la suite de mes lignes de type  $GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']->total_produit_ht; ?
pas besoin de mettre [$numero_ligne] pour name et categorie ?

Dans haut.php j'utilise le modèle de total_produit_ht pour les variables ou l'on utilise $GLOBALS pour les stocker en mémoire mais justement pour name et catégorie, je mets ça ou c'est faux ?

$tpl->assign('name', $product_object['name'])
$tpl->assign('categorie', $product_object['categorie'])

Et enfin pour les 3 autres je peux utiliser le modèle trouvé plus bas qui est :
$tpl->assign('prenom', vb($_SESSION['session_utilisateur']['prenom']));

Ce qui nous donnerai pour nos variables :

$tpl->assign('reference', vb($_SESSION['session_caddie']['reference']));
$tpl->assign('prix', vb($_SESSION['session_caddie']['prix']));
$tpl->assign('quantite', vb($_SESSION['session_caddie']['quantite']));
Et enfin pour site.

Je met juste $GLOBALS['site'] dans ok.php ?
Puis $tpl->assign('site', $GLOBALS['site']); dans haut.php ?
Enfin j'utilise {$site} dans haut.tpl ?

Désolé mais dès que j'ai pas d'exemple concret, je suis un peu perdu.
Merci par avance.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

Je le mets dans ok.php ? à la suite de mes lignes de type  $GLOBALS['total_produit_ht'] =  $_SESSION['session_caddie']->total_produit_ht; ?
 

Oui, j'ai juste donné le nom des variables, donc il faut finir de taper le code en reprenant ce qui a été fait pour total_produit_ht. Par ailleurs j'ai changé $product_object = new_product($product_id); par $product_object = new Product($product_id); dans mon message.

 

pas besoin de mettre [$numero_ligne] pour name et categorie ?

Non, on utilise la classe Product pour récupérer ces infos. numero_ligne permet de récupérer les infos de la session caddie.

 

$tpl->assign('reference', vb($_SESSION['session_caddie']['reference']));
$tpl->assign('prix', vb($_SESSION['session_caddie']['prix']));
$tpl->assign('quantite', vb($_SESSION['session_caddie']['quantite']));

 

Il faut reprendre le fonctionnement utilisé pour total_produit_ht, en définissant une variable global d'abord dans ok.php, et ensuite utiliser cette variable pour définir la variable Smarty dans haut.php

 

$tpl->assign('name', $product_object['name'])
$tpl->assign('categorie', $product_object['categorie'])

 

$product_object est un objet, pour utiliser un attribut d'un objet vous devez écrire de cette façon:

$product_object->name;
$product_object->categorie;

 

 

Je met juste $GLOBALS['site'] dans ok.php ?
Puis $tpl->assign('site', $GLOBALS['site']); dans haut.php ?
Enfin j'utilise {$site} dans haut.tpl ?

Oui, vous pouvez faire ça avec le nom du site

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Hello,

Une fois de plus merci, ça avance petit à petit.
J'ai encore quelques petits soucis.

Le plus important c'est la reference => $_SESSION['session_caddie']->reference[$numero_ligne]; 

Vous êtes sur que la référence est bien initialisé sans session_caddie ? J'ai le message d'erreur suivant : Notice: Undefined property: Caddie::$reference in /home/www/ledsboutique/modules/systempay/validation.php on line 145

Et je n'ai rien trouvé avec la reference dans Caddie.php.

Ensuite j'ai voulu également récupérer le pays, et donc j'ai utilisé pays comme variable mais le résultat remonté chez google est un code à 3 chiffre (239) qui ne correspond même pas à l'id du Pays France que j'ai en back office.
Je ne sais donc pas d'où vient ce 239, ni surtout comment avoir le pays en toute lettre.
J'ai vu que le pays était également stocké dans session_caddie, peut-être devrais-je essayer de le récupérer par ce biais ?

Enfin, la variable prix par numéro de ligne est TTC, il y a-t-il un moyen de l'avoir en HT ?
D'ailleurs lorsque j'ai plusieurs articles dans le panier, le script google ne remonte que le dernier, alors que je m'attendais à avoir la liste.

Voila pour le moment ce qui coince.
Merci encore.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,
 

Le plus important c'est la reference => $_SESSION['session_caddie']->reference[$numero_ligne]; 

Vous êtes sur que la référence est bien initialisé sans session_caddie ? J'ai le message d'erreur suivant : Notice: Undefined property: Caddie::$reference in /home/www/ledsboutique/modules/systempay/validation.php on line 145

Et je n'ai rien trouvé avec la reference dans Caddie.php.

La variable est bien initialisé dans la class Caddie, ligne 88 du fichier lib/Class/Caddie.php
    var $reference = array();

Si cette valeur est vide, vous pouvez utiliser $product_object->reference comme valeur à la place.
 

 

Ensuite j'ai voulu également récupérer le pays, et donc j'ai utilisé pays comme variable mais le résultat remonté chez google est un code à 3 chiffre (239) qui ne correspond même pas à l'id du Pays France que j'ai en back office.
Je ne sais donc pas d'où vient ce 239, ni surtout comment avoir le pays en toute lettre.
J'ai vu que le pays était également stocké dans session_caddie, peut-être devrais-je essayer de le récupérer par ce biais ?

 

L'id du pays est stocké dans $_SESSION['session_utilisateur']['pays']. Vous pouvez utiliser la fonction get_country_name($id_pays) pour récupérer le nom du pays.

 

 

Enfin, la variable prix par numéro de ligne est TTC, il y a-t-il un moyen de l'avoir en HT ?

 

Vous pouvez utiliser $_SESSION['session_caddie']->prix_ht[$numero_ligne]; au lieu de $_SESSION['session_caddie']->prix[$numero_ligne];
 

D'ailleurs lorsque j'ai plusieurs articles dans le panier, le script google ne remonte que le dernier, alors que je m'attendais à avoir la liste.

Effectivement, le code actuel ne retourne que le dernier élément du tableau. Pour avoir la liste, il faut faire par exemple

$product_name_array=array():

foreach ($_SESSION['session_caddie']->articles as $numero_ligne => $product_id) {
// - réf produit
$product_object = new_product($product_id);
$product_name_array[] = $product_object->name;
}

$GLOBALS['products_names'] = implode(',', $product_name_array);

 

La variable $GLOBALS['products_names']  contiendra la liste des noms de produits, séparé par une virgule.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,
 

L'id du pays est stocké dans $_SESSION['session_utilisateur']['pays']. Vous pouvez utiliser la fonction get_country_name($id_pays) pour récupérer le nom du pays.

Comment utiliser cette fonction et dans quel fichier ?
Je progresse mais là, j'ai essayé plein de chose en cherchant des modèles équivalent, je n'y parviens pas.

Pour le reste, tout est ok, Merci Simon.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

Vous pouvez utiliser cette variable pour définir la variable Smarty qui contiendra le pays dans haut.php.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour, 

Ok, donc dans ok.php je mets :

$GLOBALS['pays'] =  $_SESSION['session_utilisateur']['pays'];

puis dans haut.php je met quoi ? un truc dans ce genre ? :
 

tpl->assign('pays', get_country_name([$GLOBALSLS['total_produit_ht']));

Merci par avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

Ce n'est pas utile de définir une variable global dans ok.php pour le pays, étant donné que la session utilisateur n'est pas réinitialisée. Donc dans haut.php vous pouvez directement faire

$tpl->assign('pays', get_country_name($_SESSION['session_utilisateur']['pays']));

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonsoir, 
C'est parfait ! Tout est ok.

Petite question bonus.... :
Nous avons eu des soucis avec systempay à trouver l'origine d'un bug sur certaines transactions.
Il s'avère que l'orsque l'utilisateur rentre son prénom (ou n'importe quel autre champs) suivi d'un espace, le formulaire envoyé sur la plateforme de paiement contient bien l'espace.
Mais lors du retour, lors de la comparaison des signatures, les signatures ne concordent pas car peel à enlevé l'espace supplémentaire dans sa concaténation.
Je pense que ce problème est lié au module systempay fournit par ma banque.

Par contre, pour s'éviter ce genre de souci, ne pourrait-t-on pas supprimer l'espace dès la création du compte client ? en trimant les éventuels espaces ?
Comment faire et dans quel fichier ? (car c'est le type de chez lyra qui m'a dit ça mais je ne connaissais même pas le mot "trimer" mis à part pour dire que je galère sur ce module depuis trop longtemps !! lol
Non, on arrive au bout, merci Simon en tout cas !


 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

Vous pouvez utiliser la fonction trim de PHP http://php.net/manual/fr/function.trim.php lors de l'enregistrement du prénom et du nom de l’utilisateur en base de données. Il faut pour cela modifier la fonction insere_utilisateur du fichier lib/fonctions/user.php.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

OK merci, 
Ligne 273 de lib.fonctions/user.php :

, '" . nohtml_real_escape_string(vb($frm['prenom'])) . "'

Je remplace vb par trim ?
Comme sur l'exemple de l'email quelques lignes au dessus ?
 

, '" . nohtml_real_escape_string(trim($frm['email'])) . "'

A quoi sert vb ? que veut-il dire ?
Merci.

Je vais en fait trimer tous les champs qui servent au calcul de la signature systempay, donc tous les champs obligatoire à la création d'un compte.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

J'ai fait l'essai en anticipant votre réponse, et ça fonctionne.
Par contre, en modifiant les paramètre du compte dans utilisateurs/change_params.php, l'utilisateur a de nouveaux possibilité d'ajouter des espaces s'il le souhaite.
Et idem dans la commande achat/achat_maintenant.php -> step 3

Par contre c'est moins clair pour moi car j'ai pas pu trouver d'exemple concret.
Merci par avance.

François.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

 

A quoi sert vb ? que veut-il dire ?
Merci.

vb() retourne une valeur vide si la variable n'existe pas. Vous pouvez mettre en deuxième argument une valeur par défaut pour la variable.

vb() est différent de trim, donc vous pouvez utiliser les deux :

, '" . nohtml_real_escape_string(trim(vb($frm['email']))) . "'
les paramètre du compte dans utilisateurs/change_params.php

C'est la fonction maj_utilisateurs dans lib/fonctions/user.php qui enregistre les modifications du compte.

 

Et idem dans la commande achat/achat_maintenant.php -> step 3

Vous pouvez ajouter les trim dans la fonction put_session_commande du fichier lib/fonctions/order.php. Cette fonction reprend les valeurs envoyées par le formulaire pour les mettres en session. Cette session est ensuite utilisée pour l'enregistrement en base de données.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Simon,

pour put_session_commande du fichier lib/fonctions/order.php
La syntaxe est un peu différente. (absence de paranthèses encadrant vb)
Du coup pour trim comment je fait ? la ligne suivante est-elle juste ?

 

$_SESSION['session_commande']['nom1'] = vb trim($frm['nom1']);

Par contre à ce stade, on parle de nom1 (pour la facturation et de nom2 pour la livraison
Donc du coup est-ce utile d'intervenir sur ces variables ?
Celles qui sont envoyées sur la plateforme de paiement vads (et c'est seulement celles qui m'intéressent), c'est les infos sur la session utilisateur mais pas celles de la commande non ? et encore moins celles de livraison...?

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping