[Web Service] PHP5 SOAP => Modification et formatage des headers SOAP
Bonjour,
Je dois développez un appli php pour se connecter à un webservice (serveur AXIS).
On m'a fournit une appli VB qui tourne sur laquelle je me base.
Mon soucis c'est qu'en PHP le login + password ne semble pas être bon.
Code php
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 33 34 35 36 37
|
<?php
$url_mm="http://ws.xxxxxx:7777/xxxxx/xxxxx/xxxxxx?wsdl";
$params = array (
'trace' => 1
);
$ns = 'xxxxxx'; //Namespace of the WS.
$client = new SoapClient($url_mm, $params);
$headerbody = array(
'user'=>'xxxxx',
'Password'=>'xxxxx'
);
$header = new SOAPHeader($ns, 'Principal', $headerbody);
$client->__setSoapHeaders($header);
$client->__soapCall(
'getMakes',
array(
'FR',
'FR',
1,
new soapVar(
'2009-12-12',
XSD_DATE
)
)
);
?> |
Le code VB qui fonctionne pour une autre methode, envoi le xml suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Dim requeteSOAP As String = "<?xml version=" + """1.0"" encoding=""utf-8""?>" + ControlChars.Lf
requeteSOAP += "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">" + ControlChars.Lf
requeteSOAP += "<soapenv:Header>" + ControlChars.Lf
requeteSOAP += "<ns1:Principal soapenv:mustUnderstand=""0"" xmlns:ns1=""xxxxxxxx"">" + ControlChars.Lf
requeteSOAP += "<ns1:user>xxxxxx</ns1:user>" + ControlChars.Lf
requeteSOAP += "<ns1:password>xxxxxx</ns1:password>" + ControlChars.Lf
requeteSOAP += "</ns1:Principal>" + ControlChars.Lf
requeteSOAP += "<ns2:underlying-user soapenv:mustUnderstand=""0"" xmlns:ns2=""xxxxxx""></ns2:underlying-user>" + ControlChars.Lf
requeteSOAP += "</soapenv:Header>" + ControlChars.Lf
requeteSOAP += "<soapenv:Body>" + ControlChars.Lf
requeteSOAP += "<getModels soapenv:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">" + ControlChars.Lf
requeteSOAP += "<targetMarket xsi:type=""xsd:string"">FR</targetMarket>" + ControlChars.Lf
requeteSOAP += "<transactionMarket xsi:type=""xsd:string"">FR</transactionMarket>" + ControlChars.Lf
requeteSOAP += "<vehicleType xsi:type=""xsd:int"">"+ vehicleType +"</vehicleType>" + ControlChars.Lf
Dim strDate As string = DateTime.Now.ToString("yyyy-MM-dd")
requeteSOAP += "<searchDate xsi:type=""xsd:date"">"& strDate &"</searchDate>" + ControlChars.Lf
requeteSOAP += "<registrationDate xsi:type=""xsd:date"">"+ RegDate +"</registrationDate>" + ControlChars.Lf
requeteSOAP += "<yearModel xsi:type=""xsd:int"">"& Request.Form("cmbMillesimes") &"</yearModel>" + ControlChars.Lf
requeteSOAP += "<makeOID xsi:type=""xsd:int"">"+ makeOID +"</makeOID>" + ControlChars.Lf
requeteSOAP += "</getModels>" + ControlChars.Lf
requeteSOAP += "</soapenv:Body>" + ControlChars.Lf
requeteSOAP += "</soapenv:Envelope>" |
Le code xml généré capturé par tcpdump
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
|
POST /xxxxx/xxxxx/xxxxxxx HTTP/1.1
Host: ws.xxxxxx:7777
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.2.6-1+lenny3
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 914
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="xxxxxxxx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns1:Principal>
<item><key>user</key><value>xxxx</value></item>
<item><key>Password</key><value>xxxx</value></item>
</ns1:Principal>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:getMakes>
<targetMarket xsi:type="xsd:string">FR</targetMarket>
<transactionMarket xsi:type="xsd:string">FR</transactionMarket><vehicleType xsi:type="xsd:int">1</vehicleType>
<searchDate xsi:type="xsd:date">2009-12-12</searchDate><registrationDate xsi:nil="true"/>
<yearModel xsi:nil="true"/>
</ns1:getMakes>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> |
Est-ce que mon soucis viendrait du fait que ce qui est envoyé en PHP pour le user et password contient les balises item et value en + comparé à VB?
Si oui comment puis-je faire pour enlever ses balises? ou au mieux procédé comme le VB, c'est à dire fournir le même xml à ce web service
Merci beaucoup