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 :

Php5 et Soap


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut Php5 et Soap
    Bonjour,

    J'essaye de connecter un site web à un web-service. Je développe donc un client soap.

    Dans les spécs techniques du web-service, il est expliqué que l'authentification à ce web-service se fait dans les header des requetes Soap. On me donne un exemple de requete:
    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
     
    POST /2011/01/01/ffip.asmx HTTP/1.1
    Host: soap.ffip.fr
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "GetExport"
     
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Header>
        <AuthenticationInfo xmlns="http://soap.ffip.fr/2011/01/01/ffip.wsdl">
          <softwareVersionKey xmlns="">string</softwareVersionKey>
          <softwarePassword xmlns="">string</softwarePassword>
          <realtorKey xmlns="">string</realtorKey>
          <userLogin xmlns="">string</userLogin>
          <userPassword xmlns="">string</userPassword>
          <cultureName xmlns="">string</cultureName>
        </AuthenticationInfo>
      </soap:Header>
      <soap:Body>
        <GetExport xmlns="http://soap.ffip.fr/2011/01/01/ffip.wsdl">
          <idSoftware xmlns="">string</idSoftware>
          <AuthenticationInfo xmlns="">
            <softwareVersionKey>string</softwareVersionKey>
            <softwarePassword>string</softwarePassword>
          </AuthenticationInfo>
        </GetExport>
      </soap:Body>
    </soap:Envelope>
    De mon coté, quand je construit ma requete Soap en mettant dans le header les informations nécessaire, ça me construit ça: (j'utilise la classe php http://php.net/manual/fr/class.soapclient.php )
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soap.ffip.fr/2011/01/01/ffip.wsdl" xmlns:ns2="NAMESPACE">
    	<SOAP-ENV:Header>
    		<ns2:AuthenticationInfo>
    			<item>
    				<key>SoftwareVersionKey</key>
    				<value>truc</value>
    			</item>
    			<item>
    				<key>SoftwarePassword</key>
    				<value>machin</value>
    			</item>
    		</ns2:AuthenticationInfo>
    	</SOAP-ENV:Header>
    	<SOAP-ENV:Body>
    		<ns1:GetExport/>
    	</SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Et quand j'envoi cette requete, je recupère une belle erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    soap:Client401 - SoftwareVersionKey is empty.
    Le code de mon client soap ("GetExport" est une des méthodes fournie par le web-service):
    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
     
    $Wsdl		= 'http://soap.ffip.fr/2011/01/01/ffip.asmx?WSDL';
    $Auth		= array(
    				'SoftwareVersionKey'=>$SoftwareVersionKey,
    				'SoftwarePassword'=>$SoftwarePassword,
    			);
    $Header		= new SoapHeader($Wsdl,'AuthenticationInfo',$Auth,false);
    $Service	= new SoapClient($Wsdl,array("trace" => 1));
    $Service	->__setSoapHeaders($Header);
    try{
    	$Service	->GetExport();
    }
    catch(SoapFault $Fault){
    	echo "SOAP Fault : ".$Fault;
    }
    Ainsi voila ma question: la structure de ma requête n'étant pas exactement la même que la requête qui m'est donnée en exemple. Le problème vient-il de là, ou le serveur soap est-il censé savoir "tout lire"?
    Et y'a-til d'autres classes php qui me permettraient de construire la requête comme sur l'exemple?

    Merci d'avance

  2. #2
    Expert confirmé

    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
    Par défaut
    T'as pas a envoyer de XML, montre ton code

  3. #3
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut
    J'envois pas de XML "en dur": ce que je te montre je le recupère via l'onglet "Réseau" de Firebug.
    J'ai édité le 1er post pour y mettre le code Php

  4. #4
    Expert confirmé

    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
    Par défaut
    ne met rien dans le namespace

  5. #5
    Membre confirmé Avatar de Freeluvs
    Profil pro
    Inscrit en
    Février 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 78
    Par défaut
    Si j'enlève le Namespace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Header = new SoapHeader('','AuthenticationInfo',$Auth,false);
    quand je vérifie ce que j'envoi au serveur soap avec "$ClientSoap->__getLastRequest()", c'est vide.

    Quand je laisse une valeur au namespace, j'obtient le 2nd XML posté dans le premier post. Mais enfait, pourquoi enlever le namespace?

  6. #6
    Expert confirmé

    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
    Par défaut
    Visible dans ta requete le namespace est faux, il attend : http://soap.ffip.fr/2011/01/01/ffip.wsdl
    par contre je trouve ça bizarre qu'il fasse key .. value

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

Discussions similaires

  1. php5 webservice soap
    Par piotrowski-s dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/08/2012, 19h10
  2. [Web Service][SOAP] Erreur avec php5 et soap
    Par lehic dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/08/2011, 17h23
  3. Hébergement gratuit PHP5 avec SOAP
    Par youkielkanish dans le forum Gratuit
    Réponses: 2
    Dernier message: 12/06/2010, 11h59
  4. Réponses: 2
    Dernier message: 22/01/2007, 21h51
  5. [Web Service][SOAP] WSDL/PHP5/SOAP: Renvoyer un tableau
    Par Netman dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/05/2006, 19h08

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