Небольшой вопрос по веб-сервисам ...
Есть веб-сервис http://www.crossroam.com/BARSWS/WS.asmxЕсть клиент на php который не работает =) Не могу понять в чем замес
Сам код
<?php
$debug = 1;
ini_set("soap.wsdl_cache_enabled", "0"); // disable WSDL cache
$parms = array(new SoapParam(
/* Значение параметра */
"RUS93",
/* Имя параметра */
"WispCarrierCode"
));
$qopts = array("soapaction"=>"http://www.t-systems.com/getAllowedProviders",'uri'=>"http://www.t-systems.com/getAllowedProviders");
$opts = array('location' => "http://www.crossroam.com/BARSWS/WS.asmx",
'uri' => "http://www.t-systems.com",
'trace' => 1,
'exceptions' => 1,
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL);
$client = new SoapClient(null, $opts);
$out = $client->__call('getAllowedProviders', $parms, $qopts);
echo "<pre>" . htmlspecialchars($client->__getLastRequest()) . "</pre>";
echo "<pre>" . htmlspecialchars($client->__getLastResponse()) . "</pre>";
var_dump($out);?>
В итоге если смотреть примеры xml-сообщений тут http://www.crossroam.com/BARSWS/WS.asmx?op=getAllowedProviders
И взять то что у меня, то мы увидим что запросы отличаются ... Если изменить style/use на RPC/ENC то вид становится более менее похожий но в ответ идет все то же пустое сообщение ...
Запрос
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<WispCarrierCode>RUS93</WispCarrierCode>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>Запрос RPC/ENC
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.t-systems.com" 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:Body>
<ns1:getAllowedProviders>
<WispCarrierCode xsi:type="xsd:string">RUS93</WispCarrierCode>
</ns1:getAllowedProviders>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>Ответ:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse... xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse...
<soap:Header>
<wsa:Action>http://www.t-systems.com/getAllowedProvidersResponse</wsa...
<wsa:MessageID>uuid:ba4ed5ab-0e18-427b-adf8-a61a6fa7c596</wsa:MessageID>
<wsa:RelatesTo>uuid:074a0b4d-c866-45c5-8b13-4e51ee42305c</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonym...
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-6a368585-4d8f-418d-a1c9-119fa5eb12e3">
<wsu:Created>2005-09-14T11:35:25Z</wsu:Created>
<wsu:Expires>2005-09-14T11:40:25Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<getAllowedProvidersResponse xmlns="http://www.t-systems.com">
<getAllowedProvidersResult />
<getAllowedProvidersResponse>
</soap:Body>
</soap:Envelope>У кого есть опыт работы с веб-сервисами из php средствами штатного soap?
>Запрос RPC/ENC
><?xml version="1.0" encoding="UTF-8"?>
><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.t-systems.com" 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:Body>
> <ns1:getAllowedProviders>
> <WispCarrierCode xsi:type="xsd:string">RUS93</WispCarrierCode>
> </ns1:getAllowedProviders>
></SOAP-ENV:Body>
></SOAP-ENV:Envelope>Здесь у WispCarrierCode не указан namespace, поэтому сервис его и не видит.
>$parms = array(new SoapParam(
> /* Значение параметра */
> "RUS93",
> /* Имя параметра */
> "WispCarrierCode"
> ));Попробуй для "WispCarrierCode" как-то указать namespace "http://www.t-systems.com" (не знаю, как это сделать в php); или, в качестве хака, заменить на "ns1:WispCarrierCode".
>>Запрос RPC/ENC
>><?xml version="1.0" encoding="UTF-8"?>
>><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.t-systems.com" 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:Body>
>> <ns1:getAllowedProviders>
>> <WispCarrierCode xsi:type="xsd:string">RUS93</WispCarrierCode>
>> </ns1:getAllowedProviders>
>></SOAP-ENV:Body>
>></SOAP-ENV:Envelope>
>
>Здесь у WispCarrierCode не указан namespace, поэтому сервис его и не видит.
>
>
>>$parms = array(new SoapParam(
>> /* Значение параметра */
>> "RUS93",
>> /* Имя параметра */
>> "WispCarrierCode"
>> ));
>
>Попробуй для "WispCarrierCode" как-то указать namespace "http://www.t-systems.com" (не знаю, как это сделать
>в php); или, в качестве хака, заменить на "ns1:WispCarrierCode".Огромнейшее спасибо!!!!! Действительно замена WispCarrierCode на ns1:WispCarrierCode помогла ...