djespace

Utilisateur open source
  • Compteur de contenus

    337
  • Inscrit(e) le

  • Dernière visite


Messages posté(e)s par djespace


  1. Bonjour

    Je cherche a ajouter une information de date de livraison sur mes pages produit, en dessous de l'affichage de l'état de stock.
    J'ai un script php avec plusieurs fonctions qui fonctionne bien mais il me faut maintenant l'intégrer à peel (je suis sur une 7.0.0)

    J'ai ajouter mon code dans display_product.php, créé un tpl->assign avec une variable à utiliser ensuite dans critere_stock.tpl
    mais j'ai désormais une erreur fatal : 
    Fatal error: Call to undefined function addOpenDays() in /home/www/ledsboutique/lib/fonctions/display_product.php on line 787

    comment définir cette fonction ?
    Suis-je sur la bonne piste ? ou est-ce que j'ai tout faux ?
    Est-ce juste que je ne place pas les code au bons endroits ?

     

    Voici le script : 

    function addOpenDays($startDate, $daysNumber = 0) {
        if (isset($startDate) && !is_null($startDate)) {
            $startDate = (is_string($startDate)) ? strtotime($startDate) : $startDate;
    
            $year     = 0;
            $holidays = array();
    
            $date = $startDate;
    
            for ($i = $daysNumber; $i > 0; $i--) {
                if ($year != date('Y', $date)) {
                    $year     = date('Y', $date);
                    $holidays = getHolidays($year);
                }
    
                while (!isOpenDay($date) || isHoliday($date, $holidays)) {
                    $date = strtotime(date('Y-m-d', $date) . ' + 1 days');
                }
    
                $date = strtotime(date('Y-m-d', $date) . ' + 1 days');
            }
    
            while (!isOpenDay($date) || isHoliday($date, $holidays)) {
                $date = strtotime(date('Y-m-d', $date) . ' + 1 days');
            }
        }
    
        return strtotime(date('Y-m-d', $date));
    }
    
    // Get all holidays for a given year
    function getHolidays($year) {
        // Holidays array
        $holidays = array();
    
        if (isset($year) && !is_null($year) && $year > 1970) {
    
            // List of basic known holidays
            $holidays[] = '1_1_' . $year; // New year day
            $holidays[] = '1_5_' . $year; // Fête du travail
            $holidays[] = '8_5_' . $year; // Victoire 1945
            $holidays[] = '14_7_' . $year; // Fête nationale
            $holidays[] = '15_8_' . $year; // Assomption
            $holidays[] = '1_11_' . $year; // Toussaint
            $holidays[] = '11_11_' . $year; // Armistice 1918
            $holidays[] = '25_12_' . $year; // Christmas
    
            // Get the easter date
            $easter = easter_date($year);
    
            // From the easter date, when can compute le jour de l'ascension and pentecôte
            $holidays[] = date('j_n_' . $year, $easter + 86400); // Easter
            $holidays[] = date('j_n_' . $year, $easter + (86400 * 39)); // Ascension
            $holidays[] = date('j_n_' . $year, $easter + (86400 * 50)); // Pentecôte
        }
    
        return $holidays;
    }
    
    // Check if a given date is holiday
    function isHoliday($date, $holidays = null) {
        if (isset($date) && !is_null($date)) {
            $date = (is_string($date)) ? strtotime($date) : $date;
    
            $holidays = (!isset($holidays) || is_null($holidays)) ? getHolidays(date('Y', $date)) : $holidays;
    
            if (isset($holidays) && !is_null($holidays)) {
                return in_array(date('j_n_' . date('Y', $date), $date), $holidays);
            }
        }
    
        return false;
    }
    
    // Check if a given day is an open day
    function isOpenDay($date) {
        if (isset($date) && !is_null($date)) {
            $date = (is_string($date)) ? strtotime($date) : $date;
    
            return !in_array(date('w', $date), array(0, 6));
        }
    
        return false;
    }
    
    // Selection de la langue
    setlocale(LC_TIME, 'fr_FR'); // fr_FR pour le français

     

    Voici ma ligne d'assignation de la variable pour le tpl :

    $tpl->assign('affiche_date_livraison', strftime('%A %e %B %Y', addOpenDays(date('Y-m-d'), 3));

    Et donc j'utilise la variable {$affiche_date_livraison} dans le fichier .tpl

    Merci  de votre aide.

    François.
     


  2. Bonjour, j'ai reçu ce mail de paypal aujourd'hui :
    Dois-je craindre une incompatibilité avec ma boutique peel actuelle ? (7.0.0)
     

    Bonjour,

    Comme nous vous l'avons déjà annoncé, PayPal passe au certificat SHA-256 pour www.paypal.com. Ce point de terminaison est également utilisé par les marchands se servant du produit Notification instantanée de paiement (IPN).

    Cette mise à niveau est prévue le 30/09/2015. Cependant, nous serons peut-être amenés à modifier cette date au pied levé pour respecter la norme de sécurité du secteur.

    Vous recevez cette notification car vous avez été identifié comme un marchand ayant utilisé les points de terminaison IPN au cours de l'année passée. Si vous n'avez pas effectué les modifications nécessaires, nous vous invitons à procéder à ces changements immédiatement afin d'éviter toute interruption de votre service.

    Les changements étant techniques, nous vous conseillons de consulter les personnes responsables de votre intégration PayPal. Elles pourront identifier les modifications nécessaires. Transférez-leur cet email, les liens hypertextes ci-dessous et les coordonnées de votre responsable technique pour évaluation.

    L'un des meilleurs moyens de vous assurer que votre intégration fonctionne est de l'essayer dans l'environnement de test. Les points de terminaison de l'environnement de test ont été mis à jour de façon à accepter les connexions sécurisées via les certificats SHA-256.

    Pour plus d'informations techniques, consultez notre guide Sécurité des marchands – Guide de mise à jour du système. Pour le calendrier de nos mises à jour de service, rendez-vous sur notre microsite sur la modification des certificats SSL 2015-2016.

    Merci de votre patience et de votre compréhension. 


  3. 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.


  4. 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.


  5. 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.


  6. Bonjour,

    J'aurais aimé pouvoir supprimer une étape lors du processus d'achat qui parait un peu trop long, l'une des étape étant complètement inutile.
    Je souhaiterais qu'à l'étape 3 (résumé) on soit redirigé directement sur le serveur bancaire du mode de paiement choisi, sans passer par l'étape confirmation, qui n'est autre qu'une nouvelle page de résumé. (c'est là qu'il y a doublon inutile).

    Il faudra je pense déplacer une partie du code de l'étape 4 à l'étape 3 pour la redirection des liens, mais également modifier le fil ariane du panier pour supprimer l'étape 4.
    Merci par avance,

    Cordialement,
    François


  7. 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 !


     


  8. 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.


  9. 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.
     


  10. 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.
     

  11. 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.
     


  12. 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 !
     


  13. 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.


  14. 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.
     


  15. 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.
     


  16. Bonjour Simon

    Je n'ai plus les messages d'erreur mais le tag google (qui avant s'affichait sur toutes les pages) ne s'affiche désormais plus nullepart, même pas sur la page où nous aimerions qu'il s'affiche !
    pffiouuu dur dur !

    Je ne comprends pas, j'ai tout fait ce que vous me disiez de faire, tout est ok à la virgule près !
    Voici mes fichiers haut.php et haut.tpl => http://leds-boutique.fr/serveur/peel/fichiers.rar

    Merci par avance.
    François.


     


  17. Bonjour Simon,

    Merci pour ces précisions.
    Je vais déjà essayer de résoudre le problème sur systempay avant de m'occuper de paypal.

    Donc, déjà j'avais oublié le $ pour le test {if $display_google_tag}
    Mais désormais, j'ai ces messages d'erreur sur mes pages.


    Notice: Undefined index: display_google_tag in /home/www/ledsboutique/lib/templateEngines/smarty/compile/9a27eac3c99e718898d364e20a9a4a34f36ecc30.file.haut.tpl.php on line 65

    Notice: Trying to get property of non-object in /home/www/ledsboutique/lib/templateEngines/smarty/compile/9a27eac3c99e718898d364e20a9a4a34f36ecc30.file.haut.tpl.php on line 65

    Pouvez-vous m'aider ?

Twitter Advisto ecommerce

Facebook PEEL Shopping