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] Pb connexion webservice avec __soapCall


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut [Web Service][SOAP] Pb connexion webservice avec __soapCall
    Bonjour,

    Je galère pour me connecter à un webservice.
    L'entreprise m'a donné un exemple de fichier xml d'entrée
    afin de tester si tout fonctionne.
    Je me connecte de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try{
    $client = new SoapClient($address ,array('trace'=> 1,'soap_version'=> 'SOAP_1_1'));
     
    $xml_return = $client->__soapCall('nom_methode', array($xml_string, "login","mdp"));
    }
    catch(SoapFault $fault)
    {
    echo $fault;
      echo "Reponse: ".htmlspecialchars($client->__getLastResponse());
    }
    mais j'ai toujours la même erreur:
    Not enough message parts were received for the operation
    D'habitude ça fonctionne mais là rien à faire.
    J'ai appelé la personne qui s'occupe du webservice mais
    apparemment elle voit pas d'où ça pourrait venir.

    Quelqu'un aurait une idée ?

    Merci

  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 pense que c'est la syntaxe pour l'appel avec __soapcall().
    Perso je fais toujours comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $params = array ('login' => $login,
    			'password' => $password);
    $result = $client -> __soapCall('LaMethode', array ($params));
    Le 'login' et 'password' dans mon array $params, correspond aux noms des paramètres qu'il faut passer dans la méthode 'LaMethode'.

    Enfin en tout cas je pense que ca vient de là. Ton message d'erreur indique qu'il reçoit mal les données que tu envoies.

  3. #3
    Membre éclairé 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
    Par défaut
    Merci beaucoup pour ton aide. En effet ça se précise.

    Maintenant j'ai le message d'erreur:
    Erreur d'identification : Veuillez renseigner un login
    Normalement le login est bon. Aussi, avant de rappeler le technicien
    je voudrais savoir comment tu fais tu pour passer le xml d'entrée.

    Comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $params = array ('xml' => $xml_string, 'login' => $login, 'password' => $password);
    $result = $client -> __soapCall('LaMethode', array ($params));
    Ou comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $params = array ('login' => $login, 'password' => $password);
    $result = $client -> __soapCall('LaMethode', array ($xml_string, $params));
    Ou y a t-il une autre manière ?

    Et est ce que le fait de passer un tableau associatif en argument ne perturbe
    pas le webservice (écrit en java) ?

    Merci d'avance.

  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
    Qu'appelles-tu le xml d'entrée ? Le fichier WSDL ? Peux-tu le poster ?
    Qu'as-tu dans ta variable $adress ?

    D'ou viens l'affichage de ton erreur ? Du serveur ou du client ? Les affichages d'erreur sont normalement en anglais...

    Le login sert-il à t'authentifier pour effectuer ta requête SOAP ? Ou c'est simplement un string qu'il faut passe en paramètre dans une méthode ?

    Sinon pour le tableau associatif ça peut te changer comment les données sont encapsulés dans la requête SOAP, et donc comment ton serveur en JAVA les réceptionne. Ça dépend en fait comment le WSDL à été fait... Mais normalement ca ne change rien.


    Voili voilou, j'espère que tu m'as compris ^^

  5. #5
    Membre éclairé 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
    Par défaut
    Qu'appelles-tu le xml d'entrée ? Le fichier WSDL ? Peux-tu le poster ?
    La société m'a donnée un exemple de xml d'entrée (une enveloppe soap) pour
    tester la connexion et s'assurer que je récupère bien un xml de retour.
    Le xml est du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
    <ns1:nom_methode xmlns:ns1="http://services.site.products.generali.fr">
     
     ...
     
    </ns1:nom_methode>
    </soap:Body>
    </soap:Envelope>
    avec à l'interieur tout un tas de balises avec des arguments etc...
    Je passe ce xml à la méthode et normalement elle me retourne la
    réponse sous forme de fichier xml. Il ne me reste plus qu'à "parser" les
    données qui m'interesse.
    Qu'as-tu dans ta variable $adress ?
    C'est l'adresse du fichier wsdl de la méthode à appeler, du genre:

    http://webservices.blabla.org/index....m_methode/wsdl
    D'ou viens l'affichage de ton erreur ? Du serveur ou du client ?
    ça vient probablement du client puisque c'est en français.
    Le login sert-il à t'authentifier pour effectuer ta requête SOAP ? Ou c'est simplement un string qu'il faut passe en paramètre dans une méthode ?
    Je pense qu'il sert à m'authentifier puisque c'est la société qui m'a
    fournit le login et le mdp. Toutefois ils devraient être bon puisque
    le technicien à testé chez lui et ça marche.

    Une idée ?

  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
    Du coup t'as pas besoin de passer ton xmlstring en paramètre. C'est juste un exemple qu'ils t'ont donné, une requete SOAP type qui doit arriver sur le serveur. Donc essaie de passer juste le login et le mot de passe.

    Sinon ce que tu peux faire c'est faire afficher la requete qui part et la requete qui revient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print "<pre>\n";
    print "Request: \n".htmlspecialchars($client->__getLastRequest()) ."\n";
    print "Response: \n".htmlspecialchars($client->__getLastResponse())."\n";
    print "</pre>";
    Tu as déjà mis trace à 1 dans les options, donc ca s'affichera bien.
    Et ta 'Request' devrait correspondre à ton xml d'exemple.

    Sinon si c'est un problème d'authentification, je ne l'ai jamais utilisé, donc je ne peux pas trop t'aider. Il y a ce post déjà :
    http://www.developpez.net/forums/sho...d.php?t=523784

    Je pense aussi que tu n'a pas trop bien compris le role du WSDL. C'est lui que tu dois suivre, c'est lui qui t'indique quelles données envoyer et sous quel format pour telle ou telle méthode.

    Je te donne un de mes bouts de code pour exemple :

    Dans le WSDL :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsd:element name="SetCustomer">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="customer_id" type="xsd:long" minOccurs="1" maxOccurs="1" />
          <xsd:element name="last_name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="first_name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="code" type="xsd:int" minOccurs="1" maxOccurs="1" />
          <xsd:element name="age" type="xsd:short"	 minOccurs="1" maxOccurs="1" />
          <xsd:element name="nosex" type="xsd:boolean" minOccurs="1" maxOccurs="1" />
          <xsd:element name="delete" type="xsd:boolean"	minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    Code client :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $params = array (	
    'customer_id' => $customer_id,
    'last_name'	=> $last_name,
    'first_name'	=> $first_name,				
    'code' => $code,
    'age' => $age,
    'nosex' => $nosex,
    'delete' => false);
     
    $result = $client -> __soapCall('SetCustomer', array ($params));


    Voila en espèrant que ca t'aide !
    Bon courage

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

Discussions similaires

  1. Web service soap transfert de fichier avec reprise
    Par Zugg dans le forum Web & réseau
    Réponses: 6
    Dernier message: 23/07/2013, 09h41
  2. Réponses: 2
    Dernier message: 29/04/2012, 00h01
  3. Appeler un web service SOAP en php avec un client JavaScript
    Par lord.66 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 14h04
  4. Appeler un web service SOAP en php avec un client JavaScript
    Par lord.66 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 31/05/2009, 12h42
  5. retourner tableau de string avec web service SOAP
    Par xx_FiFty_xx dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/06/2008, 10h13

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