webservice/library/WsScore/WsEntreprise.php
2010-10-14 14:08:04 +00:00

216 lines
7.3 KiB
PHP

<?php
require_once realpath(dirname(__FILE__)).'/functions.php';
require_once realpath(dirname(__FILE__)).'/Types/Types.php';
class WsEntreprise
{
protected $wsdl = null;
protected $wsdlOptions = array();
function __construct()
{
$webservicesConfig = Zend_Registry::get('webservicesConfig')->webservice->scores;
$wsdl = !empty($webservicesConfig->wsdl) ? $webservicesConfig->wsdl : null ;
$options = array();
foreach ($webservicesConfig->options as $optionName => $optionValue){
$options[$optionName] = $optionValue;
}
$options['login'] = $_SERVER['PHP_AUTH_USER'];
$options['password'] = $_SERVER['PHP_AUTH_PW'];
$this->wsdl = $wsdl;
$this->wsdlOptions = $options;
}
/**
* Retourne les informations identitaires de l'entreprise ou de l'établissement demandé
* @param string $siret Siren de l'entreprise ou siret de l'établissement
* @param int $id Identifiant interne
* @param boolean $forceVerif
* @return IdentiteReturnType
*/
function getIdentite($siret, $id = 0, $forceVerif = false)
{
//Enregistrement des accès à la requête getIdentite
Zend_Registry::get('WsLogger')->info("getIdentite - ip:".
$_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']);
//Connexion aux webservices V1
try {
$client = new SoapClient($this->wsdl, $this->wsdlOptions);
$O = $client->getIdentite($siret, $id, $forceVerif);
} catch (SoapFault $fault) {
Zend_Registry::get('WsLogger')->err("getIdentite($siret, $id) - ".serialize($fault));
}
//Gestion du retour
$error = new ErrorType();
$error = arrayToClass($O['error'], 'ErrorType');
$result = new IdentiteResultType();
$result = arrayToClass($O['result'], 'IdentiteResultType');
$outputParams = new IdentiteReturnType();
$outputParams->error = $error;
$outputParams->result = $result;
return $outputParams;
}
/**
* Recherche
* @param string $type Type de la recherche (recherche entreprise : 'ent', recherche dirigeant : 'dir')
* @param RechercheEntrepriseCriteres $criteres
* @param int $position Position de parcours des résultats retournées (0 par défaut)
* @param int $nbRep Nombre de réponses retournées lors d'une requête (20 par défaut)
* @param int $maxRep Nombre de réponses maximum pouvant être retournées lors d'une requête (200 par défaut)
* @param bool $pertinence Recherche orthographique stricte sur le nom, l'adresse et la ville (false par défaut)
* @param bool $avecSiren Seulement les entités sirénées (false par défaut)
* @return RechercheEntrepriseReturnType
*/
function rechercheEntreprise($type, $criteres, $position = 0, $nbRep = 20, $maxRep = 200, $pertinence = false, $avecSiren = false)
{
//Enregistrement des accès à la requête getIdentite
Zend_Registry::get('WsLogger')->info("rechercheEntreprise - ip:".
$_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER']);
switch ($type)
{
case 'ent':
$entCriteres = new CriteresEntreprise();
$entCriteres = $criteres->elementEntreprise;
$client = new SoapClient($this->wsdl, $this->wsdlOptions);
$identifiant = $entCriteres->identifiant;
$typeId = '';
if ($identifiant!='') {
$len = strlen($identifiant);
//Numéro WALDEC
if (strtoupper(substr($identifiant,0,1))=='W') {
$typeId = 'W';
//Code ISIN
} elseif ($len==12){
$typeId = 'I';
//TVA Intracommunautaire
} elseif (in_array(substr($identifiant,0,2),
array('AT','BE','BG','CY','CZ','DE','DK','EE','EL','ES',
'FI','GB','HU','IE','IT','LT','LU','LV','MT','NL','PL',
'PT','RO','SE','SI','SK'))){
//"La recherche par numéro de TVA n'est pas encore possible sur ce pays !";
//Pour la france
} elseif (substr($identifiant,0,2)=='FR') {
$typeId = 'S';
if ($len==13) $identifiant = substr($identifiant,4,9);
else $identifiant = '';
//Numéro RC
} elseif (preg_match('/A|B|C|D/i', $identifiant)) {
$typeId='R';
//Siren normal on enleve tout ce qui n'est pas un chiffre
} else {
$typeId = 'S';
}
}
if (in_array($typeId, array('R', 'W', 'I'))){
try {
$O = $client->searchAutreId(
$typeId,
$identifiant,
empty($position) ? 0 : $position,
empty($nbRep) ? 20 : $nbRep,
empty($maxRep) ? 200 : $maxRep,
$entCriteres->codePostal
);
} catch (SoapFault $fault) {
Zend_Registry::get('WsLogger')->err("rechercheEntreprise - ".serialize($criteres));
}
} elseif ($typeId == 'S'){
try {
$O = $client->searchSiren(
$identifiant,
empty($position) ? 0 : $position,
empty($nbRep) ? 20 : $nbRep,
empty($maxRep) ? 200 : $maxRep,
$entCriteres->codePostal
);
} catch (SoapFault $fault) {
Zend_Registry::get('WsLogger')->err("rechercheEntreprise - ".serialize($criteres));
}
} else {
try {
$O = $client->searchNomAdr(
$entCriteres->raisonSociale,
$entCriteres->adresse,
$entCriteres->codePostal,
$entCriteres->ville,
empty($entCriteres->siege) ? false : $entCriteres->siege,
empty($entCriteres->actif) ? false : $entCriteres->actif,
empty($position) ? 0 : $position,
empty($nbRep) ? 20 : $nbRep,
empty($maxRep) ? 200 : $maxRep,
empty($pertinence) ? false : $pertinence,
empty($avecSiren) ? false : $avecSiren,
$entCriteres->naf
);
} catch (SoapFault $fault) {
Zend_Registry::get('WsLogger')->err("rechercheEntreprise - ".serialize($criteres));
}
}
break;
case 'dir':
$dirCriteres = new CriteresDirigeant();
$dirCriteres = $criteres->elementDirigeant;
$client = new SoapClient($this->wsdl, $this->wsdlOptions);
try {
$O = $client->searchDir(
$dirCriteres->dirNom,
$dirCriteres->dirPrenom,
$dirCriteres->dirDateNaiss,
$dirCriteres->dirVille,
empty($position) ? 0 : $position,
empty($nbRep) ? 20 : $nbRep,
empty($maxRep) ? 200 : $maxRep,
empty($pertinence) ? false : $pertinence
);
} catch (SoapFault $fault) {
Zend_Registry::get('WsLogger')->err("rechercheEntreprise - ".serialize($criteres));
}
break;
}
$error = new ErrorType();
$error = arrayToClass($O['error'], 'ErrorType');
$results = new RechercheEntrepriseResult();
$results = arrayToClass($O['results'], 'RechercheEntrepriseResult');
$outputParams = new RechercheEntrepriseReturnType();
$outputParams->error = $error;
$outputParams->results = $results;
return $outputParams;
}
/**
* Retourne le statut du webservice
* @return StatusReturnType
*/
function status()
{
/* @todo tester les différents éléments qui peuvent conduire
* à un problème dans les services tel que la connexion à la
* base de données, l'accès FTP, l'accès HTTP, l'accès système de fichier
*/
//Enregistrement des accès à la requête getIdentite
Zend_Registry::get('WsLogger')->info("status - ip:".
$_SERVER['REMOTE_ADDR'].", login:".$_SERVER['PHP_AUTH_USER'].
", hash:".$_SERVER['PHP_AUTH_PW']);
$error = new StatusReturnType();
$error->statusCode = 0;
$error->statusMsg = 'Services disponible (beta)';
return $error;
}
}
?>