Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2008, 14h17   #1
Invité de passage
 
Inscription : avril 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 9
Points : 2
Points : 2
Par défaut [SOAP] PHP5 - Types des paramètres

Bonjour à tous,

Je m'appelle Loïc, et moi aussi j'ai un petit souci.

Un problème de typage dans les paramètres d'entrés des méthodes plus exactement.

Je construit simplement un client SOAP.

La création de l'objet client se passe sans problème, et j'utilise les méthodes :

Code :
$client->__getFunctions();
Ce qui me donne :

Code :
1
2
3
4
5
6
7
8
[0] => SubmitXmlResponse SubmitXml(SubmitXml $parameters)
[1] => MultiSubmitXmlResponse MultiSubmitXml(MultiSubmitXml $parameters)
[2] => BeginSessionResponse BeginSession(BeginSession $parameters)
[3] => EndSessionResponse EndSession(EndSession $parameters)
[4] => SubmitXmlOnSessionResponse SubmitXmlOnSession(SubmitXmlOnSession $parameters)
[5] => SubmitTerminalTransactionResponse SubmitTerminalTransaction(SubmitTerminalTransaction $parameters)
[6] => GetIdentityInfoResponse GetIdentityInfo(GetIdentityInfo $parameters)
[7] => SubmitCruiseTransactionResponse SubmitCruiseTransaction(SubmitCruiseTransaction $parameters)

Puis,
Ce qui me donne :

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
[0] => struct SubmitXml { string Profile; Request Request; Filter Filter; }
[1] => struct Request { any; }
[2] => struct Filter { any; }
[3] => struct SubmitXmlResponse { SubmitXmlResult SubmitXmlResult; }
[4] => struct SubmitXmlResult { any; }
[5] => struct MultiSubmitXml { string Profile; Requests Requests; }
[6] => struct Requests { any; }
[7] => struct MultiSubmitXmlResponse { Responses Responses; }
[8] => struct Responses { any; }
[9] => struct BeginSession { string Profile; }
[10] => struct BeginSessionResponse { string BeginSessionResult; }
[11] => struct EndSession { string Token; }
[12] => struct EndSessionResponse { }
[13] => struct SubmitXmlOnSession { string Token; Request Request; Filter Filter; }
[14] => struct Request { any; }
[15] => struct Filter { any; }
[16] => struct SubmitXmlOnSessionResponse { SubmitXmlOnSessionResult SubmitXmlOnSessionResult; }
[17] => struct SubmitXmlOnSessionResult { any; }
[18] => struct SubmitTerminalTransaction { string Token; string Request; string IntermediateResponse; }
[19] => struct SubmitTerminalTransactionResponse { string SubmitTerminalTransactionResult; }
[20] => struct GetIdentityInfo { string Profile; }
[21] => struct GetIdentityInfoResponse { GetIdentityInfoResult GetIdentityInfoResult; }
[22] => struct GetIdentityInfoResult { any; }
[23] => struct SubmitCruiseTransaction { string Profile; string CorrelationToken; Transactions Transactions; }
[24] => struct Transactions { any; }
[25] => struct SubmitCruiseTransactionResponse { Response Response; string CorrelationToken; }
[26] => struct Response { any; }
La méthode qui m'intéresse est la première, c'est à dire "SubmitXmlResponse SubmitXml(SubmitXml $parameters)"

Voilà comment je comprends le truc :
il me faut un seul paramètre de type "SubmitXml".
Et ce type de donnée est en fait une Structure se composant de trois informations : une de type String, une de type Request, une de type Filter.
Et, enfin, même chose pour ces deux derniers types, ce sont en fait des Structure contenant une information de nature non précise.

Mais voilà... des Structures en php ?

A quoi cela correspond t-il ?

j'ai tenté plusieurs codes que voici :

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
<?php
 
class SOAPProfile {
    function SOAPProfile($prof) {
        $this->Profile = $prof;
    }
}
 
class SOAPRequest {
    function SOAPRequest($req) {
        $this->Request = $req;
    }
}
 
class SOAPFilter {
    function SOAPFilter($filt) {
        $this->Filter = $filt;
    }
}
 
$structPro = new SOAPProfile('DynCopy_AFRG');
$structReq = new SOAPRequest($requete_temp);
$structFil = new SOAPFilter('<_ xmlns=""/>');
$varStructPro = new SoapVar($structPro, SOAP_ENC_OBJECT, "Profile");
$varStructReq = new SoapVar($structReq, SOAP_ENC_OBJECT, "Request");
$varStructFil = new SoapVar($structFil, SOAP_ENC_OBJECT, "Filter");
$result_temp = $client->SubmitXml(new SoapParam($varStructPro, "Profile"), new SoapParam($varStructReq, "Request"), new SoapParam($varStructFil, "Filter"));
 
?>
et

Code :
1
2
3
4
5
6
7
8
9
<?php
 
	$TProfile['Profile'] = 'DynCopy_AFRG';
	$TRequest['Request'] = $requete_temp;
	$TFilter['Filter'] = '<_ xmlns=""/>';
 
	$result_temp = $client->SubmitXml('DynCopy_AFRG', array($TRequest), array($TFilter));
 
?>
Dans les deux cas, la même erreur :

Code :
1
2
3
4
5
6
7
8
SoapFault exception: [soapenv:Server.userException]
Uncaught Service Exception cause:com.tds.soa.framework.ServiceException:
Required parameters for method SubmitXml are null.
The following is the payload received from Broker in /home/site/www/module/recherche.php:298 Stack trace:
#0 [internal function]: SoapClient->__call('SubmitXml', Array)
#1 /home/site/www/module/recherche.php(298): SoapClient->SubmitXml(Array)
#2 /home/site/www/index.php(77): include_once('/home/site/w...') 
#3 {main}
Pour information, le message complet que je dois envoyer se constitue de la forme :

<Profile>DynCopy_AFRG</Profile>
<Request>ici_se_trouve_ma_requete</Request>
<Filter><_ xmlns=""/></Filter>

D'après ce shema, on comprend donc bien à quoi correspond les 3 paramètres de la méthode SubmitXml.

Mon problème est donc de savoir comment appeler proprement cette méthode SubmitXml, avec le bon format d'argument.

Merci à tous.

Help
loicmaxinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2008, 17h54   #2
Invité de passage
 
Inscription : avril 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 9
Points : 2
Points : 2
Je rajouterai un bout du WDSL :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<s:element name="SubmitXml">
  <s:complexType>
    <s:sequence>
      <s:element maxOccurs="1" minOccurs="0" name="Profile" type="s:string" />
      <s:element maxOccurs="1" minOccurs="0" name="Request">
        <s:complexType>
          <s:sequence>
            <s:any />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element maxOccurs="1" minOccurs="0" name="Filter">
        <s:complexType>
          <s:sequence>
            <s:any />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:sequence>
  </s:complexType>
</s:element>
Merci
loicmaxinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 10h20   #3
Invité de passage
 
Inscription : avril 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 9
Points : 2
Points : 2
Re bonjour,

Personne ne m'a aidé, je suis triste, mais ce n'est pas bien grave car j'ai trouvé !

Je faisais fausse route avec mes "SoapVar" et "SoapParam". Un simple tableau (pas si simple d'ailleurs...) suffit.

Je mettrai ma solution détaillée bientôt, si ça dit à quelqu'un.

Bisous à tous !
loicmaxinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2008, 12h42   #4
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 598
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 598
Points : 123
Points : 123
Salut,

Moi ça m'intéresse carrément ta solution.
Je suis en rade depuis une semaine avec un webservice de m*****

http://www.developpez.net/forums/showthread.php?t=538346

pour lequel on ne donne aucune info ni aucun exemple en ce qui concerne
la connexion et le passage des paramètres. En gros c'est: "débrouillez vous!".

C'est pas dis que ta soluce m'aidera, mais vu le peu d'infos dispo
sur le net je suis preneur de tout ce qui a un rapport de près ou de loin.

Voilà, j'attends ta soluce avec impatience.
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 15h22   #5
Invité de passage
 
Inscription : avril 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 9
Points : 2
Points : 2
Bonjour à tous,

Je vous met la solution au cas où quelqu'un serait intéressé :

Il s'agissait dans mon cas d'un problème de format des paramètres passés à la fonction "$client->SubmitXml('DynCopy_AFRG', $param)".

Pour rappel, voilà la forme du message que j'ai à envoyer :

Code :
1
2
3
<Profile>DynCopy_AFRG</Profile>
<Request>ici_se_trouve_ma_requete</Request>
<Filter><_ xmlns=""/></Filter>
Il me faut donc trois types de données.

Ensuite, j'ai procédé à un changement de plan : je n'utilise plus l'appel de la fonction sous la forme "$client->SubmitXml('DynCopy_AFRG', $param)" mais "$client->__soapCall('SubmitXml', $param)"

Je ne sais pas pourquoi, impossible de le faire fonctionner avec la première méthode.

Maintenant voilà la forme de ma donnée : $param :

Code :
1
2
3
4
5
6
7
$param = array(array(
	"Profile" => "DynCopy_AFRG",
	"Request" => array("any" => $requete_temp),
	"Filter" => array("any" => '<_ xmlns=""/>')
));
 
$result = $client->__soapCall('SubmitXml', $param);
Voilà, amusez vous bien

PS : le type "any" dans mon tableau $param correspond simplement au type de donnée attendu d'après la liste des méthodes et des données affichée lors de mon premier post.
loicmaxinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web