Publicité
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 23

Discussion: SOAP et PHP [Résolu]

  1. #1
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut SOAP et PHP

    Hello

    snif... oui je sais programmer en php mais là j'arrive pas à comprendre comment marche SOAP

    j'ai besoin d'utiliser ce service
    http://gepir.gs1.org/v31/router.asmx?op=GetItemByGTIN

    mais je comprends pas comment ça marche,... combien de paraètres passer etc,...

    la seule chose que je sais, cest que je veux passer le code 3274080005003 et obtenir le résultat en français

    j'ai déjà fait ça en PHP mais impossible d'aller plus loin sans que ça plante grrr

    Code :
    $soapClient = new SoapClient("http://gepir.gs1.org/v31/router.asmx?wsdl");
    (whouaaou 1 ligne )

    merci d'avance pour votre aide
    Phil

  2. #2
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 27
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2010
    Messages : 3 931
    Points : 8 401
    Points
    8 401

    Par défaut

    Attrape les SOAP Fault avec un try catch. Active les traces sur ton client SOAP et tu y verra plus clair dans les échanges et les raisons possibles d'échec. Et puis pense à activer le reporting d'erreur !

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    ini_set('display_errors', 1);
    ini_set('error_reporting', -1);
     
    $client = new SoapClient('service.wsdl', array('trace' => 1));
     
    try {
        $client->foo('bar');
    }
    catch (SoapFault $fault) {
        var_dump(
            $client->__getLastRequest(),
            $client-> __getLastResponse()
        );
        trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_WARNING);
    }
    Regarde la doc la prochaine fois: http://php.net/manual/en/soapclient.soapclient.php

  3. #3
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Merci pour la réponse et désolé pour le message précédant,...

    j'ai vraiment du mal à comprendre la logique SOAP, j'trouve qu'il y a peu de documentation comparé à ce qu'on peut trouver pour le PHP par exemple

    J'vais essayer ton code et essayer de comprendre

    Encore merci

  4. #4
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Donc ! c'est déjà mieux !

    en cherchant les fonctions j'obtiens ça

    GepirVersion2Response GepirVersion2(GepirVersion2Request $parameters)
    gepirParty GetPartyByGLN(GetPartyByGLN $partyGln)
    gepirParty GetOwnerOfGLN(GetOwnerOfGLN $ownerGln)
    gepirParty GetPartyByGTIN(GetPartyByGTIN $partyGtin)
    gepirParty GetPartyBySSCC(GetPartyBySSCC $partySscc)
    gepirParty GetPartyByName(GetPartyByName $requestData)
    gepirItem GetItemByGTIN(GetItemByGTIN $requestItem)
    gepirStatistics GetStatistics(GetStatistics $requestStat)
    gepirAuthorization GetAuthorization(GetAuthorization $requestAuthorization)
    SessionAuthorizeResponse SessionAuthorize(SessionAuthorize $parameters)
    GepirVersion2Response GepirVersion2(GepirVersion2Request $parameters)
    gepirParty GetPartyByGLN(GetPartyByGLN $partyGln)
    gepirParty GetOwnerOfGLN(GetOwnerOfGLN $ownerGln)
    gepirParty GetPartyByGTIN(GetPartyByGTIN $partyGtin)
    gepirParty GetPartyBySSCC(GetPartyBySSCC $partySscc)
    gepirParty GetPartyByName(GetPartyByName $requestData)
    gepirItem GetItemByGTIN(GetItemByGTIN $requestItem)
    gepirStatistics GetStatistics(GetStatistics $requestStat)
    gepirAuthorization GetAuthorization(GetAuthorization $requestAuthorization)
    SessionAuthorizeResponse SessionAuthorize(SessionAuthorize $parameters)
    j'utilise le code suivant

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ini_set('display_errors', 1);
    ini_set('error_reporting', -1);
     
    $client = new SoapClient('http://gepir.gs1.org/v31/router.asmx?wsdl', array('trace' => 1));
     
    try {
        $client->__soapCall("GetPartyByGTIN",array('GetPartyByGTIN' => "3011360004420"));
    }
    catch (SoapFault $fault) {
        var_dump(
            $client->__getLastRequest(),
            $client-> __getLastResponse()
        );
        trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_WARNING);
    }
    mais il me retourne du XML soap (avant il mettait invalid method) et là il dit:
    Warning: SOAP Fault: (faultcode: soap:Server, faultstring: Server was unable to process request. ---> Object reference not set to an instance of an object.)

    j'me suis jamais senti aussi nul grrrr

    merci d'avance pour vos réponses

  5. #5
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Ah !!!

    j'ai mis ça

    Code :
    $client->__soapCall("GetPartyByGTIN","3011360004420","FR");
    et il me dit maintenant : SoapClient::__soapCall() expects parameter 2 to be array

    je régresse -> ça confirme que le code avant était correcte avec un array

    Mais je comprends pas pourquoi il refuse les arguments que je lui passe dans le tableau ,...

    c'est possible qu'ils aient un prob sur leur serveur ?

  6. #6
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Bon là je comprends pas !
    j'ai fait exactement ce qu'ils disent sur les forums

    $client->__soapCall("GetPartyByGTIN",array("partyGtin" => "3011360004420"));

    et j'obtiens
    Object reference not set to an instance of an object.

    comment savoir si le prob vient de mon côté ou du serveur ?

  7. #7
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Bon quand j'appelle la fonction GepirVersion2 j'obtiens une réponse :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    stdClass Object
    (
        [GepirVersion2Result] => stdClass Object
            (
                [any] => <GEPIR01 xmlns="" Version="1.0"><HEAD><T0095>7600001001001</T0095><T0093>0</T0093><T0232>1</T0232></HEAD></GEPIR01>
            )
     
    )
    mais les autres marchent pas,... vous pensez que c'est le service du serveur qui marche pas ou est-ce que j'ai fait une erreur ?


  8. #8
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 27
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2010
    Messages : 3 931
    Points : 8 401
    Points
    8 401

    Par défaut

    C'est toujours compliqué de savoir lequel du client ou du serveur fais n'importe quoi. Mon conseil: télécharge le wsdl du serveur et fais quelques tests avec SoapUI par exemple ou carrément en implémentant un serveur à toi en PHP qui réponds des trucs aléatoires et/ou déterministes. ça te permettra de savoir qui du serveur ou du client ne respecte pas la définition du webservice.

    Concernant Soap::__soapCall, c'est un alias de Soap::__call en fait (ou alors c'est l'inverse, d'ailleurs on s'en fout).
    Le principe est le suivant:
    • soit tu utilise __call avec $client->methode($parm1,$parm2,$parm3)
    • soit tu utilise __soapCall avec $client->__soapCall('method', array($parm1,$parm2,$parm3))

    c'est tout bête

  9. #9
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    merci mais sans te demander de faire le truc à ma place,
    tu en penses quoi de ce web service ? j'ai l'impression qu'il disent qu'iol ne peut être exécute que sur une machine locale, pas sur leur serveur,...


  10. #10
    Membre éclairé

    Homme Profil pro Clément
    Développeur informatique
    Inscrit en
    décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Nom : Homme Clément
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2006
    Messages : 242
    Points : 334
    Points
    334

    Par défaut

    Le message "Object reference not set to an instance of an object" fait fortement au NullReferenceException du .NET. Donc à priori, cette exception venait surement du web service. Le serveur a eu une exception, et t'a juste renvoyé le message d'erreur qu'il a eu (pas très bavard, mais c'est normal).
    Après, s'il s'est mal comporté, c'est peut être aussi que tu lui as donné des paramètres bizarres en entrée, et que lui ne prenait pas la peine de les vérifier...

  11. #11
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    merci pour la réponse, mais si j'ai regardé les données attendues en entrée et il n'y en as qu'une pour cette fonction,...

    j'ai passé plus de 3 jours à chercher !! et j'arrive pas à trouver, c'est pour ça que je vous demande votre aide,...

    pourriez-vous regarder http://gepir.gs1.org/v31/router.asmx et me dire ce que vous en pensez ? SVP ?

  12. #12
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 27
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2010
    Messages : 3 931
    Points : 8 401
    Points
    8 401

    Par défaut

    Aaah la bonne vieille absence de validation

  13. #13
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Quoi de leur côté ? le wsdl n'est pas valide ?
    c'est donc côté serveur non ?

  14. #14
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 27
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2010
    Messages : 3 931
    Points : 8 401
    Points
    8 401

    Par défaut

    Comme j'ai dit plus haut, valide le WSDL avec des outils comme SOAPUI

  15. #15
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Merci mais ça m'apporte quoi ? je vais faire la validation comme tu dis mais si c'est pas valide, c'est inutilisable ?

    et puis je suis un client -> que faire si il a un prob sur leur serveur ?

  16. #16
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Bon,...

    j'ai essayé de faire comme dans les exemples qu'ils donnent :

    POST /V31/router.asmx HTTP/1.1
    Host: gepir.gs1.org
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length

    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
    <soap12:Header>
    <gepirRequestHeader xmlns="http://www.gepir.org/">
    <requesterGln>string</requesterGln>
    <cascade>int</cascade>
    </gepirRequestHeader>
    </soap12:Header>
    <soap12:Body>
    <GetPartyByGTIN version="decimal" xmlns="http://www.gepir.org/">
    <requestedGtin>string</requestedGtin>
    <requestedGtin>string</requestedGtin>
    <requestedLanguages>
    <language>language</language>
    <language>language</language>
    </requestedLanguages>
    </GetPartyByGTIN>
    </soap12:Body>
    </soap12:Envelope>
    avec ce code

    Code :
    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
    $client = new SoapClient('http://gepir.gs1.org/v31/router.asmx?wsdl', array('trace' => 1));
     
    try {
     
    	$header = new SoapHeader(
    		'http://gepir.gs1.org/v31/',
    		'gepirRequestHeader',
    		array(
    			'requesterGln' => "3011360004420",
    			'cascade' => 1
    		)
    	);
     
    	$client->__setSoapHeaders($header);
     
    	$response = $client->GetPartyByGTIN(
    		1.0,	
    		array(
    			'requestedGtin' => "3011360004420",
    			'requestedLanguages' => array(
    				'language' => "FR"
    			)
    		)
    	);
     
    	print_r($response); 
    }
    ça marche toujours pas, mais j'envoie bien ce qu'ils demandent,...
    je ne sais pas si il faut préciser la version de SOAP (ils disent qu'il y a une les version 1.1 et 1.2)

    et puis il y a la version (1.0), c'est l'attribut d'une balise et je sais pas comment le faire passer,...

    sinon toujours la même erreur : j'en peux plus,... bon allons voir la validation,..

  17. #17
    Expert Confirmé Sénior
    Avatar de Benjamin Delespierre
    Profil pro Benjamin Delespierre
    Développeur Web
    Inscrit en
    février 2010
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Nom : Benjamin Delespierre
    Âge : 27
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : février 2010
    Messages : 3 931
    Points : 8 401
    Points
    8 401

    Par défaut

    T'auras pas vraiment le choix, s'ils veulent pas patcher (tu dois pour ça leur coller un ticket s'ils ont un outil de ticketing), tu devra t'adapter.

  18. #18
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    Ouaaaaa !!!!!!!!!!!!!!!!!

    ça marche avec le logiciel !!!

    j'ai mis ça et ça m'envoie la réponse !!!
    maintenant il faut que je comprenne ce qui se passe avec php et comment envoyer ce message

    il affiche "Request 1" dans l'arbre, il faut que je l'appelle ?

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gep="http://www.gepir.org/">
    <soapenv:Header>
    <gep:gepirRequestHeader>
    <!--Optional:-->
    <gep:requesterGln>3011360004420</gep:requesterGln>
    <!--Optional:-->
    <gep:cascade>1</gep:cascade>
    </gep:gepirRequestHeader>
    </soapenv:Header>
    <soapenv:Body>
    <gep:GetPartyByGTIN version="1.0">
    <!--Zero or more repetitions:-->
    <gep:requestedGtin>3011360004420</gep:requestedGtin>
    <!--Optional:-->
    <gep:requestedLanguages>
    <!--Zero or more repetitions:-->
    <gep:language>0</gep:language>
    </gep:requestedLanguages>
    </gep:GetPartyByGTIN>
    </soapenv:Body>
    </soapenv:Envelope>

  19. #19
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    il envoie ça en entête
    il faut je j'ajoute quelquechose dans mon code ?

    POST http://gepir.gs1.org/v31/router.asmx HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: "http://www.gepir.org/GetPartyByGTIN"
    Content-Length: 777
    Host: gepir.gs1.org
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

  20. #20
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    ok je crois que je comprends : php envoie ce code, c'est pas du tout la même chose grrrr

    pourquoi ajoute-il des "key" "value" "ns2" ?
    Code :
    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
     
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.gepir.org/" xmlns:ns2="http://gepir.gs1.org/v31/">
    <SOAP-ENV:Header>
    <ns2:gepirRequestHeader>
    <item>
    <key>requesterGln</key>
    <value>3011360004420</value>
    </item>
    <item>
    <key>cascade</key>
    <value>1</value>
    </item></ns2:gepirRequestHeader>
    </SOAP-ENV:Header>
     
    <SOAP-ENV:Body>
    <ns1:GetPartyByGTIN/>
    <param1>
    	<item>
    		<key>requestedGtin</key>
    		<value>3011360004420</value>
    	</item><item>
    		<key>requestedLanguages</key>
    		<value>
    			<item>
    				<key>language</key>
    				<value>FR</value>
    			</item>
    		</value>
    	</item>
    </param1>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •