<?php //Attente requête auprès du site AVIS INSEE define('AVIS_TIMEOUT', 10); //Délai après erreur define('AVIS_RETRY_DELAY', 300); define('AVIS_FICHIER_ERREUR', PATH_DATA.'/log/aviserreur.lock'); require_once 'common/curl.php'; $siret = $_REQUEST['siret']; function avis_erreurcpt($action) { switch($action){ case 'plus': if (file_exists(AVIS_FICHIER_ERREUR)){ $handle = fopen(AVIS_FICHIER_ERREUR, 'r'); $data = fgetcsv($handle, '1000', ';'); $date_creation = $data[0]; $date_modification = time(); $nb = $data[2]; fclose($handle); } else { $date_creation = time(); $date_modification = time(); $nb = 0; } $nb++; $handle = fopen(AVIS_FICHIER_ERREUR, 'w'); fputcsv($handle, array($date_creation, $date_modification, $nb), ';'); fclose($handle); break; case 'raz': $handle = fopen(AVIS_FICHIER_ERREUR, 'w'); $date_creation = time(); $date_modification = time(); $nb = 0; fputcsv($handle, array($date_creation, $date_modification, $nb), ';'); fclose($handle); break; } } function avis_nberreur() { if (file_exists(AVIS_FICHIER_ERREUR)){ $handle = fopen(AVIS_FICHIER_ERREUR, 'r'); $data = fgetcsv($handle, '1000', ';'); $nb = $data[2]; fclose($handle); } else { $nb = 1; } return $nb; } function avis_erreur() { if (file_exists(AVIS_FICHIER_ERREUR)) { $handle = fopen(AVIS_FICHIER_ERREUR, 'r'); $data = fgetcsv($handle, '1000', ';'); $date_creation = $data[0]; $date_modification = $data[1]; $nb = $data[2]; fclose($handle); } else { $date_creation = 0; $date_modification = 0; } if ($nb>0 && $date_modification<$date_creation+AVIS_RETRY_DELAY){ return true; } else { return false; } } function avis_erreurmsg(){ //Affichage message d'erreur echo '<h3>Le site partenaire n\'a pas répondu correctement ou est '. 'indisponible. Merci d\'essayer à nouveau ultérieurement.</h3>'; } function avis_mailerreur() { //Envoi mail erreur require_once 'mail/mail.php'; sendMail( "AVIS INSEE - (Date :".date("d")."/".date("m")."/".date("Y").")", 'Accès impossible au site de situation INSEE : '. $_REQUEST['siren'].EOL. 'http://avis-situation-sirene.insee.fr'.EOL. 'pour login '.$_SESSION['tabInfo']['login'].EOL , //From array( 'email' => 'contact@scores-decisions.com', 'name' => 'Contact', ), //TO array( 0 => array( 'email' => 'support@scores-decisions.com', 'name' => 'Support', ) ) ); } /** * Récupére l'avis de situtation à partir du site au format pdf * * @param integer $siret Siren ou Siret de l'établissment * @param string $format Format 'pdf' ou 'array' * @param boolean $force True aller obligatoirement le chercher à l'insee * @return string Le PDF demandé */ function getAvisSituation($siret, $format='pdf', $force=0) { $force=$force*1; $date=date('Ymd'); $siren=trim(substr($siret,0,9)); $nic=trim(substr($siret,9,5)); $fichier = PATH_SITE.'/cache/avis-'.$siren.'-'.$nic.'-'.$date.'.pdf'; if ($format!='pdf') return 'Format pdf uniquement'; if ($force==0 && file_exists($fichier)) { // On délivre l'avis en base return file_get_contents($fichier); } else { /** Initialisation de la session sur le site de l'Insee **/ $url = 'http://avis-situation-sirene.insee.fr/avisitu/jsp/avis.jsp'; //http://avis-situation-sirene.insee.fr/avisituV2/jsp/avis.jsp'; $referer = $cookie = ''; $page = getUrl($url, $cookie, '', $referer, false, 'avis-situation-sirene.insee.fr', '', AVIS_TIMEOUT); //Code en 4xx ou 5xx signifie une erreur du serveur $codeN = floor($page['code']/100); if($codeN==4 || $codeN==5) { return false; } else { $referer = $url; $body = $page['body']; $serviceDispo = true; //On doit retrouver sur la page /* <form name="demForm" method="post" action="/avisitu/IdentificationListeSiret.do */ if (preg_match("/<form name=\"demForm\" method=\"post\" action=\"\/avisitu\/IdentificationListeSiret.do/Uis", $body, $matches)) { $fp = @fopen($fichier, "a"); @fwrite($fp, $body); @fclose($fp); $cookie = $page['header']['Set-Cookie']; usleep(round(rand(500000,2000000))); $dep=$depActif=''; if ($nic=='') $crit='S'; // l'établissement siège else $crit=''; // établissement particulier, saisissez le NIC /* $crit='T'; // tous les établissements de l'entreprise $crit='T'; // tous les établissements de l'entreprise du département $dep $crit='A'; // tous les établissements actifs de l'entreprise $crit='A'; // tous les établissements actifs de l'entreprise du département $depActif */ //Post du formulaire $url = 'http://avis-situation-sirene.insee.fr/avisitu/IdentificationListeSiret.do'; //$url='http://avis-situation-sirene.insee.fr/avisituV2/IdentificationDetailEtab.do'; $post = array( 'siren' => $siren, 'critere' => $crit, // S pour le siège ou vide avec un NIC !!! 'nic' => $nic, 'departement' => $dep, 'departement_actif' => $depActif, 'bSubmit' => 'Valider'); $page = getUrl($url, $cookie, $post, $referer, false, 'avis-situation-sirene.insee.fr', '', AVIS_TIMEOUT); $body = $page['body']; $fp=@fopen($fichier, "a"); @fwrite($fp, $body); @fclose($fp); if (preg_match("/<h3>Fiche établissement<\/h3>/Uis", $body, $matches))//<li class="ongletActif">établissement</li> $tabInfos['fiche']='etab'; if (preg_match('/<div class="TitreGauche">(.*)<br\/>/Uis', $body, $matches)) { $tabInfos['raiSoc']=trim($matches[1]); } if (preg_match("/Dernière mise à jour : (.*)<\/div>/Uis", $body, $matches)) $tabInfos['dateMaj']=trim($matches[1]); $s1=substr($siren,0,3); $s2=substr($siren,3,3); $s3=substr($siren,6,3); if (preg_match('/<div class="TitreDroite">(?:.*)('.$s1.'(?:.*)'.$s2.'(?:.*)'.$s3.')(?:.*)('.$nic.')(?:.*)<\/div>/Uis', $body, $matches)) { $tabInfos['siren'] = trim($matches[1]); $tabInfos['nic'] = trim($matches[2]); } if (preg_match('/<label id="labelFiche">Etat : <\/label>(.*)depuis le(.*)<\/p>/Uis', $body, $matches)) { $tabInfos['etat'] = trim($matches[1]); $tabInfos['dateEtat']= trim($matches[2]); } if (preg_match('/<label id="labelFiche">Catégorie d\'établissement : <\/label>(.*)<\/p>/Uis', $body, $matches)) { $tabInfos['typeEtab']= trim($matches[1]); } $tabAdresse=array(); if (preg_match('/<label id="labelFiche">Adresse d\'implantation : <\/label>(?:.*)<ul id="adresse">(.*)<\/ul>/Uis', $body, $matches)) { $strTmp=trim($matches[1]); $tabTmp=explode('</li>', $strTmp); foreach ($tabTmp as $i=>$strTmp) $tabAdresse[$i]=trim(str_replace('<li>','',$strTmp)); } if (preg_match('/<label id="labelFiche">(?:.*)Catégorie juridique :(?:.*)<\/label>(.*) - (.*)<\/p>/Uis', $body, $matches)) { $tabInfos['fjCod']= trim($matches[1]); $tabInfos['fjLib']= trim($matches[2]); } if (preg_match('/<label id="labelFiche">Activité principale exercée :(?:.*)<\/label>(.*) - (.*)<\/p>/Uis', $body, $matches)) { $tabInfos['nafCod']=trim($matches[1]); $tabInfos['nafLib']=trim($matches[2]); } if (preg_match('/<label id="labelFiche">(?:.*)Tranche d'effectif(.*)<\/label>(.*)<\/p>/Uis', $body, $matches)) { $tabInfos['effPeriode']=trim($matches[1]); $tabInfos['effTranche']=trim($matches[2]); } $strCsv=$siren.';'.$nic.';'.$tabInfos['fiche'].';'.$tabInfos['dateMaj'].';'. $tabInfos['siren'].';'.$tabInfos['nic'].';'.$tabInfos['raiSoc'].';'. $tabInfos['etat'].';'.$tabInfos['dateEtat'].';'.$tabInfos['fjCod'].';'.$tabInfos['fjLib'].';'. $tabInfos['nafCod'].';'.$tabInfos['nafLib'].';'.$tabInfos['effPeriode'].';'. $tabInfos['effTranche'].';'. $tabInfos['typeEtab'].';'.@implode(';',@$tabAdresse). ";\n"; $fp=@fopen(PATH_LOGS."avis.csv", "a"); @fwrite($fp, $strCsv); @fclose($fp); // $body contient l'avis de situation au format html $tabErreurs=array(); if (preg_match('/name="erreurs" value="(.*)" class="erreurText" readonly/Ui', $body, $matches1) || preg_match('/name="erreurs_bis" value="(.*)" class="erreurTextBis" readonly/Ui', $body, $matches2)) { $tabErreurs[]=@$matches1[1]; $tabErreurs[]=@$matches2[1]; die('<font color="red">ERREUR '.utf8_encode(implode(' ', $tabErreurs)).'</font>'); // Gérer le retour d'une erreur } usleep(round(rand(500000,1000000))); if ($format=='pdf') { $referer = $url; $url = 'http://avis-situation-sirene.insee.fr/avisitu/AvisPdf.do'; //$url='http://avis-situation-sirene.insee.fr/avisituV2/AvisPdf.do'; $post = array( 'siren'=>$siren, 'nic'=>$nic, 'bSubmit'=>'Avis+de+Situation' ); $page = getUrl($url, $cookie, $post, $referer, false, 'avis-situation-sirene.insee.fr', '', AVIS_TIMEOUT); $body = $page['body']; $fp = @fopen($fichier, "w"); @fwrite($fp, $body); @fclose($fp); } // Fin format PDF } else { $body = false; } return $body; } // Fin erreur initialisation } // Fin fichier disponible } // ==> Start if (!avis_erreur()) { avis_erreurcpt('raz'); $body = getAvisSituation($siret, 'pdf', 1); if($body !== false) { header("Pragma: public"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: must-revalidate"); header("Content-type: application/pdf"); header("Content-Length: ".strlen($body)); header('Content-disposition: inline; filename="avis-'.$siret.'.pdf"'); header("Accept-Ranges: ".strlen($body)); echo $body; $client = new SoapClient(null, array( 'trace' => 1, 'soap_version' => SOAP_1_1, 'location' => WEBSERVICE_URL, 'uri' => WEBSERVICE_URI, 'login' => $_SESSION['tabInfo']['login'], 'password' => $_SESSION['tabInfo']['password'])); $O = $client->setLog('avis_situation'.$vue, $siret, 0, $option); } else { avis_erreurcpt('plus'); avis_erreurmsg(); } } else { if (avis_nberreur()==5){ avis_mailerreur(); } avis_erreurcpt('plus'); avis_erreurmsg(); }