webservice/library/Infogreffe/Infogreffe.php
2012-08-08 14:38:11 +00:00

367 lines
11 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Configuration of provider
*/
require_once realpath(dirname(__FILE__)).'/Config.php';
/**
* Infogreffe Provider
*
*
*/
class Infogreffe extends Infogreffe_Config
{
/**
* Where pdf file are store
* @var string
*/
protected $dataPath = '';
/**
* SIREN
* @var string
*/
protected $siren;
/**
* Internal Command ID
* @var string
*/
protected $idCommande;
/**
* KB = Kbis, PN = privilèges et nantissements, BI = Bilan complet, BS = bilan saisi,
* ST = Dernier Statut à jour, AC = Acte, SD = Surveillance Demande et Accusé,
* SR = Surveillance Révélation, SP = Surveillance Portefeuille, FA = Recherche PCL,
* FI = Inventaire, FJ = Jugement, FO = Ordonnance, FD = Dépôt divers,
* LE = Liste Etablissements
* @var string
*/
protected $typeCommande;
/**
* Mode de diffusion : C = Courrier, T = Téléchargement, M = Mail, XL = XML
* @var string
*/
protected $vecteur;
/**
* String which contain reference
* @var string
*/
protected $option;
/**
* Error number
* @var int
*/
protected $errorNum;
/**
* Error message
* @var string
*/
protected $errorMsg;
public function __construct()
{
/**
* Define path where PDF file are store
*/
$this->dataPath = '';
/**
* 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('<demande></demande>');
$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') && $this->option!='' )
{
/* Format de la variable option pour la commande de type BI ou BS
* 0 => millesime
* 1 => date_cloture
* 2 => greffe
* 3 => dossier_millesime
* 4 => dossier_statut
* 5 => dossier_chrono
* 6 => num_depot
*/
$ref = explode('-', $this->option);
$commande->addChild('greffe',$ref[2]);
$commande->addChild('dossier_millesime',$ref[3]);
$commande->addChild('dossier_statut',$ref[4]);
$commande->addChild('dossier_chrono',$ref[5]);
$commande->addChild('num_depot',$ref[6]);
$commande->addChild('date_cloture', WDate::dateT('Ymd','d/m/Y', $ref[1]));
}
// Commande de documents : actes
elseif ( $this->typeCommande=='AC' && !empty($this->option) )
{
/* Format de la variable option pour commande type AC
* 0 => type_acte
* 1 => date de référence
* 2 => greffe
* 3 => dossier_millesime
* 4 => dossier_statut
* 5 => dossier_chrono
* 6 => num_depot
* 7 => num_acte
*/
$ref = explode('-', $this->option);
$num_actes = explode('|', $ref[7]);
$commande->addChild('greffe',$ref[2]);
$commande->addChild('dossier_millesime', $ref[3]);
$commande->addChild('dossier_statut', $ref[4]);
$commande->addChild('dossier_chrono', $ref[5]);
$commande->addChild('num_depot', $ref[6]);
$liste_actes = $commande->addChild('liste_actes');
if(is_array($num_actes) && count($num_actes)>1)
{
foreach($num_actes as $num_acte)
{
$liste_actes->addChild('acte')->addAttribute('num', $num_acte);
}
}
else
{
$liste_actes->addChild('acte')->addAttribute('num', $ref[7]);
$fichierOption = $this->option;
}
}
$xmlStr = str_replace('<?xml version="1.0"?>', '', $xml->asXML());
//Be sure it's in UTF-8
$req = utf8_encode($xml);
//Create XML request
$post = '<?xml version="1.0" encoding="UTF-8"?>'.
'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" '.
'xmlns:ns1="https://webservices.infogreffe.fr/" '.
'xmlns:xsd="http://www.w3.org/2001/XMLSchema" '.
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '.
'xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" '.
'SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'.
'<SOAP-ENV:Body>'.
'<ns1:getProduitsWebServicesXML>'.
'<param0 xsi:type="xsd:string">'.$req.'</param0>'.
'</ns1:getProduitsWebServicesXML>'.
'</SOAP-ENV:Body>'.
'</SOAP-ENV:Envelope>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->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("<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><SOAP-ENV:Body><ns0:getProduitsWebServicesXMLResponse xmlns:ns0='urn:local' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><return xsi:type='xsd:string'>", '', $response);
$response = str_replace('</return></ns0:getProduitsWebServicesXMLResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>','', $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, 'ERR');
}
}
else
{
throw new Exception('Fichier vide', 'ERR');
}
}
/**
* Return true if the file modification time is in the period of caching
* @param string $file
* Path of file
*/
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;
}
public function download(){}
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 = $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;
}
public function getBilan()
{
//Retourner la référence de commande interne, chez infogreffe
}
public function getActes(){}
public function getActe()
{
//Retourner la référence de commande interne, chez infogreffe
}
}