Probleme Webservice Soap avec php5

Signaler
Messages postés
3
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
21 septembre 2006
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour,

Je souhaiterai utiliser le webservice decrit ci-dessous. Mon problème est que je ne sais pas vraiment la syntaxe à utilisé pour appeller ma fonction.

Fichier WSDL

    <wsdl:definitions targetNamespace= "http://www.premiumconsulting.fr/">
    <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.premiumconsulting.fr/">
    <s:element name="simulate">
    <s:complexType>
    <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="group" type="tns:Group"/>
<s:element minOccurs="1" maxOccurs="1" name="salary" type="s:decimal"/>
<s:element minOccurs="1" maxOccurs="1" name="birthDate" type="s:dateTime"/>
</s:sequence>
</s:complexType>
</s:element>
    <s:simpleType name="Group">
    <s:restriction base="s:string">
<s:enumeration value="Executive"/>
<s:enumeration value="NonExecutive"/>
</s:restriction>
</s:simpleType>
    <s:element name="simulateResponse">
    <s:complexType>
    <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="simulateResult" type="tns:SimulationResult"/>
</s:sequence>
</s:complexType>
</s:element>
    <s:complexType name="SimulationResult">
    <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Ages" type="tns:ArrayOfInt"/>
<s:element minOccurs="0" maxOccurs="1" name="SSRates" type="tns:ArrayOfDecimal"/>
<s:element minOccurs="0" maxOccurs="1" name="ARRCORates" type="tns:ArrayOfDecimal"/>
<s:element minOccurs="0" maxOccurs="1" name="AGIRCRates" type="tns:ArrayOfDecimal"/>
<s:element minOccurs="0" maxOccurs="1" name="totalRates" type="tns:ArrayOfDecimal"/>
</s:sequence>
</s:complexType>
    <s:complexType name="ArrayOfInt">
    <s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="int" type="s:int"/>
</s:sequence>
</s:complexType>
    <s:complexType name="ArrayOfDecimal">
    <s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="decimal" type="s:decimal"/>
</s:sequence>
</s:complexType>
</s:schema>
</wsdl:types>
    <wsdl:message name="simulateSoapIn">
<wsdl:part name="parameters" element="tns:simulate"/>
</wsdl:message>
    <wsdl:message name="simulateSoapOut">
<wsdl:part name="parameters" element="tns:simulateResponse"/>
</wsdl:message>
    <wsdl:portType name="AnnuitySimulatorSoap">
    <wsdl:operation name="simulate">
<wsdl:input message="tns:simulateSoapIn"/>
<wsdl:output message="tns:simulateSoapOut"/>
</wsdl:operation>
</wsdl:portType>
    <wsdl:binding name="AnnuitySimulatorSoap" type="tns:AnnuitySimulatorSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="simulate">
<soap:operation soapAction="http://www.premiumconsulting.fr/simulate" style="document"/>
    <wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
    <wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
    <wsdl:binding name="AnnuitySimulatorSoap12" type="tns:AnnuitySimulatorSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="simulate">
<soap12:operation soapAction="http://www.premiumconsulting.fr/simulate" style="document"/>
    <wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
    <wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
    <wsdl:service name="AnnuitySimulator">
    <wsdl:port name="AnnuitySimulatorSoap" binding="tns:AnnuitySimulatorSoap">
<soap:address location="http://82.229.44.176/AnnuitySimulator/AnnuitySimulator.asmx"/>
</wsdl:port>
    <wsdl:port name="AnnuitySimulatorSoap12" binding="tns:AnnuitySimulatorSoap12">
<soap12:address location="http://82.229.44.176/AnnuitySimulator/AnnuitySimulator.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Le type de requette demandée :
POST /AnnuitySimulator/AnnuitySimulator.asmx HTTP/1.1
Host: 82.229.44.176
Content-Type: text/xml; charset =utf-8
Content-Length: length
SOAPAction: "http://www.premiumconsulting.fr/simulate"

<?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:Body>
<simulate xmlns="http://www.premiumconsulting.fr/">
<group>Executive or NonExecutive</group>
<salary>decimal</salary>
dateTime
</simulate>
</soap:Body>
</soap:Envelope>

Mon code :

$client = new SoapClient("http://82.229.44.176/AnnuitySimulator/AnnuitySimulator.asmx?WSDL");

$Reponse = $client-> __soapCall("simulate",array('group'=>"Executive",'salary'=>"30000",'birthDate'=>"01/06/1960"));

Aucune valeur ne me revient (valeurs des tableau nulles).
Je ne vois pas ce qui cloche ?

Merci de vos réponses et désolé pour la longueur du post.

5 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Hello,

et il y a quoi dans la fonction simulate () ?
Messages postés
3
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
21 septembre 2006

Hello malalam,

Pour la fonction, je ne sais pas.
Je pensais que je pouvais me passer de connaitre sa structure comme je connais ses arguments.

Mais je crois que ça serait utile de me renseigner, car en testant le webservice par http://www.soapclient.com/soapclient,
je me suis rendu compte que le format de la date est un peu spécial (ex : 2001-05-07T02:12:12Z).

En fait mon problème est de savoir quelle syntaxe utlisé :
- Soit l'exemple de mon code.
- Ou dans un formulaire post avec des parametres bien précis
- Ou intégrer dans mon code, un header avec le format demandé ( <?xml version="1.0" encoding="utf-8"?> ...)

Je ne sais pas vraiment comment intéroger le webservice et de quelle manniere envoyer ma requete.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Ben en théorie oui, on s'en fout, mais si ça ne marche pas...peut-être en effet que les paramètres ne sont pas bons.
En pratique, ta méthode est bonne.
Mais, comment sais-tu qu'elle ne renvoie rien? Comment le détectes-tu ?
Messages postés
3
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
21 septembre 2006

Voila ce que je recupere dans ma variable. Mais si tu me dis, qu 'en theorie, ma méthode est bonne, je chercherai dans mes parametres ce qui ne va pas.

stdClass Object
(
    [simulateResult] => stdClass Object
        (
            [Ages] => stdClass Object
                (
                    [int] => Array
                        (
                            [0] => 60
                            [1] => 61
                            [2] => 62
                            [3] => 63
                            [4] => 64
                            [5] => 65
                        )



                )




            [SSRates] => stdClass Object
                (
                    [decimal] => Array
                        (
                            [0] => 0
                            [1] => 0
                            [2] => 0
                            [3] => 0
                            [4] => 0
                            [5] => 0
                        )




                )




            [ARRCORates] => stdClass Object
                (
                    [decimal] => Array
                        (
                            [0] => 0
                            [1] => 0
                            [2] => 0
                            [3] => 0
                            [4] => 0
                            [5] => 0
                        )




                )




            [AGIRCRates] => stdClass Object
                (
                    [decimal] => Array
                        (
                            [0] => 0
                            [1] => 0
                            [2] => 0
                            [3] => 0
                            [4] => 0
                            [5] => 0
                        )




                )




            [totalRates] => stdClass Object
                (
                    [decimal] => Array
                        (
                            [0] => 0
                            [1] => 0
                            [2] => 0
                            [3] => 0
                            [4] => 0
                            [5] => 0
                        )




                )




        )




)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Ah, donc tu récupères quelquechose. C'est juste que les propriétés de l'objet sont vides (à part les âges?)
Bref, la requête passe, mais tu ne récupères pas ce que tu veux.
A mon avis, ouais, cherches dans les paramètres.Surtout que "Ages" est rempli.