osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Page blanche checkout_shipping [RESOLU], pour certains prospects seulement
chti_poupon
posté 15 Dec 2011, 20:40
Message #1


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour,
Voici aujourd'hui deux fois que l'on me téléphone:
"Rien à faire, quand je clique sur "commander", j'obtiens une page blanche"
Cela s'est réglé par une prise de commande par téléphone, mais bon, tous ne téléphonent pas...
Pourtant j'ai des commandes d'un autres client.avant et après ces incidents !

Pour votre information:
  1. Colis pas trop lourds et MR accepte le client en manuel: (copier/coller des données client - pas de Pb accent ou autre)
  2. les commandes hors stock sont autorisées
  3. La FAQ n'apporte pas de remède efficace (tout est OK)
  4. Mon fichier d'erreurs sur le serveur est vide
  5. L'une des clientes m'a dit avoir un ordinateur "neuf avec le dernier Windows". A ma deemande elle a essayé firefox sans succès
Si çà inspire quelqu'un, merci de mettre un commentaire (Solution (?) ici.

A vos petites cellules grises, ô maigrets d'osC


Chti Poupon

Ce message a été modifié par chti_poupon - 22 Feb 2012, 09:43.
Raison de l'édition : nouvelles informations
Go to the top of the page
 
Gnidhal
posté 15 Dec 2011, 23:01
Message #2


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



L'angoisse de la page blanche est pourtant propre aux écrivains pas aux vépécistes smile.gif
Cela dit, quelques suggestions :
As-tu reproduit le problème pour voir cette page de tes yeux ?
Tu dis qu'il n'y a pas d'erreur, tu as regardé les logs php ?

les pistes :
1/ si ton display_error est sur false, tu n'auras pas l'info en ligne et le script se bloque
essaye ini_set('display_errors', 1); en début du script.
2/ si tu as du js ou de l'ajax dans ta page, cela peut éventuellement bloquer le navigateur du client
A vérifier avec un autre navigateur quand l'erreur est localisée

Réflexion : si la page est blanche c'est qu'elle n'est pas parsée par le PHP ou Apache ou encore que le navigateur reste bloqué
Bon courage Chti'


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
brouillard
posté 16 Dec 2011, 10:56
Message #3


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 301
Inscrit : 9-December 09
Membre no 26687



Ne serait-il pas un script (Google GA, javascript, ...) qui fait planté la page ?

Vérifies les formulaires des clients-plantés, il est possible que le client provoque une erreur en remplissant (mal) le formulaire par exemple.

Fais des tests avec différents façon de remplissage de formulaire (divers client fictifs/tests).

peut-être une fiche-produit fait planté la page.

ou alors la page d'avant ne renvoie pas correctement des données du formulaire à la page checkout_shipping

le délais de session n'a pas expiré

Voila quelques interrogations/pistes

Bonne chance !
Go to the top of the page
 
chti_poupon
posté 16 Dec 2011, 20:33
Message #4


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour,
Merci de vos réponses.
A cette heur e le mystère reste entier.
@Gnidhal
Citation
Tu dis qu'il n'y a pas d'erreur, tu as regardé les logs php ?

Mon htaccess est en error off avec un fichier erreur.txt aussi vide qu'après le derniier effacement, il uy a 5 mois...
L'opérateur du serveur me signale 3 erreurs warning dans checkout_process: il me faut aller voir
Citation
si tu as du js ou de l'ajax dans ta page

Pas mon rayon, que du js version de base
Citation
A vérifier avec un autre navigateur

L'un des clients a eu la panne avec ET IE ET FireFox !
@Brouillard
Citation
un script (Google GA,

J'ai pas
Citation
peut-être une fiche-produit fait planté la page.

On vient du panier !?
Citation
Vérifies les formulaires des clients-plantés

Normaux, désespérément !

A suivre...
Je vais voir quoi et quand je saurais quoi, je vous dirai quoi ! Normal, quoi !
Chti poupon
Go to the top of the page
 
chti_poupon
posté 17 Dec 2011, 17:56
Message #5


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour,
En définitive, le warning des logs concerne un / omis dans un ereg_replace. Rien à voir
Sinon, deux erreurs d'un petit malin qui collectionne mes favicon, mais ne sait pas les trouver...!
Par contre, la commande (standard) du bouton commander de shopping_cart et de header comporte un tep_hreflink paramétré avec SSL (Curieusement - Pourquoi d'ailleurs??).
Or, j'avais (pour éviter de trop réfléchir) mis les mêmes renseignements dans configure.php pour HTTP_ et HTTPS_
Je me retrouve donc avec une adresse http:// dans une commande potentiellement HTTPS, bien que ENABLE_HTTPS Soit sur false.
et soit tep_href_link m'a balancé sur die + message (que les clients auraient zappé)
soit le navigateur qui est intransigeant (je ne vois pas comment)
Bon, je mets "résolu...à suivre" (en attendant l'essai de ces clients là)
Chti poupon
Go to the top of the page
 
chti_poupon
posté 12 Feb 2012, 18:11
Message #6


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Nouvelles informations:
  1. Merci @Gnidhal qui m'a indiqué ini_set('display_errors', 1); et ainsi permis de ramasser quelques Notice sur cette page checkout_shipping.php
  2. Merci au membre de ma famille qui a su reproduire la panne sur w.....s7 avec Firefox. Il semblerait que cette combinaison rejette même les quelques "Notice" qui restent à purger.
  3. Je rappelle que par ailleurs, tout fonctionne correctement
Si quelqu'un a des lumières sur w....7 et d'éventuelles particularités, merci de les faire connaître.

Chti poupon


Go to the top of the page
 
Gnidhal
posté 12 Feb 2012, 19:47
Message #7


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Salut Chti'
Alors concernant l'OS que ce soit win, linux ou mac sur la machine du client cela ne doit avoir aucune incidence :
ce qui est servi par le web reste dans le navigateur, sauf avec IE dans certains cas mais ça c'est une autre histoire et avec les applications flash, mais là aussi on sort du cadre.
Bref, FF sous W7 ou FF sous Linux, si la version de FF est identique, la page est en principe la même à quelques variantes près d'interprétation de la version du navigateur (taille de polices,...).

Le serveur envoie un code html complexe qui peut contenir du code actif (javascript) coté client.
En raison des risques encourus d'infection virales, les navigateurs modernes et les antivirus font tout pour limiter l'étendu de ce code au navigateur uniquement. Cependant le javascript est un code interprété par le pc du client et si ce code n'est pas parfaitement académique, cela peut provoquer des erreurs variables selon la version de l'os en effet. Mais là il faut que ton code js soit complètement obsolète ou bancal ce qui fait que l'erreur peut être corrigée à la volée par certains navigateurs et pas d'autres. A creuser si nécessaire.
Si le navigateur de ton testeur familial inclut certaines extensions pour FF, cela peut provoquer des variantes de comportement.

Si l'affichage des erreurs ne te donne que des warnings (ce qui est relativement peu important) la voie à suivre n'est peut-être pas de ce coté.
Je te suggère d'utiliser un outil comme Firebug pour FireFox qui offre des informations très étendues sur la page servie par un site.
Le DOM et les outils de debuggage intégrés te donneront toutes les informations de structure de la page et peut-être la piste de ce qui provoque le bug.
Évidemment, il est impératif de pouvoir reproduire le bug pour le fixer.

Sinon la méthode Sherlock-Holmes :
1/ reprendre tes logs apache du jours où tu as eu le bug
2/ localiser les lignes concernées (adresse IP du client qui a bloqué)
3/ tenter de reproduire la même navigation avec le même panier
4/ pointer l'heure précise du problème (page de départ, page d'arrivée prévue)
5/ examiner les logs d'erreur PHP à ce moment précis
C'est lourd et pas forcément couronné de succès.

D'après ce que tu dis le client est dans le panier et clique sur "commander".
Dans ce cas, s'il est enregistré, on passe à checkout_shipping sinon on est redirigé (tep_redirect) vers la page login. : dans checkout_shipping tu as en haut un truc du genre :
Code
  if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot();
    tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
  }

C'est donc du coté de cette redirection que ça semble problématique.
en faisant un petit test dans ta page panier, j'ai découvert grâce à firebug un warning javascript qui concerne ce code :
Code
<script language="javascript" type="text/javascript">
document.write(' <a rel="nofollow" href="java script:session_win2();">');
</script>

firebug dit :
Citation
Un arbre non équilibré a été écrit en utilisant document.write() provoquant une nouvelle analyse de données provenant du réseau. Pour plus d'informations, consultez https://developer.mozilla.org/en/Optimizing...ulative_Parsing
http://www.ton_site.xxx/catalog/shopping_cart.php Line 45

Cela peut éventuellement être la cause du souci car cela semble concerner le navigateur mozilla justement, mais je n'ai pas cherché plus loin.
Perso ça ne bloque pas pour moi, j'arrive bien sur login.php mais ma config n'est pas celle de Mr tout-le-monde donc il faut passer par le débug.
Et je n'ai pas testé en étant enregistré.

Bon courage... smile.gif


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
chti_poupon
posté 17 Feb 2012, 18:11
Message #8


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour,
J'ai avancé sur divers warnings qui ont disparu:
  • d'abord en mettant en tête de catalog/includes/languages/french.php
    Code
    date_default_timezone_set ("Europe/Berlin");
    en lieu et place du code d'origine, qui serait périmé
  • ensuite en corrigeant plusieurs lignes du css stylesheet.css (cursor, margin_bottom ...)
  • enfin en remplaçant
    Code
    <script>
    document.write(' <a href="java script:session_win2();">');
    </script>
    de la contrib easy_coupons fichier catalog/includes/modules/easy_coupons_box.php par
    Code
    <a href="java script:session_win2()">
    tout simplement - ce qui rend bien compte du message de nouvelle analyse de données
La console d'erreur reste muette à l'essai distant.

Mais la page blanche subsiste sur la cliente test distante, qui, connectée, panier plein, avec nom et adresse normaux n'arrive pas à afficher checkupt_shipping.php.

A suivre ...

Chti poupon


Go to the top of the page
 
chti_poupon
posté 21 Feb 2012, 15:48
Message #9


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour
Suite de l'enquête:
Après quelques recherches d'erreur, en passant par OPERA, mozilla me faisant part d'erreurs internes à lui même (genre variable container inexistante...) polluant les travaux, je suis passé ensuite sur W3C jusqu'à obtenir une page "sans tache".
L'essai familial m'a enfin donné (sur W7 IE & FF) une erreur 500 persistante ( à l'instant le serveur donnait la même page chez moi).
Recherche GG 500 + W7 m'a mené à une suspicion de time_out.
Comme prévu, j'ai essuyé un refus de changer le max_execution_time apache assorti d'une demande de nettoyage de la BDD. Je veux bien, mais çà ne marcherait alors chez personne, le temps serveur étant indépendant du temps client.

Enfin, je tiens le coupable:
Un dernier essai familial me l'a confirmé: si je désactive mondial relay, la page fonctionne !
DONC:
Quand l'internaute utilise Window 7 paramétré par défaut, la requête soap est incluse dans le temps machine qui disjoncte, alors que dans les autres systèmes, même windows, rien de tel ne se passe.
Or, dans php Manual, je lis à la page "set_time_limit":
Citation
Note:

La fonction set_time_limit() et la directive de configuration max_execution_time n'affectent que le temps d'exécution du script lui-même. Tout temps passé en dehors du script, comme un appel système utilisant system(), des opérations sur les flux, les requêtes sur base de données, etc. n'est pas pris en compte lors du calcul de la durée maximale d'exécution du script. Ceci est faux sous Windows où le temps mesuré est le temps réel.



Y-a-t-il moyen de remettre le chrono à zéro juste avant l'appel soap , même sous W7 ??

Si la solution est correcte, il faudra implémenter les contrib MR, car je ne dois pas être le seul dans ce cas.





Merci !

Chti poupon


Go to the top of the page
 
chti_poupon
posté 21 Feb 2012, 17:36
Message #10


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Quelques secondes avec module MR sur false ...
C'est fini !!
Go to the top of the page
 
chti_poupon
posté 21 Feb 2012, 17:53
Message #11


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



La maintenance du module mondial relay est prévenue et s'en occupe (aussi)
L'hypothèse d'un blocage antivirus/pare-feu est faite par mon support serveur.
A suivre
Chti poupon
Go to the top of the page
 
chrysalide
posté 21 Feb 2012, 21:18
Message #12


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



ah le coup de la page blanche quand $pointsRelais->STAT est different de 0.

c'est due a une erreur dans les infos transmisent au webservice via soap.

adresse pas nettoyée (caracteres accentués)
faute de frappe dans le code postal

j'ai une nouvelle revision de la contrib qui attend d'être mise en ligne qui corrige cela et qui retourne le code erreur qui va bien au lieu de juste retourner une page blanche dans checkout_shipping.


Par tester a la barbare le temps que je publie ça.

inserts juste un

Code
echo $pointsRelais->STAT;


avant

Code
if($pointsRelais->STAT==0)


tu auras toujours ta page blanche mais tu dois récupérer le code erreur MR.

Pour info voici les codes erreurs MR

Citation
0 Opération effectuée avec succès
1 Enseigne invalide
2 Numéro d'enseigne vide ou inexistant
3 Numéro de compte enseigne invalide
4
5 Numéro de dossier enseigne invalide
6
7 Numéro de client enseigne invalide
8 Mot de passe ou hashage invalide
9 Ville non reconnu ou non unique
10 Type de collecte invalide
11 Numéro de Relais de Collecte invalide
12 Pays de Relais de collecte invalide
13 Type de livraison invalide
14 Numéro de Relais de livraison invalide
15 Pays de Relais de livraison invalide
16 Code pays invalide
17 Adresse invalide
18 Ville invalide
19 Code postal invalide
20 Poids du colis invalide
21 Taille (Longueur + Hauteur) du colis invalide
22 Taille du Colis invalide
23
24 Numéro d'expédition ou de suivi invalide
25
26 Temps de montage invalide
27 Mode de collecte ou de livraison invalide
28 Mode de collecte invalide
29 Mode de livraison invalide
30 Adresse (L1) de l'expéditeur invalide


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chti_poupon
posté 22 Feb 2012, 09:42
Message #13


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Bonjour !
Eh bien, MERCI à tous!
Le pire est que la fonction accents était implantée aussi bien dans module/shipping que dans l'admin: les accents empêchaient l'édition des étiquettes.
Mais côté module/shipping, elle n'étaiit tout simplement pas appelée !!!
la méthode quote de la classe mondialrelay devient:
Code
  function quote($method = '')
  {
    global $total_weight, $shipping_weight, $shipping_num_boxes;
    //soap
    if($shipping_weight>=0.1)
    {
      global $order, $cart;

  // Début calcul du nombre de colis
          $shipping_num_boxes = 1;
          $shipping_weight = $total_weight;
  
          if (SHIPPING_BOX_WEIGHT >= $shipping_weight*SHIPPING_BOX_PADDING/100) {
            $shipping_weight = $shipping_weight+SHIPPING_BOX_WEIGHT;
          } else {
            $shipping_weight = $shipping_weight + ($shipping_weight*SHIPPING_BOX_PADDING/100);
          }
  
          if ($shipping_weight > $this->trop_lourd) { // Split into many boxes
            $shipping_num_boxes = ceil($shipping_weight/$this->trop_lourd);
            $shipping_weight = $shipping_weight/$shipping_num_boxes;
          }
  // Fin calcul nombre de boîtes
  
      $client = new SoapClient("http://www.mondialrelay.fr/WebService/Web_Services.asmx?WSDL");
      
      $params = array('Enseigne'     => MODULE_SHIPPING_MONDIAL_RELAY_ENSEIGNE
      ,'Pays'         => accents($order->delivery['country']['iso_code_2'])
      ,'Ville'        => accents($order->delivery['city'])
      ,'CP'           => $order->delivery['postcode']);
      //On crée le code de sécurité
      $code = implode("",$params);
      $code .= MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE;
      
      // On le rajoute aux paramétres
      $params["Security"] = strtoupper(md5($code));
      $pointsRelais = $client->WSI2_RecherchePointRelais($params)->WSI2_RecherchePointRelaisResult;// récupere la liste des points relais
      if($pointsRelais->STAT==0)
      {
        // calcul du tarif
        
        // ajout livraison gratuite
        if ($cart->show_total() >= $this->franco)
        {
          $tarif=0;
        }else{
          // Fin ajout livraison gratuite
          $table = split("[:,]" , MODULE_SHIPPING_MONDIAL_RELAY_TARIF);
          $tarifTrouve=true;
          for ($i = 0; $i < sizeof($table); $i+=2)
          {
            if ($shipping_weight > $table[$i])
              continue;
            if (($shipping_weight < $table[$i]) AND $tarifTrouve)
            {
              $tarif=$table[$i+1];
              $tarifTrouve=false;
            }
          }
          $tarif += $this->frais_fixes;
          $tarif=$tarif*$shipping_num_boxes;
        }
        $methods = array();
        foreach($pointsRelais as $pointRelais)
        {
          if( is_object($pointRelais) && trim($pointRelais->Num) != '' )
          {

            //On crée le code de sécurité
            $code = implode("",$params);
            $code .= MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE;
            
            //On le rajoute aux paramètres
            $params["Security"] = strtoupper(md5($code));
            // Et on effectue la requète
            // $detail_pointrelais = $client->WSI2_DetailPointRelais($params)->WSI2_DetailPointRelaisResult;
            
            $popup_params = array(
            'ens'     => MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL,
            'Num'    => $pointRelais->Num,
            'Pays'   => $pointRelais->Pays
            );
            
            $popup_code = '<'.MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL.'>'.$pointRelais->Num.$pointRelais->Pays.'<'.MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE_URL.'>';
                    
            
            $security = strtoupper(md5($popup_code));
            
            $link = 'http://www.mondialrelay.com/public/permanent/details_relais.aspx?ens='. MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL .'&num='.$pointRelais->Num.'&pays='.$pointRelais->Pays.'&crc='.$security;
            
            $methods[]=array(
            'id'     => $pointRelais->Num . $pointRelais->Pays,
            'title'  => $pointRelais->LgAdr1 ." à  ".$pointRelais->Ville ." ".$pointRelais->CP ." <a onclick=\"window.open ('". $link ."', '', 'height=800, width=450, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');\"><b>Détails</b></a>",
            'cost'   => $tarif
            );
          }

        }
        // Début préparation affichage nombre de colis et poids
        $info_plus = ( $shipping_num_boxes>1 ) ? ''. $shipping_num_boxes . ' x ' : '';
        $info_envoi = ' ( '. $info_plus . $shipping_weight . 'kg )    ';
        // Fin préparation affichage nombre de colis
        $this->quotes = array('id' => $this->code,
        'module' => $this->title . $info_envoi,
        'methods' => $methods);
        
        if ($this->tax_class > 0)
          $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

        if (tep_not_null($this->icon))
          $this->quotes['icon'] = tep_image($this->icon,$this->title,40,42,'align="middle"');
          return $this->quotes;

      }else{
        $this->quotes = array('module' => $this->title,
        'error' => MODULE_SHIPPING_MONDIAL_RELAY_ERROR . 'n° : '.$pointsRelais->STAT.' Contactez-nous. Merci !! ');
        return $this->quotes;
      }
    }else{
      return;
    }
  }

avec mes p'tites modifs perso (franco, nombre de colis)

Chrysalide avait mis sous le coude, car le problème des n°de tél. avec / ou . était - je crois - pendant.
Reste aussi la reprise des nombres de colis et poids avant l'édition de ou des étiquettes.

D'solé pour cette fausse alerte W7 et merci à Gnidhal pour son "cours" sur la savonette ! Voilà un lavage de cerveau utile !!

Chti poupon

PS résolu !
Go to the top of the page
 
chrysalide
posté 22 Feb 2012, 12:49
Message #14


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



Il y a une solution beaucoup plus simple.

j'ai gardé pour acquis le fait de passer lors de la requête les infos Ville et poids.

je viens de tester et ces deux infos sont, semblerait il, facultative.

NDLR : en reprenant la doc du webservice Ville est factultative si Code postal est renseigné et poids est facultatif

Malgré la présence d'une fonction de nettoyage du nom de la ville, on n'est pas à l'abri d'une erreur. Plus on passe d'infos plus on a de chance d'avoir des erreurs.

Perso je vire ville et poids de la requête de recherche des points relais dans le module.

il faut donc remplacer

Code
$params = array('Enseigne'     => MODULE_SHIPPING_MONDIAL_RELAY_ENSEIGNE
,'Pays'         => $order->delivery['country']['iso_code_2']
,'Ville'        => accents($order->delivery['city'])
,'CP'           => $order->delivery['postcode']
,'Poids'        => round($shipping_weight*1000));


par

Code
$params = array('Enseigne'     => MODULE_SHIPPING_MONDIAL_RELAY_ENSEIGNE
,'Pays'         => $order->delivery['country']['iso_code_2']
,'CP'           => $order->delivery['postcode']);


et viré la fonction accent au début du module


Tout simplement.


Dans ton code chti_poupon
Code
$this->trop_lourd

ca m'a bien fait rire biggrin.gif


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chti_poupon
posté 22 Feb 2012, 18:01
Message #15


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



+1 @chrysalide
De fait, le code postal suffit pour avoir les points relais de la zone concernant le client.
La suppression du poids est, par contre, plus discutable:
  • Le poids reste affiché pour le client ( et éventuellement 2x14.5kg) : il est prévenu (informé) car autrement il ne le verra jamais (pas non plus en phase confirmation)
  • De fait, MR n'exploite pas, pour le moment, le poids du colis et m'a déjà gaillardement et sans frémir accepté une étiquette à plus de 20kg (c'étaient 2 colis de 10.5kg qui ont fait 1 colis de 19.5kg grâce au poids d'emballage en moins)
Deux conclusions:
  • garder ta modification (car MR semble se mettre peu à peu en conformité avec ses désirs: j'avais un contrat sans signature du client, je les ai eues quelque temps, et maintenant plus.) mais maintenir affichage du poids au client
  • implémenter la modification du poids/nombre de colis dans l'admin-impression de(s) étiquette(s) pour mieux gérer la réalité
Dans ce cas, la méthode quote devient:
Code
  function quote($method = '')
   {
     global $total_weight, $shipping_weight, $shipping_num_boxes;
     //soap
     if($shipping_weight>=0.1)
     {
       global $order, $cart;

   // Début calcul du nombre de colis
           $shipping_num_boxes = 1;
           $shipping_weight = $total_weight;
  
           if (SHIPPING_BOX_WEIGHT >= $shipping_weight*SHIPPING_BOX_PADDING/100) {
             $shipping_weight = $shipping_weight+SHIPPING_BOX_WEIGHT;
           } else {
             $shipping_weight = $shipping_weight + ($shipping_weight*SHIPPING_BOX_PADDING/100);
           }
  
           if ($shipping_weight > $this->trop_lourd) { // Split into many boxes
             $shipping_num_boxes = ceil($shipping_weight/$this->trop_lourd);
             $shipping_weight = $shipping_weight/$shipping_num_boxes;
           }
   // Fin calcul nombre de boîtes
  
       $client = new SoapClient("http://www.mondialrelay.fr/WebService/Web_Services.asmx?WSDL");
      
       $params = array('Enseigne'     => MODULE_SHIPPING_MONDIAL_RELAY_ENSEIGNE
       ,'Pays'         => $order->delivery['country']['iso_code_2']
       ,'CP'           => $order->delivery['postcode']);
       //On crée le code de sécurité
       $code = implode("",$params);
       $code .= MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE;
      
       // On le rajoute aux paramétres
       $params["Security"] = strtoupper(md5($code));
       $pointsRelais = $client->WSI2_RecherchePointRelais($params)->WSI2_RecherchePointRelaisResult;// récupere la liste des points relais
       if($pointsRelais->STAT==0)
       {
         // calcul du tarif
        
         // ajout livraison gratuite
         if ($cart->show_total() >= $this->franco)
         {
           $tarif=0;
         }else{
           // Fin ajout livraison gratuite
           $table = split("[:,]" , MODULE_SHIPPING_MONDIAL_RELAY_TARIF);
           $tarifTrouve=true;
           for ($i = 0; $i < sizeof($table); $i+=2)
           {
             if ($shipping_weight > $table[$i])
               continue;
             if (($shipping_weight < $table[$i]) AND $tarifTrouve)
             {
               $tarif=$table[$i+1];
               $tarifTrouve=false;
             }
           }
           $tarif += $this->frais_fixes;
           $tarif=$tarif*$shipping_num_boxes;
         }
         $methods = array();
         foreach($pointsRelais as $pointRelais)
         {
           if( is_object($pointRelais) && trim($pointRelais->Num) != '' )
           {

             //On crée le code de sécurité
             $code = implode("",$params);
             $code .= MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE;
            
             //On le rajoute aux paramètres
             $params["Security"] = strtoupper(md5($code));
             // Et on effectue la requète
             // $detail_pointrelais = $client->WSI2_DetailPointRelais($params)->WSI2_DetailPointRelaisResult;
            
             $popup_params = array(
             'ens'     => MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL,
             'Num'    => $pointRelais->Num,
             'Pays'   => $pointRelais->Pays
             );
            
             $popup_code = '<'.MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL.'>'.$pointRelais->Num.$pointRelais->Pays.'<'.MODULE_SHIPPING_MONDIAL_RELAY_CLE_PRIVEE_URL.'>';
                    
            
             $security = strtoupper(md5($popup_code));
            
             $link = 'http://www.mondialrelay.com/public/permanent/details_relais.aspx?ens='. MODULE_SHIPPING_MONDIAL_RELAY_MARQUE_URL .'&num='.$pointRelais->Num.'&pays='.$pointRelais->Pays.'&crc='.$security;
            
             $methods[]=array(
             'id'     => $pointRelais->Num . $pointRelais->Pays,
             'title'  => $pointRelais->LgAdr1 ." à  ".$pointRelais->Ville ." ".$pointRelais->CP ." <a onclick=\"window.open ('". $link ."', '', 'height=800, width=450, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');\"><b>Détails</b></a>",
             'cost'   => $tarif
             );
           }

         }
         // Début préparation affichage nombre de colis et poids
         $info_plus = ( $shipping_num_boxes>1 ) ? ''. $shipping_num_boxes . ' x ' : '';
         $info_envoi = ' ( '. $info_plus . $shipping_weight . 'kg )    ';
         // Fin préparation affichage nombre de colis
         $this->quotes = array('id' => $this->code,
         'module' => $this->title . $info_envoi,
         'methods' => $methods);
        
         if ($this->tax_class > 0)
           $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

         if (tep_not_null($this->icon))
           $this->quotes['icon'] = tep_image($this->icon,$this->title,40,42,'align="middle"');
           return $this->quotes;

       }else{
         $this->quotes = array('module' => $this->title,
         'error' => MODULE_SHIPPING_MONDIAL_RELAY_ERROR . mr_err_code($pointsRelais->STAT).' Contactez-nous. Merci !!' );
         return $this->quotes;
       }
     }else{
       return;
     }
   }
  
   function check()
   {
     $retourdb = tep_db_query("select configuration_value FROM ".TABLE_CONFIGURATION." WHERE configuration_key= 'MODULE_SHIPPING_MONDIAL_RELAY_STATUS' ");
     $this->checked = tep_db_num_rows($retourdb);
     return $this->checked;
   }


et la fonction accents est remplacée par :
Code
function mr_err_cod($code_mr)
     {
       $affiche_err_mr = array(
       "0" => "Opération effectuée avec succès",
       "1" => "Enseigne invalide",
       "2" => "Numéro d'enseigne vide ou inexistant",
       "3" => "Numéro de compte enseigne invalide",
       "4" => "Erreur MR 4",
       "5" => "Numéro de dossier enseigne invalide",
       "6" => "Erreur MR 6",
       "7" => "Numéro de client enseigne invalide",
       "8" => "Mot de passe ou hashage invalide",
       "9" => "Ville non reconnu ou non unique",
       "10" => "Type de collecte invalide",
       "11" => "Numéro de Relais de Collecte invalide",
       "12" => "Pays de Relais de collecte invalide",
       "13" => "Type de livraison invalide",
       "14" => "Numéro de Relais de livraison invalide",
       "15" => "Pays de Relais de livraison invalide",
       "16" => "Code pays invalide",
       "17" => "Adresse invalide",
       "18" => "Ville invalide",
       "19" => "Code postal invalide",
       "20" => "Poids du colis invalide",
       "21" => "Taille (Longueur + Hauteur) du colis invalide",
       "22" => "Taille du Colis invalide",
       "23" => "Erreur MR 23",
       "24" => "Numéro d'expédition ou de suivi invalide",
       "25" => "Erreur MR 25",
       "26" => "Temps de montage invalide",
       "27" => "Mode de collecte ou de livraison invalide",
       "28" => "Mode de collecte invalide",
       "29" => "Mode de livraison invalide",
       "30" => "Adresse (L1) de l'expéditeur invalide"
       );
       return strtr($code_mr,$affiche_err_mr);
     }


Grâce à tes données te pour répondre à Gnidhal peaufineur de srvice.

Chti poupon

PS en cas de publication d'un zip, penser à intégrer ce détail pour l'affichage correct du relais
Go to the top of the page
 
Gnidhal
posté 22 Feb 2012, 18:17
Message #16


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Citation (chti_poupon @ 22 Feb 2012, 18:01) *
Grâce à tes données te pour répondre à Gnidhal peaufineur de srvice.

Good Job!
En peaufineur extrême j'aurais bien proposé une version reliée à une bdd des communes de France et de Belgique avec le CP. Mais ça se passe plus dans la partie création de compte (en évitant les mauvaises communes et erreurs de CP) et ça implique de travailler en ajax si on veut que ça soit ergonomique.
Donc intégration d'un framework jQuery sachant gérer l'ajax ou d'une bibliothèque ajax séparée. Un autre monde quoi. Un jour pour une autre version osC je tenterai de faire une contrib pour ça....



--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
chrysalide
posté 22 Feb 2012, 18:36
Message #17


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



Salut Chti_poupon,

Ce que je propose ne concerne que la requête SOAP RecherchePointRelais qui ne fait de sortir la liste des relais par rapport à une adresse donnée.

le fait de ne pas transemettre le poids lors de la requete SOAP RecherchePointRelais ne change rien sur le reste de la mécanique du module.

Le but n'est de transmettre que les infos utiles pour une proposition de relais.

D'après mes souvenirs et surtout avoir échangé avec un dev de chez MR, j'avais dans l'espoir que MR puisse limiter ses propositions de relais aux seuls relais XL qui acceptent la délivrance des colis de plus de 20 Kg si la variable poids transmise lors de la equete SOAP RecherchePointRelais dépasse cette limite. Mais a l'heure actuelle c'est loin d'être le cas. confused.gif


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chrysalide
posté 22 Feb 2012, 18:45
Message #18


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



Citation (Gnidhal @ 22 Feb 2012, 19:17) *
Citation (chti_poupon @ 22 Feb 2012, 18:01) *
Grâce à tes données te pour répondre à Gnidhal peaufineur de srvice.

Good Job!
En peaufineur extrême j'aurais bien proposé une version reliée à une bdd des communes de France et de Belgique avec le CP. Mais ça se passe plus dans la partie création de compte (en évitant les mauvaises communes et erreurs de CP) et ça implique de travailler en ajax si on veut que ça soit ergonomique.
Donc intégration d'un framework jQuery sachant gérer l'ajax ou d'une bibliothèque ajax séparée. Un autre monde quoi. Un jour pour une autre version osC je tenterai de faire une contrib pour ça....



je crois qu'il existe déja des trucs tout fait pour ça sur lesquels se reposer ou s'inspirer. Ca fait un moment que je me dis qu'il faut que je mis colle pour l'intégrer à mon usine a gaz.

tu peux ajouter l'Espagne aussi, MR délivre aussi la péninsule ibérique et au même prix que la France.


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chti_poupon
posté 22 Feb 2012, 20:27
Message #19


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Citation
D'après mes souvenirs et surtout avoir échangé avec un dev de chez MR, j'avais dans l'espoir que MR puisse limiter ses propositions de relais aux seuls relais XL qui acceptent la délivrance des colis de plus de 20 Kg si la variable poids transmise lors de la equete SOAP RecherchePointRelais dépasse cette limite. Mais a l'heure actuelle c'est loin d'être le cas.

Pas d'accord ! Si tu parles des relais XL (je n'ai pas d'autres infos) le service de proximité s'envole pour le client : c'est comme si tu l'envoyais au centre de Tri pour la Poste. Sauf moins cher, je ne vois pas l'intérêt ni économique, ni écologique, ni en temps passé.

Le but de l'ajustement d poids n'est pas tant de faire passer 2 colis de 18 kg, mais bel et bien de payer pour 14.6kg et non pas 15.2 kg (tranche supérieure) sous prétexte que le calcul de la tare dans osC est paramétré "à la louche". Il y a bien qqch à faire ds l'admin.
A table !
Go to the top of the page
 
chrysalide
posté 22 Feb 2012, 21:48
Message #20


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



oui mais a chacun sa problématique commerciale et de la nature du ou des produits expédiés.

Là c'est a chacun d'adapter le module en fonction de ses besoins et ses problématiques

Par contre je crois que tu fais une confusion, la formulation définitive des conditions d'expédition ne se font pas au sein du module mais via l'interface de gestion MR de l'admin.

Donc l'absence de poids lors de la requete SOAP RecherchePointRelais n'influence en rien les conditions tarifaires de tes envoies.

cette requête ne fait que sortir un nb x de point relais correspondant a un code postal, il n'y a aucun engagement commercial.

Pour les problématique de poids/tare.

perso, j'ai ajouté un champs supplémentaire dans la table orders (weightmr) avec un champs a renseigner (si besoin) dans l'édition de la commande.

Dans mondiarelayadmin j'ai conditionné l'utilisation de la valeur renseignée dans le champs weightmr en lieu et place du poids calculé par Osc pour la création du numéro de tracking.

Ce qui me permet d'être sure d'être facturé systématiquement dans la tranche réelle correspondant au poids de mon colis.

Personnellement, j'ai le poids de mes produits est renseigné "près a être expédié" avec suremballage, etc.
Quand le client commande il est facturé en fonction du poids de commande calculé et je suis facturé en fonction du poids mesuré.

Ce mode de fonctionnement me permet de facturé le client dans la bonne tranche dans 95% des cas (à la louche), les 5% restant sont souvent des frais de port surfacturés au client à cause de 100/200g de surévaluation du poids par Osc.

Mais là c'est une façon qui convient a mon fonctionnement et a ma stratégie commerciale. Après chacun adapte en fonction de ses besoins.


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chti_poupon
posté 23 Feb 2012, 13:03
Message #21


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



@chrysalide
Citation
Donc l'absence de poids lors de la requete SOAP RecherchePointRelais n'influence en rien les conditions tarifaires de tes envoies.

je me serai mal exprimé. le client sait de toutes façons le poids osC de son colis
Citation
perso, j'ai ajouté un champs supplémentaire dans la table orders (weightmr) avec un champs a renseigner (si besoin) dans l'édition de la commande.

Dans mondiarelayadmin j'ai conditionné l'utilisation de la valeur renseignée dans le champs weightmr en lieu et place du poids calculé par Osc pour la création du numéro de tracking.

Ce qui me permet d'être sure d'être facturé systématiquement dans la tranche réelle correspondant au poids de mon colis.

Ben c'est çà qu'on demande d'intégrer dans la contrib : un moyen de mettre le vrai poids avant la génération/impression de l'étiquette. Mais est-ce bien indispensable de le conserver en BDD ? L'étiquette émise, ce poids est conservé dans la base MR, et lisible, non?
Citation
il n'y a aucun engagement commercial.

Ma digression ne voulait que dire que MR passe des contrats avec des clauses restrictives qu'elle n'applique que petit à petit, peut-être pour nous appâter !
Chti poupon
Go to the top of the page
 
chrysalide
posté 23 Feb 2012, 15:31
Message #22


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1085
Inscrit : 29-November 04
Membre no 3935



Citation (chti_poupon @ 23 Feb 2012, 14:03) *
Ben c'est çà qu'on demande d'intégrer dans la contrib : un moyen de mettre le vrai poids avant la génération/impression de l'étiquette.

Fallait demander ! biggrin.gif

Citation (chti_poupon @ 23 Feb 2012, 14:03) *
Mais est-ce bien indispensable de le conserver en BDD ? L'étiquette émise, ce poids est conservé dans la base MR, et lisible, non?


Tracabilité ! je préfère garder ma trace que de me fier à la trace d'un autre ! <- elle est chelou cette phrase biggrin.gif


--------------------
Petit guide pour résoudre tout vos problèmes avec Oscommerce

FORK perso a base de MS2 RC1 FR avec deux trois contribs + pas mal de dev perso + beaucoup (trop ?) d'Ajax + un peu mais pas trop de flash + virer la structure tableau + de feuille de style + pas mal de <DIV id="****">.......... en gros ca ressemble plus trop a l'originale
Go to the top of the page
 
chti_poupon
posté 24 Feb 2012, 18:51
Message #23


Ceinture noire OSC
Icône de groupe

Groupe : TechDev
Messages : 2757
Inscrit : 9-September 08
Lieu : Douai
Membre no 22915



Citation
Fallait demander ! :D

:blink: Hum ! ici pour la sauvegarde

çççççççççççççççççççççççççççççççççç
:D Stock pour éviter le traçage de tes tracas
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 19th March 2024 - 03:30
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)