NextDom / plugin-veolia_eau

Plugin Jeedom/NextDom permettant de gérer le télé-relevé Veolia
https://nextdom.github.io/plugin-veolia_eau/
GNU General Public License v2.0
6 stars 22 forks source link

Récupération impossible des données de "toutsurmoneau.fr" (Suez) - Erreur : "PHPExcel_Worksheet::$_invalidCharacters" #90

Closed Xandr3 closed 1 year ago

Xandr3 commented 1 year ago

Description

Lors de la récupération des données sur le site "toutsurmoneau.fr", de Suez, la récupération génère l'erreur : "Erreur sur la fonction cron du plugin : Access to undeclared static property: PHPExcel_Worksheet::$_invalidCharacters".

Plusieurs signalements sur le forum de Jeedom :

Etapes à reproduire (pour les bugs)

  1. Configurer les informations d'authentification et attendre la récupération des données.

Contexte:

La page d'authentification de "toutsurmoneau.fr" a évolué (cf. le code source d’une archive : http://web.archive.org/web/20230120072248/https://www.toutsurmoneau.fr/). Les champs « identifiants » et « mots de passe » ont évolué, ainsi que la partie "token".

Environnement:

Tentative de solution

J'ai tenté de récupérer un token dans le code source qui apparait pour le captcha via regex (preg_match_all('/csrfToken.u0022.u003A.u0022(.*).u0022,.u0022targetUrl/', $html, $matches); $token = $matches[1][0];), mais cela ne fonctionne pas de mon côté : soit je ne prends pas les bonnes informations, soit ce token ne sert à rien (fausse route).

darghorn commented 1 year ago

Solution trouvée par un utilisateur sur la communauté Jeedom :

Suez a modifié partiellement son site toutsurmoneau. Le token est dorénavant présent dans windows.tsme_data sous le nom csrfToken. En attendant une correction du plugin, j’ai ajouté ces quelques lignes de code (désolé pour la qualité du code) dans le fichier veolia_eau/core/class/veolia_eau_process.class.php après la ligne suivante :

$token = $html->find(‹ input[name= ›.$tokenFieldName.’]’, 0)->value;

N’oubliez pas de sauvegarder le fichier veolia_eau_process.class.php avant de le modifier.

Cette modification fonctionne sur mon jeedom depuis quelques jours quand le site toutsurmoneau est opérationnel.

      // Ajout : Extraction token pour le nouveau site toutsurmoneau
    if ($website == 4) {
    preg_match("/csrfToken.*,/", $response, $matches);
    $token = implode($matches);
        $token = str_ireplace("\u002D","-",$token);
        $token = str_ireplace("csrfToken\u0022\u003A\u0022","",$token);
        $token = str_ireplace("\u0022,","",$token);
        log::add('veolia_eau', 'debug', 'Token: '.$token);

    }
    // Fin Ajout toutsurmoneau
Gis70 commented 1 year ago

Bonjour @darghorn

Te serait il possible de faire une PR ? que j'intègrerais dans le plugin.

Merci

darghorn commented 1 year ago

Ok je m'en occupe

Xandr3 commented 1 year ago

Bonjour @darghorn,

Merci pour cette résolution :). Je n'aurais pas pensé convertir comme tu l'as fait certains blocs ;)

Par contre, dans la condition $website == 4, il faudrait inclure les sites suivants stp : 4, 7, 8, 10, 11, 12 et 13. Il semble que le site "www.stephanoise-eaux.fr" (ID : 9) ait gardé l'ancienne version.

Merci.

P.-S. Le bloc suivant est toujours d'actualité ? $datas = array( 'tsme_user_login[_username]='.urlencode($this->getConfiguration('login')), 'tsme_user_login[_password]='.urlencode($this->getConfiguration('password')) );

Car sur la nouvelle version, cela semble être "username" "password" uniquement.

darghorn commented 1 year ago

J'ai ajouté les conditions pour les autres websites, par contre je n'ai pas le temps de voir les impacts si on supprime ce bloc désolé

Gis70 commented 1 year ago

Corrigé par #92 en BETA Si tous va bien je passerai en stable d'ici 2semaines. Vous pouvez communiquer sur le forum Jeedom ?

Merci

Xandr3 commented 1 year ago

Merci pour ces changements. Effectivement, pas besoin de mettre à jour les champs input pour "username" et "password".

Bon boulot !