Viewing 11 replies - 1 through 11 (of 11 total)
  • Bonjour,

    Comme je vous le disais par email, c’est très étonnant car ces points relais ne me sont pas retournés de mon c?té.

    Auriez-vous un contrat spécifique ?
    Je vous recontacte par email afin de voir cela directement avec vos détails de compte.

    Cordialement.

    Thread Starter tristanleboss

    (@tristanleboss)

    Je pense qu’il y a un bug de votre c?té.

    Ces points relais sont les mêmes qui ressortent sur le site officiel Mondial Relay pour 69003 Lyon. Le Call Center est probablement le plus gros point relais du 3ème…

    https://www.mondialrelay.fr/trouver-le-point-relais-le-plus-proche-de-chez-moi/

    Thread Starter tristanleboss

    (@tristanleboss)

    C’est le code dans inc/front/pickup/mondial_relay/mondial_relay_pickup_widget.php au sein de la fonction get_pickup_point qui n’est pas bon.

    Apparemment, dans le foreach le code s’attend à avoir des ‘0000’ dans les index [‘1’] et [‘3’] du tableau string mais ?a n’arrive jamais. Si je fais un bon vieux var_dump de la variable $one_pickup, j’ai juste des variables vides quand le point relais n’est pas ouvert.

    ["Horaires_Lundi"]=>
      object(stdClass)#41709 (1) {
        ["string"]=>
        array(4) {
          [0]=>
          string(0) ""
          [1]=>
          string(0) ""
          [2]=>
          string(0) ""
          [3]=>
          string(0) ""
        }
      }
      ["Horaires_Mardi"]=>
      object(stdClass)#41708 (1) {
        ["string"]=>
        array(4) {
          [0]=>
          string(4) "1000"
          [1]=>
          string(4) "1800"
          [2]=>
          string(0) ""
          [3]=>
          string(0) ""
        }
      }

    Bonjour,

    Quelle version de notre extension utilisez-vous ?
    Je n’arrive pas à reproduire le problème …

    https://ibb.co/ykXLW3y
    https://ibb.co/mqqfpqC

    Je vous ai contacté par email, cela sera plus simple et plus efficace ??

    Thread Starter tristanleboss

    (@tristanleboss)

    Je ne re?ois plus vos mails sur mon adresse protonmail.com depuis un certain temps (pas dans mes spams non plus).

    Intéressant que le problème ne soit pas reproductible chez vous. J’ai bien la dernière version 1.8.6

    Le point d’entrée est pourtant le même dans les 2 cas vu qu’il est en dur dans le plugin… Peut-être que la version de PHP et donc du SoapClient utilisé pour les appels API Mondial Relay a un impact sur le résultat… Ou alors, ce sont les identifiants qui font différer la version de l’API chez eux mais le compte Mondial Relay que j’utilise est un compte des plus banals mais très récents.

    Parceque, concrètement, il n’y a pas mille possibilités pour que je ne re?oive les ‘0000’… Idem pour le problème de la profondeur avec décimale.

    Thread Starter tristanleboss

    (@tristanleboss)

    Le problème est assez fantastique.

    J’ai modifié l’appel au SOAPClient dans la méthode get_pickup_point du fichier inc\admin\classes\mondial_relay\mondial_relay_api_helper.php pour pouvoir utiliser les fonctions de débogage du SOAPClient et je ne vois absolument pas comment le code du plugin qui affiche les horaires peut marcher avec le retour de l’API.

    Dans le retour brut XML de l’API, j’ai bien <Horaires_Lundi><string /><string /><string /><string /></Horaires_Lundi><Horaires_Mardi><string>1000</string><string>1800</string><string /><string /></Horaires_Mardi> qui implique bien, que dans l’objet PHP, j’ai des chaines de caractères vides et non une série de 4 zéros comme l’attend le code qui affiche les horaires.

    Ce code, dans la méthode get_pickup_point du fichier inc/front/pickup/mondial_relay/mondial_relay_pickup_widget.php, ne laisse aucune ambigu?té : il attend bien ‘0000’ soit dans l’index 1, soit dans l’index 3, il y a même une égalité stricte. C’est bien ?a qui va permettre de faire disparaitre un jour (continue) s’il n’a aucun horaire ou une plage horaire (if) si elle est vide.

     foreach ($days as $day_num => $one_day) {
                    if ('0000' === $one_pickup->$one_day->string['1']) continue;
    
                    if ('0000' === $one_pickup->$one_day->string['3']) {
                        $additional_pickup['opening_time'][] = wms_display_value(substr_replace($one_pickup->$one_day->string['0'], ':', 2, 0).' - '.substr_replace($one_pickup->$one_day->string['1'], ':', 2, 0));
                    } else {
                        $additional_pickup['opening_time'][] = wms_display_value(substr_replace($one_pickup->$one_day->string['0'], ':', 2, 0).'-'.substr_replace($one_pickup->$one_day->string['1'], ':', 2, 0).' - '.substr_replace($one_pickup->$one_day->string['2'], ':', 2, 0).'-'.substr_replace($one_pickup->$one_day->string['3'], ':', 2, 0));
                    }
                }
    

    Avez-vous la même chose ? Si vous avez bien des <string>0000</string> au lieu de mes <string /> c’est que l’API se comporte différement selon les identifiants…

    Paramètres envoyés (en plus de Enseigne et Security) :

    ["Pays"]=>
      string(2) "FR"
      ["Ville"]=>
      string(0) ""
      ["CP"]=>
      string(5) "69003"
      ["Poids"]=>
      string(3) "100"
      ["NombreResultats"]=>
      string(2) "10"

    Voici le code dirty pour récupérer toutes les données brutes :

    $client = new SoapClient(self::API_URL, array('trace' => 1));
    $result = $client->WSI4_PointRelais_Recherche($params);
    
    echo "====== REQUEST HEADERS =====" . PHP_EOL;
    var_dump($client->__getLastRequestHeaders());
    echo "========= REQUEST ==========" . PHP_EOL;
    var_dump($client->__getLastRequest());
    echo "========= RESPONSE HEADERS =========" . PHP_EOL;
    var_dump($client->__getLastResponseHeaders());
    echo "========= RESPONSE =========" . PHP_EOL;
    var_dump($client->__getLastResponse());
    echo "========= RESPONSE OBJECT =========" . PHP_EOL;
    var_dump($result->WSI4_PointRelais_RechercheResult);
    var_dump($params, phpversion());
    die;
    • This reply was modified 2 years, 10 months ago by tristanleboss.

    Bonjour,

    Je vous confirme bien avoir des “0000”
    https://ibb.co/b5vdxpr

    Ce qui se vérifie d’ailleurs dans leur documentation : https://ibb.co/WkzvjhJ

    Thread Starter tristanleboss

    (@tristanleboss)

    Pour être bien certain, j’ai même retesté avec le logiciel SoapUI en utilisant exactement les mêmes paramètres que le plugin et je n’ai pas les zéros… https://ibb.co/SKJ3hhW

    Je vois vraiment pas pourquoi vous les auriez… à part que les identifiants conditionneraient une version du webservice.

    Après, moi, je ne comprends pas la documentation comme vous. Pour moi, “Tableau de chaines de caractères de dimension 4” veut dire que le tableau a une dimension de 4 (ce qui est le cas) et ils ne donnent aucune info sur le contenu réel des chaines de caractères. D’ailleurs, on parle plus de dimension pour un tableau et de longueur pour une chaine de caractères.

    Je vais essayer d’avoir des infos auprès de Mondial Relay car bon, ?a rend le plugin inutilisable pour moi et, probablement, pour d’autres.

    • This reply was modified 2 years, 10 months ago by tristanleboss.
    • This reply was modified 2 years, 10 months ago by tristanleboss.
    Thread Starter tristanleboss

    (@tristanleboss)

    Question bête mais vous utilisez des identifiants de PROD pour vos tests ? Si ?a se prouve, leurs identifiants de tests ne tombent pas sur les mêmes versions que les versions de PROD.

    Thread Starter tristanleboss

    (@tristanleboss)

    TROUVé !

    Vous utilisez les identifiants de test (BDTEST13) pour vos développements / tests….

    Malheureusement, le webservice ne se comporte pas de la même fa?on que les serveurs de production ! Quelle merde de la part de Mondial Relay !

    Je viens de tester exactement la même requête avec SOAP UI en changeant seulement les paramètres Enseigne et Security et, en effet, les points relais ne sont pas exactement les mêmes et surtout, j’ai bien les ‘0000’ => https://ibb.co/4VCRvsW

    Bon, du coup, suffit de changer les === '0000' par des === '0000' || === '' pour que le plugin fonctionne aussi bien avec les identifiants de test que des identifiants de production.

    ?a doit être exactement le même soucis avec l’histoire de la longueur avec des décimales… le webservice de test doit pas checker que c’est un integer alors que sur la production la vérification doit être faite.

    • This reply was modified 2 years, 10 months ago by tristanleboss.

    Bonjour

    Je viens de faire une nouvelle version qui devrait corriger tous les problèmes.
    Je vous laisse me confirmer que tout est bon ?

    Cordialement,
    Alexandre.

Viewing 11 replies - 1 through 11 (of 11 total)
  • The topic ‘Problème affichage horaires’ is closed to new replies.