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

Bibliothèques et frameworks PHP Discussion :

[Web Service][SOAP] PHP5 - Types des paramètres


Sujet :

Bibliothèques et frameworks PHP

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [Web Service][SOAP] PHP5 - Types des paramètres
    Bonjour à tous,

    Je m'appelle Loïc, et moi aussi j'ai un petit souci.

    Un problème de typage dans les paramètres d'entrés des méthodes plus exactement.

    Je construit simplement un client SOAP.

    La création de l'objet client se passe sans problème, et j'utilise les méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client->__getFunctions();
    Ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [0] => SubmitXmlResponse SubmitXml(SubmitXml $parameters)
    [1] => MultiSubmitXmlResponse MultiSubmitXml(MultiSubmitXml $parameters)
    [2] => BeginSessionResponse BeginSession(BeginSession $parameters)
    [3] => EndSessionResponse EndSession(EndSession $parameters)
    [4] => SubmitXmlOnSessionResponse SubmitXmlOnSession(SubmitXmlOnSession $parameters)
    [5] => SubmitTerminalTransactionResponse SubmitTerminalTransaction(SubmitTerminalTransaction $parameters)
    [6] => GetIdentityInfoResponse GetIdentityInfo(GetIdentityInfo $parameters)
    [7] => SubmitCruiseTransactionResponse SubmitCruiseTransaction(SubmitCruiseTransaction $parameters)

    Puis,
    Ce qui me donne :

    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
    [0] => struct SubmitXml { string Profile; Request Request; Filter Filter; }
    [1] => struct Request { any; }
    [2] => struct Filter { any; }
    [3] => struct SubmitXmlResponse { SubmitXmlResult SubmitXmlResult; }
    [4] => struct SubmitXmlResult { any; }
    [5] => struct MultiSubmitXml { string Profile; Requests Requests; }
    [6] => struct Requests { any; }
    [7] => struct MultiSubmitXmlResponse { Responses Responses; }
    [8] => struct Responses { any; }
    [9] => struct BeginSession { string Profile; }
    [10] => struct BeginSessionResponse { string BeginSessionResult; }
    [11] => struct EndSession { string Token; }
    [12] => struct EndSessionResponse { }
    [13] => struct SubmitXmlOnSession { string Token; Request Request; Filter Filter; }
    [14] => struct Request { any; }
    [15] => struct Filter { any; }
    [16] => struct SubmitXmlOnSessionResponse { SubmitXmlOnSessionResult SubmitXmlOnSessionResult; }
    [17] => struct SubmitXmlOnSessionResult { any; }
    [18] => struct SubmitTerminalTransaction { string Token; string Request; string IntermediateResponse; }
    [19] => struct SubmitTerminalTransactionResponse { string SubmitTerminalTransactionResult; }
    [20] => struct GetIdentityInfo { string Profile; }
    [21] => struct GetIdentityInfoResponse { GetIdentityInfoResult GetIdentityInfoResult; }
    [22] => struct GetIdentityInfoResult { any; }
    [23] => struct SubmitCruiseTransaction { string Profile; string CorrelationToken; Transactions Transactions; }
    [24] => struct Transactions { any; }
    [25] => struct SubmitCruiseTransactionResponse { Response Response; string CorrelationToken; }
    [26] => struct Response { any; }
    La méthode qui m'intéresse est la première, c'est à dire "SubmitXmlResponse SubmitXml(SubmitXml $parameters)"

    Voilà comment je comprends le truc :
    il me faut un seul paramètre de type "SubmitXml".
    Et ce type de donnée est en fait une Structure se composant de trois informations : une de type String, une de type Request, une de type Filter.
    Et, enfin, même chose pour ces deux derniers types, ce sont en fait des Structure contenant une information de nature non précise.

    Mais voilà... des Structures en php ?

    A quoi cela correspond t-il ?

    j'ai tenté plusieurs codes que voici :

    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
    <?php
     
    class SOAPProfile {
        function SOAPProfile($prof) {
            $this->Profile = $prof;
        }
    }
     
    class SOAPRequest {
        function SOAPRequest($req) {
            $this->Request = $req;
        }
    }
     
    class SOAPFilter {
        function SOAPFilter($filt) {
            $this->Filter = $filt;
        }
    }
     
    $structPro = new SOAPProfile('DynCopy_AFRG');
    $structReq = new SOAPRequest($requete_temp);
    $structFil = new SOAPFilter('<_ xmlns=""/>');
    $varStructPro = new SoapVar($structPro, SOAP_ENC_OBJECT, "Profile");
    $varStructReq = new SoapVar($structReq, SOAP_ENC_OBJECT, "Request");
    $varStructFil = new SoapVar($structFil, SOAP_ENC_OBJECT, "Filter");
    $result_temp = $client->SubmitXml(new SoapParam($varStructPro, "Profile"), new SoapParam($varStructReq, "Request"), new SoapParam($varStructFil, "Filter"));
     
    ?>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    	$TProfile['Profile'] = 'DynCopy_AFRG';
    	$TRequest['Request'] = $requete_temp;
    	$TFilter['Filter'] = '<_ xmlns=""/>';
     
    	$result_temp = $client->SubmitXml('DynCopy_AFRG', array($TRequest), array($TFilter));
     
    ?>
    Dans les deux cas, la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SoapFault exception: [soapenv:Server.userException]
    Uncaught Service Exception cause:com.tds.soa.framework.ServiceException:
    Required parameters for method SubmitXml are null.
    The following is the payload received from Broker in /home/site/www/module/recherche.php:298 Stack trace:
    #0 [internal function]: SoapClient->__call('SubmitXml', Array)
    #1 /home/site/www/module/recherche.php(298): SoapClient->SubmitXml(Array)
    #2 /home/site/www/index.php(77): include_once('/home/site/w...') 
    #3 {main}
    Pour information, le message complet que je dois envoyer se constitue de la forme :

    <Profile>DynCopy_AFRG</Profile>
    <Request>ici_se_trouve_ma_requete</Request>
    <Filter><_ xmlns=""/></Filter>

    D'après ce shema, on comprend donc bien à quoi correspond les 3 paramètres de la méthode SubmitXml.

    Mon problème est donc de savoir comment appeler proprement cette méthode SubmitXml, avec le bon format d'argument.

    Merci à tous.

    Help

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Je rajouterai un bout du WDSL :

    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
    <s:element name="SubmitXml">
      <s:complexType>
        <s:sequence>
          <s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string" />
          <s:element maxOccurs="1" minOccurs="0" name="Request">
            <s:complexType>
              <s:sequence>
                <s:any />
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:element maxOccurs="1" minOccurs="0" name="Filter">
            <s:complexType>
              <s:sequence>
                <s:any />
              </s:sequence>
            </s:complexType>
          </s:element>
        </s:sequence>
      </s:complexType>
    </s:element>
    Merci

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Re bonjour,

    Personne ne m'a aidé, je suis triste, mais ce n'est pas bien grave car j'ai trouvé !

    Je faisais fausse route avec mes "SoapVar" et "SoapParam". Un simple tableau (pas si simple d'ailleurs...) suffit.

    Je mettrai ma solution détaillée bientôt, si ça dit à quelqu'un.

    Bisous à tous !

  4. #4
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Salut,

    Moi ça m'intéresse carrément ta solution.
    Je suis en rade depuis une semaine avec un webservice de m*****

    http://www.developpez.net/forums/showthread.php?t=538346

    pour lequel on ne donne aucune info ni aucun exemple en ce qui concerne
    la connexion et le passage des paramètres. En gros c'est: "débrouillez vous!".

    C'est pas dis que ta soluce m'aidera, mais vu le peu d'infos dispo
    sur le net je suis preneur de tout ce qui a un rapport de près ou de loin.

    Voilà, j'attends ta soluce avec impatience.

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour à tous,

    Je vous met la solution au cas où quelqu'un serait intéressé :

    Il s'agissait dans mon cas d'un problème de format des paramètres passés à la fonction "$client->SubmitXml('DynCopy_AFRG', $param)".

    Pour rappel, voilà la forme du message que j'ai à envoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Profile>DynCopy_AFRG</Profile>
    <Request>ici_se_trouve_ma_requete</Request>
    <Filter><_ xmlns=""/></Filter>
    Il me faut donc trois types de données.

    Ensuite, j'ai procédé à un changement de plan : je n'utilise plus l'appel de la fonction sous la forme "$client->SubmitXml('DynCopy_AFRG', $param)" mais "$client->__soapCall('SubmitXml', $param)"

    Je ne sais pas pourquoi, impossible de le faire fonctionner avec la première méthode.

    Maintenant voilà la forme de ma donnée : $param :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $param = array(array(
    	"Profile" => "DynCopy_AFRG",
    	"Request" => array("any" => $requete_temp),
    	"Filter" => array("any" => '<_ xmlns=""/>')
    ));
     
    $result = $client->__soapCall('SubmitXml', $param);
    Voilà, amusez vous bien

    PS : le type "any" dans mon tableau $param correspond simplement au type de donnée attendu d'après la liste des méthodes et des données affichée lors de mon premier post.

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

Discussions similaires

  1. [XL-2007] Web Service SOAP Fichier WSDL / Extraction des données dans un classeur
    Par crusaders dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2014, 12h05
  2. [Web Service] paramétrer mon web service soap sous php
    Par yanis3021 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 05/11/2014, 16h01
  3. Unsupported Media Type - Web Service Soap
    Par zouberi dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 03/10/2011, 09h14
  4. affichage des données provenant d'un web service soap dans une listview
    Par nagca dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2011, 17h11
  5. [Web Service][SOAP] Client Web Service en PHP5
    Par bm_belgacem dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 07/05/2008, 18h03

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