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 :
Ce qui me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $client->__getFunctions();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part $client->__getTypes();
La méthode qui m'intéresse est la première, c'est à dire "SubmitXmlResponse SubmitXml(SubmitXml $parameters)"
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 [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; }
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 :
et
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 <?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")); ?>
Dans les deux cas, la même erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)); ?>
Pour information, le message complet que je dois envoyer se constitue de la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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}
<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
Partager