dataPath = SECURE_STORAGE; /** * Define path where XML cache file are store */ $this->cachePath = ''; } /** * Send XML Request * We have some problem to use SOAP so we use CURL * @return string XML Response */ protected function getProduitsXML() { $xmlStr = ''; $env = 'PRD'; //Construct the request $xml = new SimpleXMLElement(''); $emetteur = $xml->addChild('emetteur'); $emetteur->addChild('code_abonne', $this->config[$env]['USER']); $emetteur->addChild('mot_passe', $this->config[$env]['PASS']); //Set Command ID $emetteur->addChild('reference_client', 'G'.$this->idCommande); $code_requete = $emetteur->addChild('code_requete'); $code_requete->addChild('type_profil', 'A'); $code_requete->addChild('origine_emetteur', 'IC'); // C = Commande de documents $code_requete->addChild('nature_requete', 'C'); $code_requete->addChild('type_document', $this->typeCommande); $code_requete->addChild('type_requete', 'S'); // S = Simple $mode_diffusion = $code_requete->addChild('mode_diffusion'); // Mode de diffusion : C = Courrier, T = Téléchargement, M = Mail, XL = XML if ($this->vecteur=='XL' && $this->option=='') { //On ajoute tout les types de diffusions pour $vecteur = XL $mode_diffusion->addChild('mode')->addAttribute('type', 'C'); $mode_diffusion->addChild('mode')->addAttribute('type', 'T'); } $mode_diffusion->addChild('mode')->addAttribute('type', $this->vecteur); $code_requete->addChild('media', 'WS'); $commande = $xml->addChild('commande'); $commande->addChild('num_siren', $this->siren); // Commande de documents : bilan saisie ou bilan complet if ( ($this->typeCommande=='BS' || $this->typeCommande=='BI') && count($this->option)>0 ) { $commande->addChild('greffe',$this->option['greffe']); $commande->addChild('dossier_millesime',$this->option['dossier_millesime']); $commande->addChild('dossier_statut',$this->option['dossier_statut']); $commande->addChild('dossier_chrono',$this->option['dossier_chrono']); $commande->addChild('num_depot',$this->option['num_depot']); $commande->addChild('date_cloture', $this->option['date_cloture']); } // Commande de documents : actes elseif ( $this->typeCommande=='AC' && count($this->option)>0 ) { $commande->addChild('greffe',$this->option['greffe']); $commande->addChild('dossier_millesime',$this->option['dossier_millesime']); $commande->addChild('dossier_statut',$this->option['dossier_statut']); $commande->addChild('dossier_chrono',$this->option['dossier_chrono']); $commande->addChild('num_depot',$this->option['num_depot']); $liste_actes = $commande->addChild('liste_actes'); $liste_actes->addChild('acte')->addAttribute('num', $this->option['num_acte']); } $xmlStr = str_replace('', '', $xml->asXML()); //Be sure it's in UTF-8 $req = utf8_encode($xmlStr); //Create XML request $post = ''. ''. ''. ''. ''.$req.''. ''. ''. ''; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->config[$env]['URL']); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_COOKIEFILE,TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $response = curl_exec($ch); //Remove SOAP part of XML $response = str_replace("", '', $response); $response = str_replace('','', $response); return $response; } protected function log(){} /** * Detect error * @param string $xml * @throws Exception */ protected function error($xml) { if (!empty($xml)) { $doc = new DOMDocument(); $load = $doc->loadXML($xml, LIBXML_NOERROR | LIBXML_NOWARNING); if (!$load) { $tmp = explode('-', $xml); $errNum = intval($tmp[0]); $errMsg = $tmp[1]; if( $errNum == '5' ){ $errMsg = 'Service partenaire indisponible.'; } throw new Exception($errNum . '-' . $errMsg); } } else { throw new Exception('Fichier vide'); } } /** * Return true if the file modification time is in the period of caching * @param string $file * Path of file * @return boolean */ protected function cachetimeover($file) { $timeover = false; $dateFile = filemtime($file); $now = mktime(date('G'), date('i'), date('s'), date('m') , date('d'), date('Y')); $maxTime = mktime(date('G',$dateFile)+$this->cacheFiletime, date('i',$dateFile), date('s',$dateFile), date("m",$dateFile), date("d",$dateFile), date("Y",$dateFile)); if($now>$maxTime) $timeover = true; return $timeover; } protected function bilanFileName() { return 'bilan-'.$this->siren.'-'; } /** * * @param unknown $url * @return boolean */ public function download($url) { $result = true; $fp = fopen(SECURE_STORAGE . ''. $file, 'w'); $ch = curl_init($url); curl_setopt($ch, CURLOPT_FILE, $fp); $data = curl_exec($ch); // Check if any error occured if(curl_errno($ch)) { $result = false; } curl_close($ch); fclose($fp); return $result; } public function getStatut($siren, $typeCommande = '', $ref = '', $idCommande = 0) { $this->typeCommande = 'ST'; $this->vecteur = 'C'; $reponse = $this->getProduitsXML(); //Gestion du retour infogreffe if($this->erreur($xmlReponse)) { $error = $this->erreurMsg($xmlReponse); } //@todo result non définie return array('error' => $error , 'result' => $result ); } /** * Retourne la liste des bilans * @param string $siren * @return array */ public function getBilans($siren) { $this->siren = $siren; $this->vecteur = 'XL'; $this->typeCommande = 'BI'; $cacheFile = APPLICATION_PATH . $this->cachePath.'/'.$this->typeCommande.'-'.$siren.'.xml'; //Get cache information if (file_exists($cacheFile) && $this->cachetimeover($cacheFile) ) { $xml = file_get_contents($cacheFile); } //Make the request else { $xml = $this->getProduitsXML(); $this->error($xml); //Create file for the cache file_put_contents($cacheFile, $xml); } //Parse XML to make tab $doc = new DOMDocument(); $doc->loadXML($xml); $liste_bilan_complet = $doc->getElementsByTagName('liste_bilan_complet')->item(0); $bilan_complet = $liste_bilan_complet->getElementsByTagName('bilan_complet'); $bilans = array(); if (count($bilan_complet)>0) { foreach($bilan_complet as $element) { $bilan = array(); $num_gest = $element->getElementsByTagName('num_gest')->item(0); $bilan['greffe'] = $num_gest->getElementsByTagName('greffe')->item(0)->nodeValue; $bilan['dossier_millesime'] = $num_gest->getElementsByTagName('dossier_millesime')->item(0)->nodeValue; $bilan['dossier_statut'] = $num_gest->getElementsByTagName('dossier_statut')->item(0)->nodeValue; $bilan['dossier_chrono'] = $num_gest->getElementsByTagName('dossier_chrono')->item(0)->nodeValue; $bilan['num_siren'] = $element->getElementsByTagName('num_siren')->item(0)->nodeValue; $bilan['date_cloture'] = $element->getElementsByTagName('date_cloture')->item(0)->nodeValue; $bilan['date_cloture_iso'] = $element->getElementsByTagName('date_cloture_iso')->item(0)->nodeValue; $bilan['millesime'] = $element->getElementsByTagName('millesime')->item(0)->nodeValue; $bilan['num_depot'] = $element->getElementsByTagName('num_depot')->item(0)->nodeValue; $bilan['type_comptes'] = $element->getElementsByTagName('type_comptes')->item(0)->nodeValue; $mode_diffusion = $element->getElementsByTagName('mode_diffusion')->item(0)->getElementsByTagName('mode'); foreach($mode_diffusion as $mode) { $bilan['mode_diffusion'][] = $mode->getAttribute('type'); } //Génération de l'index pour le tri $date = $bilan['date_cloture_iso']; if(!empty($date)) { $datef = substr($date,0,4).substr($date,5,2).substr($date,8,2); //Affectation liste générale avec un index permettant le tri $bilans[$datef] = $bilan; } } } krsort($bilans); return $bilans; } /** * Commande d'un bilan image * @param string $siren * Siren * @param string $diffusion * Mode de diffusion (C|T) * @param array $option * Référence * @return string */ public function getBilan($siren, $diffusion, $option) { $this->siren = $siren; $this->typeCommande = 'BI'; $this->vecteur = $diffusion; $this->option = $option; $xml = $this->getProduitsXML(); $doc = new DOMDocument(); $doc->loadXML($xml); $bilan_complet = $doc->getElementsByTagName('bilan_complet')->item(0); $bilan = array(); $bilan['num_gest'] = array(); $num_gest = $bilan_complet->getElementsByTagName('num_gest')->item(0); $bilan['num_gest']['greffe'] = $num_gest->getElementsByTagName('greffe')->item(0)->nodeValue; $bilan['num_gest']['dossier_millesime'] = $num_gest->getElementsByTagName('dossier_millesime')->item(0)->nodeValue; $bilan['num_gest']['dossier_statut'] = $num_gest->getElementsByTagName('dossier_statut')->item(0)->nodeValue; $bilan['num_gest']['dossier_chrono'] = $num_gest->getElementsByTagName('dossier_chrono')->item(0)->nodeValue; $bilan['num_siren'] = $bilan_complet->getElementsByTagName('num_siren')->item(0)->nodeValue; $bilan['date_cloture'] = $bilan_complet->getElementsByTagName('date_cloture')->item(0)->nodeValue; $bilan['date_cloture_iso'] = $bilan_complet->getElementsByTagName('date_cloture_iso')->item(0)->nodeValue; $bilan['millesime'] = $bilan_complet->getElementsByTagName('millesime')->item(0)->nodeValue; $bilan['num_depot'] = $bilan_complet->getElementsByTagName('num_depot')->item(0)->nodeValue; $bilan['type_comptes'] = $bilan_complet->getElementsByTagName('type_comptes')->item(0)->nodeValue; $bilan['url_acces'] = $bilan_complet->getElementsByTagName('url_acces')->item(0)->nodeValue; return $bilan['url_acces']; } /** * Retourne la liste des actes * @param string $siren * @return array */ public function getActes($siren) { $this->siren = $siren; $this->vecteur = 'XL'; $this->typeCommande = 'AC'; $cacheFile = APPLICATION_PATH . $this->cachePath.'/'.$this->typeCommande.'-'.$siren.'.xml'; //Get cache information if (file_exists($cacheFile) && $this->cachetimeover($cacheFile) ) { $xml = file_get_contents($cacheFile); } //Make the request else { $xml = $this->getProduitsXML(); $this->error($xml); //Create file for the cache file_put_contents($cacheFile, $xml); } //Parse XML to make tab $doc = new DOMDocument(); $doc->loadXML($xml); $liste_depot_acte = $doc->getElementsByTagName('liste_depot_acte')->item(0); $depot_actes = $liste_depot_acte->getElementsByTagName('depot_acte'); $actes = array(); foreach($depot_actes as $depot_acte) { $acte = array(); $acte['num_gest'] = array(); $num_gest = $depot_acte->getElementsByTagName('num_gest')->item(0); $acte['num_gest']['greffe'] = $num_gest->getElementsByTagName('greffe')->item(0)->nodeValue; $acte['num_gest']['dossier_millesime'] = $num_gest->getElementsByTagName('dossier_millesime')->item(0)->nodeValue; $acte['num_gest']['dossier_statut'] = $num_gest->getElementsByTagName('dossier_statut')->item(0)->nodeValue; $acte['num_gest']['dossier_chrono'] = $num_gest->getElementsByTagName('dossier_chrono')->item(0)->nodeValue; $acte['num_siren'] = $depot_acte->getElementsByTagName('num_siren')->item(0)->nodeValue; $acte['num_depot'] = $depot_acte->getElementsByTagName('num_depot')->item(0)->nodeValue; $acte['date_depot'] = $depot_acte->getElementsByTagName('date_depot')->item(0)->nodeValue; $infoActes = $depot_acte->getElementsByTagName('acte'); $acte['depot'] = array(); foreach($infoActes as $infoActe) { $actenum = array(); $actenum['date_acte'] = $infoActe->getElementsByTagName('date_acte')->item(0)->nodeValue; $actenum['num_acte'] = $infoActe->getElementsByTagName('num_acte')->item(0)->nodeValue; $actenum['type_acte'] = $infoActe->getElementsByTagName('type_acte')->item(0)->nodeValue; $actenum['type_acte_libelle'] = $infoActe->getElementsByTagName('type_acte_libelle')->item(0)->nodeValue; $actenum['nbpages_acte'] = $infoActe->getElementsByTagName('nbpages_acte')->item(0)->nodeValue; $decision = $infoActe->getElementsByTagName('decision')->item(0); if($decision) { $actenum['decision'] = array(); $actenum['decision']['nature'] = $decision->getElementsByTagName('nature')->item(0)->nodeValue; $actenum['decision']['libelle'] = $decision->getElementsByTagName('libelle')->item(0)->nodeValue; } $actenum['mode_diffusion'] = array(); $mode_diffusion = $infoActe->getElementsByTagName('mode_diffusion')->item(0)->getElementsByTagName('mode'); foreach($mode_diffusion as $mode) { $actenum['mode_diffusion'][] = $mode->getAttribute('type'); } $acte['depot'][] = $actenum; }//Fin listes des infos acte //Génération de l'index pour le tri if(!empty($acte['date_depot'])){ $date = $acte['date_depot']; } else { $date = ''; } if(!empty($date)) { $datef = substr($date,0,4).substr($date,5,2).substr($date,8,2); $key = $datef.'-'.$acte['num_depot']; //Affectation liste générale avec un index permettant le tri $actes[$key] = $acte; } //Prise en compte de l'acte -1 if($acte['num_depot']==-1) { $actes[0] = $acte; } } //Tri suivant la date d'acte ou de depot krsort($actes); return $actes; } public function getActe($siren, $diffusion, $option) { //Retourner la référence de commande interne, chez infogreffe $doc = new DOMDocument(); $doc->loadXML($xml); $depot_acte = $doc->getElementsByTagName('depot_acte')->item(0); $info = array(); $info['num_gest'] = array(); $num_gest = $depot_acte->getElementsByTagName('num_gest')->item(0); $info['num_gest']['greffe'] = $num_gest->getElementsByTagName('greffe')->item(0)->nodeValue; $info['num_gest']['dossier_millesime'] = $num_gest->getElementsByTagName('dossier_millesime')->item(0)->nodeValue; $info['num_gest']['dossier_statut'] = $num_gest->getElementsByTagName('dossier_statut')->item(0)->nodeValue; $info['num_gest']['dossier_chrono'] = $num_gest->getElementsByTagName('dossier_chrono')->item(0)->nodeValue; $info['num_siren'] = $depot_acte->getElementsByTagName('num_siren')->item(0)->nodeValue; $info['num_depot'] = $depot_acte->getElementsByTagName('num_depot')->item(0)->nodeValue; $info['date_depot'] = $depot_acte->getElementsByTagName('date_depot')->item(0)->nodeValue; $infoActes = $depot_acte->getElementsByTagName('acte'); $info['actes'] = array(); foreach($infoActes as $infoActe) { $actenum = array(); $actenum['date_acte'] = $infoActe->getElementsByTagName('date_acte')->item(0)->nodeValue; $actenum['num_acte'] = $infoActe->getElementsByTagName('num_acte')->item(0)->nodeValue; $actenum['type_acte'] = $infoActe->getElementsByTagName('type_acte')->item(0)->nodeValue; $actenum['type_acte_libelle'] = $infoActe->getElementsByTagName('type_acte_libelle')->item(0)->nodeValue; $actenum['nbpages_acte'] = $infoActe->getElementsByTagName('nbpages_acte')->item(0)->nodeValue; $decision = $infoActe->getElementsByTagName('decision')->item(0); if($decision) { $actenum['decision'] = array(); $actenum['decision']['nature'] = $decision->getElementsByTagName('nature')->item(0)->nodeValue; $actenum['decision']['libelle'] = $decision->getElementsByTagName('libelle')->item(0)->nodeValue; } $actenum['url_acces'] = htmlspecialchars_decode($infoActe->getElementsByTagName('url_acces')->item(0)->nodeValue); $info['actes'][] = $actenum; } } }