extranet/includes/infogreffe/infogreffe.php

387 lines
14 KiB
PHP

<?php
require_once realpath(dirname(__FILE__)).'/constantes.php';
/**
* Retourne le résultat du webservice infogreffe.
* @param string $req
* La demande à infogreffe en xml
* @return string
* Retourne le xml renvoyé par le webservice.
*/
function getInfogreffeXML($req){
global $firephp, $fichier;
$fp=@fopen( PATH_SITE.'/cache/infogreffe/' . $fichier.'.query' , 'w');
@fwrite($fp, $req);
@fclose($fp);
$url = INFOGREFFE_WS_URL;
$req = utf8_encode($req);
$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, $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);
$output = curl_exec($ch);
$xml = 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'>", '', $output);
$xml = str_replace('</return></ns0:getProduitsWebServicesXMLResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>','', $xml);
$firephp->log($xml,'XML');
/* Erreur violation encoding
$client2 = new SoapClient(null, array( 'location' => INFOGREFFE_WS_URL,
'uri' => INFOGREFFE_WS_URI,
'soap_version' => SOAP_1_1,
'trace' => 1,
'style' => SOAP_RPC,
'use' => SOAP_ENCODED,
));
try {
if (!file_exists( PATH_DATA.'/pdf/acte-'.$siren.'-'.$option.'.pdf'))
{
$fp=@fopen( PATH_DATA.'/infogreffe/xml/' . $fichier.'.query' , 'w');
@fwrite($fp, $req);
@fclose($fp);
$req=utf8_encode($req);
$firephp->log($req, 'XML');
$O=$client2->getProduitsWebServicesXML($req);
$xml=implode('', (array)$O);
$firephp->log($xml,'XML');
}
}catch (SoapFault $soapFault) {
$success=false;
$firephp->log($soapFault,'Fault');
$firephp->log($client2->__getLastRequest(),'Infogreffe Request');
$firephp->log($client2->__getLastResponse(),'Infogreffe Response');
$response=$client2->__getLastResponse();
$response=str_replace("<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);
$xml=str_replace('</return></ns0:getProduitsWebServicesXMLResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>','', $response);
}
*/
return $xml;
}
/**
* Générer le xml pour la requete infogreffe.
* @param string $siren
* Le SIREN à
* @param string $idCommande
* L'identifiant pour la commande
* @param string $type
* Le type de document demandé
* @param string $vecteur
* Le vecteur de diffusion
* @param string $option
*
* @return string
* Retourne la chaine xml de requete.
*/
function requeteInfogreffe($siren, $idCommande, $type, $vecteur, $option){
global $firephp;
$firephp->log($siren, 'siren' );
$firephp->log($idCommande, 'idCommande');
$firephp->log($type, 'type');
$firephp->log($vecteur, 'vecteur');
$firephp->log($option, 'option');
$req = '<demande>'.
'<emetteur>'.
'<code_abonne>'.INFOGREFFE_WS_USER.'</code_abonne>'.//85009006
'<mot_passe>'.INFOGREFFE_WS_PASS.'</mot_passe>'.//
'<reference_client>G'.$idCommande.'</reference_client>'.
'<code_requete>'.
'<type_profil>A</type_profil>'.
'<origine_emetteur>IC</origine_emetteur>'.
'<nature_requete>C</nature_requete>'.
'<type_document>'.$type.'</type_document>'.// KB=Kbis, HQ=Histo, ST=Statut, AC=Acte, LE=Liste étab
'<type_requete>S</type_requete>'.
'<media>WS</media>'.
'<mode_diffusion>';
if ($type=='AC' && $option=='' && $vecteur=='XL')
$req.= '<mode type="T"/>'.
'<mode type="C"/>';
$req.= '<mode type="'.$vecteur.'"/>'.
'</mode_diffusion>'.
'</code_requete>'.
'</emetteur>'.
'<commande>'.
'<num_siren>'.$siren.'</num_siren>';
if ( ($type=='BS' || $type=='BI') && $option<>'' ) {
$tabRefActe = explode('-', $option);
$tabMil = explode('_', $tabRefActe[0]);
$req.= '<greffe>'.$tabRefActe[2].'</greffe>'.
'<dossier_millesime>'.$tabRefActe[3].'</dossier_millesime>'.
'<dossier_statut>'.$tabRefActe[4].'</dossier_statut>'.
'<dossier_chrono>'.$tabRefActe[5].'</dossier_chrono>'.
'<num_depot>'.$tabRefActe[6].'</num_depot>'.
'<date_cloture>'.WDate::dateT('Ymd','d/m/Y', $tabRefActe[1]).'</date_cloture>';
}elseif ( $type=='AC' && $option<>'' ) {
$tabRefActe = explode('-', $option);
$req.= '<greffe>'.$tabRefActe[2].'</greffe>'.
'<dossier_millesime>'.$tabRefActe[3].'</dossier_millesime>'.
'<dossier_statut>'.$tabRefActe[4].'</dossier_statut>'.
'<dossier_chrono>'.$tabRefActe[5].'</dossier_chrono>'.
'<num_depot>'.$tabRefActe[6].'</num_depot>'.
'<liste_actes>'.
'<acte num="'.$tabRefActe[7].'"/>'.
'</liste_actes>';
/* $optionUrl=$bilan['millesime'].'_'.$bilan['type_comptes'].'-'.$dateRef.'-'.$bilan['num_gest_greffe'].'-'.$bilan['num_gest_millesime'].'-'.$bilan['num_gest_statut'].'-'.$bilan['num_gest_chrono'].'-'.$bilan['num_depot'];*/
}
$req.='</commande></demande>';
return $req;
}
/**
* Parcours le document xml renvoyé par infogreffe .
* @param string $file
* Le chemin complet vers le fichier à analyser.
* @return array
* Retourne un tableau structuré des actes, etc,...
*/
function xmlArrayActes($file)
{
global $firephp;
$vecteurTinit = false;
$dom_object = new DomDocument2();
//TODO : Vérfier que le fichier existe
$dom_object->load($file);
$tabActes=array();
// create DOMXPath object with our DOMObject
$xpath = new Domxpath($dom_object);
$result = $xpath->query("//liste_depot_acte/depot_acte/.");
foreach ($result as $annonce) {
// N° Gestion
$title = $xpath->query ("num_gest/greffe", $annonce);
$num_gest_greffe=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_millesime", $annonce);
$num_gest_millesime=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_statut", $annonce);
$num_gest_statut=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_chrono", $annonce);
$num_gest_chrono=$title->item(0)->nodeValue;
// Siren
$title = $xpath->query ("num_siren", $annonce);
$num_siren = $title->item(0)->nodeValue;
// N° Dépôt
$title = $xpath->query ("num_depot", $annonce);
$num_depot = $title->item(0)->nodeValue;
// Date Dépôt
$title = $xpath->query ("date_depot", $annonce);
$date_depot = $title->item(0)->nodeValue;
// Actes
$actes = $xpath->query("acte/.", $annonce);
$nbVecteurT = $nbActes = 0;
foreach ($actes as $acte) {
$nbActes++;
// Date
$title = $xpath->query ("date_acte", $acte);
$date_acte=$title->item(0)->nodeValue;
// N°
$title = $xpath->query ("num_acte", $acte);
$num_acte=$title->item(0)->nodeValue;
// Type
$title = $xpath->query ("type_acte", $acte);
$type_acte=$title->item(0)->nodeValue;
// Type lib
$title = $xpath->query ("type_acte_libelle", $acte);
$type_acte_libelle=$title->item(0)->nodeValue;
// Nb Pages
$title = $xpath->query ("nbpages_acte", $acte);
$nbpages_acte=$title->item(0)->nodeValue;
// decision/nature
$title = $xpath->query ("decision/nature", $acte);
$decision_nature=$title->item(0)->nodeValue;
// decision/libelle
$title = $xpath->query ("decision/libelle", $acte);
$decision_libelle=$title->item(0)->nodeValue;
// mode_diffusion
$vecteurT = $vecteurC = false;
$vecteurs = $xpath->query("mode_diffusion/.", $acte);
foreach ($vecteurs as $vecteur) {
$title = $xpath->query ("mode[@type='T']", $vecteur);
if ($title->length==1) {
$vecteurT = true;
$vecteurTinit = true;
$nbVecteurT++;
}
$title = $xpath->query ("mode[@type='C']", $vecteur);
if ($title->length==1) $vecteurC = true;
}
if ($date_acte=='') $date=$date_depot; else $date=$date_acte;
// $index=0;
// while (isset($tabActes[$date.'.'.$index])) $index++;
$tabActes[''.$date.'-'.$num_depot.'-'.$num_acte.'-'.$type_acte] = array(
'type'=>$type_acte_libelle,
'decisions'=>$decision_libelle,
'depot_num'=>$num_depot,
'depot_date'=>$date_depot,
'num_gest_greffe'=>$num_gest_greffe,
'num_gest_millesime'=>$num_gest_millesime,
'num_gest_statut'=>$num_gest_statut,
'num_gest_chrono'=>$num_gest_chrono,
'num_depot'=>$num_depot,
'num_acte'=>$num_acte,
'type_acte'=>$type_acte,
'vecteurT'=>$vecteurT,
'vecteurC'=>$vecteurC,
);
}
}
$firephp->log($tabActes, 'tabActes');
$return = array( 'Actes' => $tabActes, 'vecteurTinit' => $vecteurTinit, 'nbVecteurT' => $nbVecteurT, 'nbActes' => $nbActes );
return $return;
}
/**
* Parcours le document xml renvoyé par infogreffe .
* @param string $file
* Le chemin complet vers le fichier à analyser.
* @param string $query
* La requete xpath de départ pour analyser le document
* @return array
* Retourne un tableau structuré des bilans, etc,...
*/
function xmlArrayBilans($file, $query)
{
global $firephp;
$dom_object = new DomDocument2();
$dom_object->load($file);
$tabActes=array();
$xpath = new Domxpath($dom_object);
$result = $xpath->query($query);
foreach ($result as $annonce) {
// N° Gestion
$title = $xpath->query ("num_gest/greffe", $annonce);
$num_gest_greffe=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_millesime", $annonce);
$num_gest_millesime=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_statut", $annonce);
$num_gest_statut=$title->item(0)->nodeValue;
$title = $xpath->query ("num_gest/dossier_chrono", $annonce);
$num_gest_chrono=$title->item(0)->nodeValue;
// Siren
$title = $xpath->query ("num_siren", $annonce);
$num_siren=$title->item(0)->nodeValue;
// N° Dépôt
$title = $xpath->query ("num_depot", $annonce);
$num_depot=$title->item(0)->nodeValue;
// Date clôture
$title = $xpath->query ('date_cloture', $annonce); // 2005-12-31
$date_cloture=$title->item(0)->nodeValue;
// liasse
$title = $xpath->query ('liasse', $annonce); // 2033
$liasse=$title->item(0)->nodeValue;
// type de comptes
$title = $xpath->query ('type_comptes', $annonce); // sociaux
$type_comptes=$title->item(0)->nodeValue;
// millesime
$title = $xpath->query ('millesime', $annonce); // 2005
$millesime=$title->item(0)->nodeValue;
// url_acces
$title = $xpath->query ('url_acces', $annonce);
$url_acces=$title->item(0)->nodeValue;
if (substr($url_acces,0,5)=='null/') $url_acces='http://webservices.infogreffe.fr/'.substr($url_acces,5,strlen($url_acces)-5);
// mode_diffusion
$vecteurT = $vecteurC = false;
$vecteurs = $xpath->query("mode_diffusion/.", $annonce);
foreach ($vecteurs as $vecteur) {
$title = $xpath->query ("mode[@type='T']", $vecteur);
if ($title->length==1) $vecteurT=true;
$title = $xpath->query ("mode[@type='C']", $vecteur);
if ($title->length==1) $vecteurC=true;
}
$tabActes[$millesime.'-'.$date_cloture.'-'.$type_comptes]=array(
'num_gest_greffe'=>$num_gest_greffe,
'num_gest_millesime'=>$num_gest_millesime,
'num_gest_statut'=>$num_gest_statut,
'num_gest_chrono'=>$num_gest_chrono,
'num_depot'=>$num_depot,
'liasse'=>$liasse,
'millesime'=>$millesime,
'type_comptes'=>$type_comptes,
'date_cloture'=>$date_cloture,
'url_acces'=>$url_acces,
'vecteurT'=>$vecteurT,
'vecteurC'=>$vecteurC,
);
}
$firephp->log($tabActes, 'tabActes');
$return = array( 'Actes' => $tabActes );
return $return;
}
/**
* Envoi un mail informant de la commande de pièce.
* @param string $email
* L'adresse email qui doit recevoir la pièce.
* @param string $siren
* Le siren de l'entité
* @param string $type
* Le type de demande (asso, greffe)
* @return array
* Retourne un tableau structuré des bilans, etc,...
*/
function mailCommande($email, $siren, $type){
//On vérifie l'email
if (preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#',$email)) {
//Suivant le type de commande
switch($type){
case 'asso':
$subject = "Commande de statuts associations pour $siren à ".$email;
break;
case 'greffe':
$subject = "Commande de pièces pour $siren à ".$email;
break;
}
require_once 'mail/mail.php';
sendMail(
$subject,
'REQUEST='.EOL.print_r($_REQUEST,true).'EOL'.
'SERVER='.EOL.print_r($_SERVER,true).'EOL'.
'SESSION='.EOL.print_r($_SESSION,true).'EOL'.
'ENV='.EOL.print_r($_ENV,true).'EOL'.
'tabInfo='.print_r($tabInfo,true),
//From
array(
'email' => 'contact@scores-decisions.com',
'name' => 'Contact',
),
//TO
array(
0 => array(
'email'=> 'contact@scores-decisions.com',
'name' => 'Contact'
)
)
);
return true;
}else{
return false;
}
}
class DomDocument2 extends DOMDocument {
function getValueFromTag($tagName) {
$items=$this->getElementsByTagName($tagName);
foreach ($items as $item) {
return utf8_decode($item->nodeValue);
}
}
}
?>