IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Interrogation Web Service Orias


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 41
    Points
    41
    Par défaut Interrogation Web Service Orias
    Bonjour,
    Orias met à disposition un web service pour interroger sa base de données.
    Mais je n'ai aucune connaissance des web service et pas beaucoup plus de php.

    https://www.orias.fr/documents/13705/19751/2013-02-26%20-%20ORIAS%20-%20Guide%20Utilisateur%20-%20Service%20d'interrogation%20des%20inscriptions.pdf

    Le service est accessible à cette adresse : https://www.orias.fr/inscriptions/service?wsdl

    Pour interroger, il dise qu'il faut implémenter:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    < intermediarySearchRequesntermediarySearchRequest>
    <intermediaries>
    < intermediary>
    <siren>090467301</siren>
    </intermediary>
    <intermediary>
    </intermediary>
    </ intermediaries>
    </ intermediarySearchRequest>

    J'ai essayé ce bout de code qui me donne la fonction et les paramètres mais je n'arrive pas l'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $client = new SoapClient("https://www.orias.fr/inscriptions/service?wsdl");
    var_dump($client->__getFunctions()); 
    var_dump($client->__getTypes());
    Je souhaiterais donc obtenir, pour un siren donné en paramètre (090467301), les informations associées.

    Comment et ou puis-je implémenter ce bout de code pour interrogation du web service?

    Comment s'obtient la réponse? dans un fichier?

    Je vous remercie de toutes les explications que vous pourrez m'apporter.
    Je suis également preneur si l'interrogation du web service se fait en c# au lieu de php.

    D'avance un grand merci de votre aide

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
    try {
        $client = new SoapClient("https://www.orias.fr/inscriptions/service?wsdl");
        var_dump(
            $client->intermediarySearch(
                array(
                    'intermediaries' => array(
                        'intermediary' => array(
                            'siren' => '090467301'
                        )
                    )
                )
            )
        );
    } catch(Exception $e) {
            echo $e->getMessage();
    }
    Normalement ce code te donnera un objet stdClass.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(stdClass)#2 (1) { ["intermediaries"]=> object(stdClass)#3 (1) { ["intermediary"]=> object(stdClass)#4 (1) { ["informationBase"]=> object(stdClass)#5 (2) { ["siren"]=> string(9) "090467301" ["foundInRegistry"]=> bool(false) } } } }
    Là le siren n'est pas trouvé dans la base.

    Du coup là tu peux utiliser ton objet comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $client = new SoapClient("https://www.orias.fr/inscriptions/service?wsdl");
    $response = $client->intermediarySearch(array('intermediaries' => array('intermediary' => array('siren' => '090467301'))));
    echo $response->siren; //090467301
    echo (string)$response->foundInRegistry; //false
    Apparemment, d'après la WSDL il faut aussi un registrationNumber de 8 caractères (string). Pour le passer en paramètres, tu ajoutes une virgule après le siren (à la fin de la ligne), puis tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'registrationNumber' => 'string_de_8_caracteres'
    En C#, le concept va être le même, sauf que dans visual studio tu vas ajouter (à droite) une référence au webservice, VS va chercher tout seul les methodes possibles, puis tu inclus le namespace en haut de ton code et tu utilises la référence au WS exactement comme on vient de le faire en PHP.

    Quel que soit le langage, n'oublie pas le try / catch, car on fait appel au réseau !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Merci Théocrite pour ta réponse rapide.
    J'ai mis en oeuvre tes propositions.
    L'appel au WebService semble fonctionner (en ajoutant en effet le registrationNumber qui manquait).

    Je demande l'interrogation pour ce prestataire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $response = $client->intermediarySearch(array('intermediaries' => array('intermediary' => array('Siren' => '337709307', 'registrationNumber' => '08044710'))));
    Par contre, à la réponse :
    J'obtiens :
    Undefined property: stdClass::$siren
    et pareil pour foundInRegistry.

    j'ai donc fait: Ceci me donne la structure de la réponse.

    Un petit if et la structure attendue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ($response->intermediaries->intermediary->informationBase->foundInRegistry)
    {
    	echo $response->intermediaries->intermediary->informationBase->denomination;
    	echo "\n>";
    	//echo $response->intermediaries[0]->intermediary->registrations->registration->status;
    }
    else
    {
    	echo "NOK";
    }
    Cela fonctionne à merveille.
    Un grand merci donc de ton aide.

    Une dernière chose, serait-il possible d'enregistrer la réponse (toute la structure) dans un fichier XML?

    Merci encore d'avance.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    Pour la conversion vers XML, j'ai trouvé cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function array_to_xml($response, &$xml_response) {
        foreach($response as $key => $value) {
            if(is_array($value)) {
                if(!is_numeric($key)){
                    $subnode = $xml_response->addChild("$key");
                    array_to_xml($value, $subnode);
                }
                else{
                    $subnode = $xml_response->addChild("item$key");
                    array_to_xml($value, $subnode);
                }
            }
            else {
                $xml_response->addChild("$key","$value");
            }
        }
    }

    Sauf que j'obtiens le message d'erreur
    SimpleXMLElement::addChild() expects parameter 2 to be string, object given
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml_response->addChild("$key","$value");
    Une idée ?
    Merci

  5. #5
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Tu as l'air de bien avancer malgré ton manque de connaissances !

    Alors pour la réponse à ton problème du dernier post, la réponse obtenue par php soap est un stdObject et non un array, c'est pourquoi ta fonction array_to_xml ne marche pas. Par contre, tu peux utiliser un cast sur la stdClass pour obtenir un array :
    Cependant, ce n'est pas ce que je recommande. Tu devrais plutôt dans ton cas partir sur getLastResponse de ton soapClient.

    Tu as aussi une fonction pour récupérer les headers... enfin bon après la doc est ton amie.

    Une fois que tu as ce que tu veux (test avec des var_dump), tu peux utiliser des fonctions comme file_put_contents.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    En effet, je manque cruellement de connaissance et je n'arrive d'ailleurs pas à utiliser getLastResponse qui me renvoie du vide.

    Je l'utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $client = new SoapClient("https://www.orias.fr/inscriptions/service?wsdl");
    $response = $client->intermediarySearch(array('intermediaries' => array('intermediary' => array('Siren' => '337709307', 'registrationNumber' => '08044710'))));
    $Result = $client->__getLastRequest();
    Faut-il que j'utilise un "__soapCall" et si oui, comment?
    Merci

  7. #7
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    J'avoue ne jamais l'avoir vraiment utilise (j'ai seulement fait des proof of concepts universitaires avec du PHP SOAP...).

    Une piste serait d'ajouter l'option trace sur ton client, apparemment sans ca c'est normal de ne pas avoir le contenu de la requete... (probablement qu'une fois deserialise, la reponse est par defaut ecrasee pour eviter des problemes d'espace et de performance).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $client = new SoapClient("https://www.orias.fr/inscriptions/service?wsdl",array('trace'=>1));
    $response = $client->intermediarySearch(array('intermediaries' => array('intermediary' => array('Siren' => '337709307', 'registrationNumber' => '08044710'))));
    $Result = $client->__getLastRequest();
    Je n'ai pas teste mais c'est la seule piste tangible que j'ai trouve...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 78
    Points : 41
    Points
    41
    Par défaut
    Ta solution est la bonne, j'ai bien cette fois le résultat au format XML
    Non pas grace à la fonction __getLastRequest mais grace à __getLastResponse.

    Après, j'enregistre sur disque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents($MonFichier, $Result);
    Un grand merci pour ton aide Théocrite.
    Je peux clôturer la discussion.

Discussions similaires

  1. Paramètres de Web services ORIAS
    Par dvdavid2009 dans le forum Langage
    Réponses: 3
    Dernier message: 16/12/2014, 13h27
  2. Interroger un service Web (SOAP) en VBA
    Par domija dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/01/2013, 14h56
  3. Interrogation Web Services
    Par evil8 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/01/2009, 17h19
  4. Réponses: 27
    Dernier message: 23/10/2008, 17h20
  5. je n'arrive pas à interroger mon service web
    Par karimspace dans le forum Services Web
    Réponses: 2
    Dernier message: 09/02/2007, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo