NextDom/plugin-veolia_eau

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

Closed this issue · 7 comments

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:

  • Version Jeedom: 4.3.15
  • Platform: Debian (VM Proxmox)
  • Version du Plugin: 2022-02-28

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

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

Bonjour @darghorn

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

Merci

Ok je m'en occupe

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.

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

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

Merci

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

Bon boulot !