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] Utilisation Webservice SOAP


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut [Web Service] Utilisation Webservice SOAP
    Bonjour,
    Petit souci de dev. j'essai d'appeler un webservice en php et donc de recevoir les données à l'issue de l'appel.
    Lorsque je fait mes tests avec SoapUI pas de souci par contre via php, sur le même poste que l'appel avec SoapUI j'ai un jolie message de timeout.

    Voici le code testé. j'ai voulu dans un premier temps passer par l'objet soapClient mais comme j'avais des souci (qui semble donc être justifié) je suis passé par curl. du coup, un conseil?

    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
     
     
     $xmlRequest = '
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:trac="http://scxgxtt.phx-dc.dhl.com/glDHLExpressTrack/providers/services/trackShipment" xmlns:dhl="http://www.dhl.com">
     
       <soapenv:Header>
     
            <wsse:Security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
             <wsse:UsernameToken wsu:id="UsernameToken-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <wsse:Username>xxxxxxxxx</wsse:Username>
                <wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxxxxxxxx</wsse:Password>
                <wsse:Nonce encodingtype="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">eUYebYfsjztETJ4Urt8AJw==</wsse:Nonce>
                <wsu:Created>2010-11-24T00:17:20Z</wsu:Created>
             </wsse:UsernameToken>
     
          </wsse:Security>
       </soapenv:Header>
       <soapenv:Body>
          <trac:trackShipmentRequest>
             <trackingRequest>
                <dhl:TrackingRequest>
                   <Request>
                      <ServiceHeader>
     
                         <MessageTime>2010-11-24T00:17:20Z</MessageTime>
                         <MessageReference>e71672807e9f1a2f9318e126645de100</MessageReference>                  
                      </ServiceHeader>
                   </Request>
                   <!--Optional:-->
                   <AWBNumber>
                      <!--1 or more repetitions:-->
                      <ArrayOfAWBNumberItem>7895083910</ArrayOfAWBNumberItem>
                   </AWBNumber>
                   <!--Optional:-->
     
                   <LevelOfDetails>ALL_CHECK_POINTS</LevelOfDetails>
                   <!--Optional:-->
                   <PiecesEnabled>S</PiecesEnabled>
                   <!--Optional:-->
                </dhl:TrackingRequest>
             </trackingRequest>
          </trac:trackShipmentRequest>
       </soapenv:Body>
    </soapenv:Envelope>';
     
    $url = "https://wsbexpress.dhl.com:443/sndpt/glDHLExpressTrack?WSDL";
    $soapAction = "glDHLExpressTrack_providers_services_trackShipment_Binder_trackShipmentRequest";
     
    $header = array(
    "Content-type: text/xml;charset=\"utf-8\"",
    "Accept: text/xml",
    "Cache-Control: no-cache",
    "Pragma: no-cache",
    "Content-length: " . strlen($xmlRequest),
    );
     
    $soap_do = curl_init();
    curl_setopt($soap_do, CURLOPT_URL, $url);
    //curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
    //curl_setopt($soap_do, CURLOPT_TIMEOUT, 10);
    curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($soap_do, CURLOPT_POST, true);
    curl_setopt($soap_do, CURLOPT_POSTFIELDS,$xmlRequest);
    curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
    $response = curl_exec($soap_do);
     
    if (!$response) 
    {
    	$err = 'Curl error: ' . curl_error($soap_do);
    	echo $err;
    }
    else {
     var_dump(htmlentities($response));
     echo 'plop';
    }
    curl_close($soap_do);
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 101
    Par défaut
    Tu parles d’un message de timeout ; est-ce un timeout du script PHP ou un timeout de connexion ? Considère d’ajouter une valeur pour CURLOPT_CONNECTTIMEOUT ou CURLOPT_CONNECTTIMEOUT_MS (voir http://php.net/manual/fr/function.curl-setopt.php – utilise Ctrl+F dans la page). Considère également CURLOPT_FAILONERROR ou encore CURLOPT_VERBOSE.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    Salut,
    En lisant un peu plus le lien, j'ai pus voir que j'étais passé à côté de certains paramètres.

    Du coup j'ai modifier le code en effectuant ceci :

    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
     
    $soap_do = curl_init();
    curl_setopt($soap_do, CURLOPT_URL, $url);
    curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($soap_do, CURLOPT_TIMEOUT, 20);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($soap_do, CURLOPT_POST, true);
    curl_setopt($soap_do,CURLOPT_PROXYPORT,8080);
    curl_setopt($soap_do,CURLOPT_PROXY,'xxxxxx.xxx.xxx'); 
    curl_setopt($soap_do,CURLOPT_RETURNTRANSFER, true);
    curl_setopt($soap_do, CURLOPT_POSTFIELDS,$xmlRequest);
    curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
    $response = curl_exec($soap_do);
     
    var_dump(htmlentities($response));
    Seulement maintenant, je n'ai plus d'erreur de timeout mais je récupère constamment ce que j'envoi et non la réponse que devrai me fournir le webservice.
    Est ce que j'ai oublié de faire quelque chose ?

    Bon, J'édite car entre temps, j'ai regardé plus en détail l'xml affiché. c'est celui du WSDL donc bien le retour lié à l'url demandée. Je m'attendais comme pour d'autre partie de mes dev que cela soit cette url là qu'il me fallait interroger.
    Donc en gros : $url = "https://wsbexpress.dhl.com:443/sndpt/glDHLExpressTrack?WSDL";
    J'ai bêtement retiré le "?WSDL" et là ça marche correctement.... c'est un peu couillon de ma part mais bon.
    Je laisse le code avec commentaire, si cela peut aider quelqu'un plus tard :

    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
     
    $url = "https://wsbexpress.dhl.com:443/sndpt/glDHLExpressTrack" /// url vers le webservice
     
    /// SOAPAction : nom de la fonction SOAP définie dans le wsdl.
    $header = array( 
        'Content-Type: text/xml; charset="utf-8"', 
        'Content-Length: '.strlen($xmlRequest), 
        'Accept: text/xml', 
        'Cache-Control: no-cache', 
        'Pragma: no-cache', 
        'SOAPAction: "glDHLExpressTrack_providers_services_trackShipment_Binder_trackShipmentRequest"'
    ); 
     
     
    $soap_do = curl_init();
    curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($soap_do, CURLOPT_TIMEOUT, 20);
    curl_setopt($soap_do, CURLOPT_URL, $url);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
    /// nécessaire uniquement si un proxy est présent pour l'appel du wbservice
    curl_setopt($soap_do, CURLOPT_PROXYPORT,xxxx);
    curl_setopt($soap_do, CURLOPT_PROXY,'xxxxxxxxxxxx.xxxx'); 
    /// sans cela on affiche pas les données de retour.
    curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
     
    curl_setopt($soap_do, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
    curl_setopt($soap_do, CURLOPT_POST, true);
     
    //// $xmlRequest : code xml à envoyé au webservice
    curl_setopt($soap_do, CURLOPT_POSTFIELDS,$xmlRequest);
    curl_setopt($soap_do, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
     
    $response = curl_exec($soap_do);
     
     
    if (!$response) 
    {
    	$err = 'Curl error: ' . curl_error($soap_do);
    	echo $err;
    }
    else {
     var_dump(htmlentities($response));
    }
     
    curl_close($soap_do);
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

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

Discussions similaires

  1. [Web Service] Utilisation de classe SOAP
    Par m51_2000 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/12/2013, 15h08
  2. [Web Service] Utilisation de PHP / SOAP / WSDL / XML
    Par soufian2290 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/01/2013, 15h10
  3. [Web Service] Utilisation de SOAP
    Par riete dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 06/08/2009, 10h08
  4. [Web Service] Appel Webservice SOAP
    Par HaTnuX dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/08/2008, 22h33
  5. [Web Service] Utilisation du client SOAP
    Par Fluxy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/06/2008, 12h58

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