Bonjour à tous.
je suis en train de me battre avec un épineux problème et j'en arrive presque à la déduction que c'est impossible à réaliser (mais cette déduction ne me satisfait que fort peu).
Je commence l'histoire depuis le début.
Il me faut envoyer via webservice des informations récoltées dans ma base de données. Jusque là, rien de bien complexe.
J'ai donc créer un classe avec une fonction "sendRequest" pour envoyer ma requete (le client étant défini dans mon constructeur):
Ce qui, je l'avoue fonctionne très bien quand $data est une sdtClass.
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 function __construct($config = array()) { $options = array( 'soap_version' => SOAP_1_1, //'features' => SOAP_SINGLE_ELEMENT_ARRAYS ); $this->client = new Zend_Soap_Client($this->_url, $options); $auth = new stdClass(); $auth->Username = $this->Username; $auth->Password = $this->Password; $header = new SoapHeader($this->namespace,"Credentials", $auth); $this->client->addSoapInputHeader($header,true); } function sendRequest($action, $data, $logThis = true) { $file = APPLICATION_PATH . $this->logFile . '-'. date("Ymd"). '.log'; try { var_dump($data); $retour = $this->client->$action($data); if ($logThis === true) { file_put_contents($file, '[' . date('Y-m-d H:i:s') . '] SENDED : ' . "\n" . $this->client->getLastRequest() . "\n" . print_r($retour, true) . "\n", FILE_APPEND); } } catch (Exception $ex){ file_put_contents($file, '[' . date('Y-m-d H:i:s') . '] EXCEPTION : ' . "\n" . $ex->getMessage() . "\n" . print_r($data, true) . "\n", FILE_APPEND); throw new Exception($ex->getMessage()); } return $retour; }
MAIS (car il y a un mais, quand même), j'ai une information qui dois se répéter.
Oui, selon l'xml d'exemple que le destinataire m'envoie, j'ai une balise qui se répète comme ceci:
(je ne mets pas l'XML intégralement, juste le passage intéressant, pour des raisons de confidentialité).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 ...<InterestedCars> <InterestedCar> <Model>i10</Model> <OrderBrochure></OrderBrochure> <OrderExtras></OrderExtras> <RequestTestdrive>1</RequestTestdrive> </InterestedCar> <InterestedCar> <Model>New Santa Fe</Model> <OrderBrochure></OrderBrochure> <OrderExtras></OrderExtras> <RequestTestdrive>1</RequestTestdrive> </InterestedCar> </InterestedCars>...
Cas que je ne sais pas reproduire avec mon objet stdClass (car il acceptera pas 2 paramètres différents portant le nom InterestedCar) .
J'ai bien entendu essayer d'utiliser un array pour mon paramètre InterestedCar mais ça ne passe pas.
J'ai donc pensé à LA solution qui me semblait tout indiquée: passer non pas une stdClass mais un xml directement.
Mais voilà, visiblement la validation de mon soap le rejete, car il considère que j'envoie juste la première balise et pas le reste ....
cherchant sur le net, je tombe sur ceci : http://stackoverflow.com/questions/1...ing-soapclient qui me propose d'envoyer un SimpleXMLElement, chose que je fait, à l'aide d'un var_dump au préalable, il me confirme bien l'entièreté de mon xml mais ... dans mon fichier de log j'obtiens dans mon getLastRequest mon enveloppe ... vide.
Alors que mon <ns1:request/> devrait être remplis d'une Balise, englobant, entre autre, ma balise InterestedCars.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="ZZZZZZZ"><SOAP-ENV:Header><ns1:Credentials><ns1:Username>XXXXXX</ns1:Username><ns1:Password>YYYYYY</ns1:Password></ns1:Credentials></SOAP-ENV:Header><SOAP-ENV:Body><ns1:AddCarPackage><ns1:request/></ns1:AddCarPackage></SOAP-ENV:Body></SOAP-ENV:Envelope>
Ma question est donc principalement:
Comment puis-je avec un Zend_Soap_Client passer directement le xml, partiel (juste mon SOAP-ENV:Body) ou intégral?
Ou alors comment reproduire une balise dans l'envoie xml à l'aide de mon stdClass (ou array)?
Est-ce seulement possible? j'imagine que oui.
j'espère avoir fournis assez d'information pour vous permettre de comprendre mon soucis (que je le traine depuis 3 jours)
Merci d'avance de votre aide.
Partager