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 :

Requête SOAP renvoie une seule ligne


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Requête SOAP renvoie une seule ligne
    Bonjour à tous,

    Je cherche une ou des âmes charitables qui pourront m'aider sur un problème un peu particulier avec SOAP.

    Voilà ma requête SOAP en PHP, on ne peut plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $client = new SoapClient('some.wdsl');
     
    $result = $client->Function(array('arg1' => 'example'));
     
    echo $result->FunctionResponse;
    La réponse contient normalement 8 informations différentes mais au lieu de me les renvoyer sous forme d'array elles s'affichent toutes sur une seule ligne de type rep1rep2rep3rep4rep5rep6rep7rep8. Le problème est donc que la réponse n'est pas renvoyée sous forme de tableau. Or j'ai besoin d'un tableau pour pouvoir exploiter les données et non d'une simple ligne inexploitable :/

    Mais, si j'effectue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $client = new SoapClient('some.wdsl');
     
    $result = $client->Function(array('arg1' => 'example'));
     
    echo $xml = $client->__getLastResponse();
    Alors je vois bien les 8 informations s'afficher au format XML et délimitées par des balises.

    J'ai donc pensé à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $client = new SoapClient('some.wdsl');
     
    $result = $client->Function(array('arg1' => 'example'));
     
    $xml = $client->__getLastResponse();
     
    $array = XML2Array::createArray(($xml));
     
    print_r($array);
    Avec une fonctione XML2Array qui convertit toute chaine XML en array mais cela me renvoi un tableau associatif de ce type:

    Array ( [soap:Envelope] => Array ( [soap:Body] => Array ( [FunctionResponse] => Array ( [FunctionResult] => rep1rep2rep3rep4rep5rep6rep7rep8 ) ) ) )
    Or, si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = XML2Array::createArray(($xml));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = XML2Array::createArray((le contenu de $xml si je fais un echo $xml));
    ça marche.

    Mais je veux pouvoir le faire à l'intérieur même de mon code (en live) et non afficher d'abord le contenu de $xml en faisant echo $xml puis le copier à la main dans mon appel de la fonction XML2Array.

    Mon unique but est donc de convertir la réponse SOAP en quelque chose d'exploitable (un tableau idéalement) pour que je puisse isoler chacun des 8 résultats dans une variable.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    renvoyer du XML via SOAP c'est débile, qui a fait le wdsl?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    C'est une société informatique.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    montre le XML de la réponse

  5. #5
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    renvoyer du XML via SOAP c'est débile, qui a fait le wdsl?
    En même temps soap est basé sur le xml...?!
    Développeur informatique contrarié...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    montre le XML de la réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($xml = $client->__getLastResponse());
    renvoie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(1105) "<?xml version="1.0" encoding="us-ascii"?><VoucherActivity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">"

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    renvoyer du XML via SOAP c'est débile, qui a fait le wdsl?
    Et SOAP c'est fait comment d'après toi ?
    Tous les échanges de données en SOAP se font en xml.

    et le xml visualisé dans le cas présent n'est pas du xml renvoyé par le webservice, mais la réponse SOAP brute, non interprété, telle qu'elle a transitée sur le réseau.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  8. #8
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Je suppose que c'est un faute de frappe mais c'est pas some.wdsl mais some.wsdl et ça serait aussi intéressant de voire le .wsdl...
    Développeur informatique contrarié...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Et SOAP c'est fait comment d'après toi ?
    Tous les échanges de données en SOAP se font en xml.

    et le xml visualisé dans le cas présent n'est pas du xml renvoyé par le webservice, mais la réponse SOAP brute, non interprété, telle qu'elle a transitée sur le réseau.
    Effectivement mais la réponse interprété me renvoie une ligne simple, si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $client = new SoapClient('https://webservice.asmx?wsdl', array('trace' => 1));
     
    $result = $client->Function(array('arg1' => 'arg1', 'arg2' => 'arg2', 'vouchertype' => 'test'));
     
    var_dump($result);
    J'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(stdClass)#2 (1) { ["FunctionResult"]=> string(558) "0000" }

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Et SOAP c'est fait comment d'après toi ?
    Tous les échanges de données en SOAP se font en xml.

    et le xml visualisé dans le cas présent n'est pas du xml renvoyé par le webservice, mais la réponse SOAP brute, non interprété, telle qu'elle a transitée sur le réseau.
    sans blague ...
    le problème est que la réponse doit être au format du langage en retour, ici renvoie array avec une string et du XML dedans, et non pas la réponse brute, puisque qu'elle est interprété via SoapClient, sinon il y'aurai une erreur, donc c'est débile

    si t'envoie un tableau en ruby via SOAP (certe ca transite en XML) mais coté PHP tu dois recevoir le même tableau


    kfug18 > fait un coup de SimpleXML sur la réponse

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    kfug18 > fait un coup de SimpleXML sur la réponse
    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $xml = $client->__getLastResponse();	
    $Response= simplexml_load_string($xml);  
    var_dump ($Response);
    J'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(SimpleXMLElement)#2 (0) { }

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu peux le parcourir comme un array, au pire fait un iterator_to_array par dessus

    plutot faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simplxml_load_string($response->FunctionResult);

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    tu peux le parcourir comme un array, au pire fait un iterator_to_array par dessus

    plutot faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simplxml_load_string($response->FunctionResult);
    Excellent! 1 000 merci

Discussions similaires

  1. [AC-2007] Requête UNION : récuperer les valeurs sur une seule ligne
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/12/2009, 12h02
  2. [MySQL] requête select qui ne retourne qu'une seule ligne
    Par rose25 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/07/2009, 15h11
  3. Résultats d'une requête sur une seule ligne
    Par bobic dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/08/2008, 16h53
  4. [SQL] Résultats d'une requête en une seule ligne
    Par nadsky dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/08/2008, 11h07
  5. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54

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