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

XML/XSL et SOAP Discussion :

problème SOAP / WSDL


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Par défaut problème SOAP / WSDL
    Bonjour à tous!

    J'utilise php5 pour créer mes propres services web.
    J'ai un serveur.php, un client.php et mon fichier wsdl

    mon problème est que j'arrive pas à récupérer les bonnes valeurs depuis une requête SOAP

    voici l'enveloppe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
    <SOAP-ENV:neworder>
    <parameters>3</parameters>
    <param1>2</param1>
    <param2>1</param2>
    </SOAP-ENV:neworder>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    et depuis mon serveur j'ai une méthode qui doit récupérer ses valeurs, donc le 3, le 2 et le 1
    mais j'arrive à récupérer que le "3"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     function neworder($inputdet1,$inputdet2) 
    {
     
         return array('result' => $inputdet1.$inputdet2);
     
    }
    cette fonction me retourne "$inputdet1" donc la valeur 3

    réponse SOAP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body><SOAP-ENV:neworderResponse>
    <parameters><result>3</result></parameters>
    </SOAP-ENV:neworderResponse></SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    est-ce que quelqu'un à une idée de comment on récupère les valeurs?

    Merci d'avance!!!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Par défaut
    Bonjour.

    Je suis désolé mais je n'ai pas trop compris ta question... Tu veux récupérer les valeurs de retour de ta fonction côté client ? Donc la réponse du serveur de ta requete ?

    Montre nous ton code côté client aussi, ca serait utile

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Par défaut
    j'aimerais récupérer les valeurs depuis ma fonction donc depuis le serveur, cette fonction devrais recevoir 3 paramètres: retailerid, idprod et quantite mais elle ne retourne que le retailerid....

    côté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        $client = new SoapClient('http://IP/essai13/service.wsdl', array('trace' => 1, 'soap_version'  => SOAP_1_1));
     
        // appel de la méthode neworder du service web
        $R= $client -> __soapCall('neworder',array($_POST['retailerid'],$_POST['idprod'],$_POST['quantite']));
    je pense que le problème est la façon de recevoir les paramètres dans la fonction

    voici une partie de mon wsdl:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <definitions xmlns:tns="urn:CSP" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:typens="urn:CSP" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" 
    name="CSP" targetNamespace="urn:CSP">
     
    <wsdl:types>
     
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:CSP">
    <xsd:complexType name="ProdPackOrderitemUser">
     
    <xsd:sequence>
     
    <xsd:element name="idprod" type="xsd:decimal"/>
     
    <xsd:element name="quantite" type="xsd:decimal"/>
     
    </xsd:sequence>
     
    </xsd:complexType>
     
    <xsd:element name="neworderElement">
     
    <xsd:complexType>
     
    <xsd:sequence>
     
    <xsd:element name="orderitems" type="typens:ProdPackOrderitemUser"/>
     
    <xsd:element name="retailerid" type="xsd:decimal"/>
     
     
    </xsd:sequence>
     
    </xsd:complexType>
     
    </xsd:element>
     
    <xsd:element name="neworderResponseElement">
     
    <xsd:complexType>
     
    <xsd:sequence>
     
    <xsd:element name="result" type="xsd:string"/>
     
    </xsd:sequence>
     
    </xsd:complexType>
     
    </xsd:element>
     
    </xsd:schema>
     
    </wsdl:types>
    <message name="WSProducteur_neworder">
     
    <part name="parameters" type="typens:neworderElement"/>
     
    </message>
     
    <message name="WSProducteur_neworderResponse">
     
    <part name="parameters" element="typens:neworderResponseElement"/>
     
    </message>
     
    <portType name="CspPorts">
     
    <operation name="neworder">
     
    <input message="typens:WSProducteur_neworder"/>
     
    <output message="typens:WSProducteur_neworderResponse"/>
     
    </operation>
     
    </portType>
     
    <binding name="MyBinding" type="typens:CspPorts">
     
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="neworder">
     
    <soap:operation soapAction="http://IP/essai13/service.wsdl/neworder"/>
     
    <input>
     
    <soap:body use="literal"/>
     
    </input>
     
    <output>
     
    <soap:body use="literal"/>
     
    </output>
     
    </operation>
     
    </binding>

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Par défaut
    Ok je crois voir le problème, enfin je pense ^^

    Le truc c'est de bien "encapsuler" les données des méthodes en PHP, suivant comment est structurer ton WSDL.
    Pour essayer de t'expliquer un peu, dans ton exemple, c'est bien l'élément neworderElement qui doit être envoyé en paramètre dans la méthode neworder.

    Mais ton élément neworderElement est composé de 2 éléments :
    - orderitems
    - retailerid

    Mais l'élément orderitems faut référence à un complextype qui lui comprends également 2 autres éléments :
    - idprod
    - quantite

    Donc moi ce que je ferais ca serait un truc de ce genre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $orderitems = array ('idprod' => $_POST['idprod'], 'quantite' => $_POST['quantite']);
    $params = array ('orderitems' => $orderitems, 'retailerid' => $_POST['retailerid']);
     
    $R = $client -> __soapCall('neworder', array($params));

    En fait tout groupe d'élément doit être casé dans un tableau associatif, donc avec des sous groupes, il faut mettre des tableaux d'associatifs dans d'autres.

    J'espère avoir bien lu le WSDL, c'est grace a lui que tu sais comment envoyer tes données, et j'espère que tu m'as compris ^^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Par défaut
    merci de ta réponse! oui je comprend tout à fait!

    alors j'ai essayé de modifier l'appel du client comme ton exemple et mnt mon enveloppe SOAP a complètement changé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
    <SOAP-ENV:neworder>
    <parameters>
    <item><key>orderitems</key><value>
    <item><key>idprod</key><value>2</value></item>
    <item><key>quantite</key><value>6</value></item></value></item>
    <item><key>retailerid</key><value>8</value></item>
    </parameters>
    </SOAP-ENV:neworder>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    et je n'ai rien en retour de la fonction...

    est-ce qu'il faut que je modifie p-être la fonction qui est comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function neworder($inputdet1,$inputdet2,$inputdet3) {
     
     
            return array('result' => $inputdet1.$inputdet2.$inputdet3);
        }
    car s'il faut grouper les éléments pour l'appel, p-être c'est pareil pour la fonction???

    j'ai essayé de plusieurs façons mais.. rien

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Par défaut
    Ah oui en effet.
    D'ailleurs la requête SOAP est déjà un peu bizarre

    Sinon déjà pour ta fonction tu peux essayer comme ceci je pense, la même chose mais à l'envers ^^
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function neworder($params) 
    {
         $orderitems = $params->orderitems;
         $retailerid = $params->retailerid;
         $idprod = $orderitems->idprod;
         $quantite = $orderitems->quantite
     
         return array('result' => $retailerid.$idprod.$quantite );
    }

    Si tu colles ca côté serveur, et ce que j'ai mis dans mon post précédent côté client, ca devrait fonctionner. Si ca ne fonctionne pas, faut voir côté WSDL, ou surement une erreur à la con

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SOAP WSDL problème rédaction d'un wsdl
    Par just-in dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/03/2015, 14h59
  2. [Web Service][SOAP/WSDL] Problèmes de fonctions
    Par InJeCt dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 17/02/2011, 10h03
  3. Problèmes avec SOAP::WSDL
    Par orgerix dans le forum Modules
    Réponses: 0
    Dernier message: 03/04/2010, 19h18
  4. [SOAP] [WSDL] [PHP] Problème création du fichier WSDL (Débutant)
    Par Guybrush113 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/09/2007, 12h45

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