Использование SOAP в PHP5

alexn

Guest
Использование SOAP в PHP5

Привет народ!
Есть вот такой код:
PHP:
ini_set("soap.wsdl_cache_enabled", 0);

$oSoap = new SoapClient("http://webservices.fujifilmesys.com/venus/FES.WWWServices/Standard.Secure.Client/SecClient.asmx?WSDL", array('trace' => TRUE));


echo "<pre>";
try {
    $oRet = $oSoap->LoginApplication('LALA-LALA-LALA-LALA');
    echo "<strong>Data: </strong>:\n";
    print_r($oRet);
} catch (SoapFault $exception) {
    echo "<strong>Error: </strong>:\n";
    print_r($exception);
}


echo "\n\n\n<strong>REQUEST-DATA output</strong>:\n";
echo "\n<strong>Headers</strong>:\n";
echo htmlspecialchars($oSoap->__getLastRequestHeaders());
echo "\n<strong>Request:</strong>\n" . htmlspecialchars($oSoap->__getLastRequest()) . "\n";

echo "\n<strong>RESPONSE-DATA input</strong>:\n";
echo "\n<strong>Headers</strong>:\n";
echo htmlspecialchars($oSoap->__getLastResponseHeaders());
echo "\n<strong>Response:</strong>\n" . htmlspecialchars($oSoap->__getLastResponse()) . "\n";

echo "</pre>";
Помогите понять почему конверт отправляемого запроса выглядит совсем не так как показано в http://webservices.fujifilmesys.com/venus/FES.WWWServices/Standard.Secure.Client/SecClient.asmx?op=LoginApplication ведь используем стандарный wsdl и стандартную процедуру SOAP.
У меня конверт имеет сл. вид:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="FES.WWWServices/SecClient">
 <SOAP-ENV:Body>
  <ns1:LoginApplication/>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Нет ни параметров для LoginApplication ни вложенного тега appKey.

Попробовал использовать свой wsdl-файл - вставить эти теги удалось, но это решение мне не годится - мне нужно, чтобы он работал с "родным" wsdl-файлом.

Или это баг встроенного SOAP?

P. S. Пробовали запускать этот SOAP на dotnet - обмен данными идет нормально.
 

chameleon

Новичок
прпробуй вместо:
PHP:
$oRet = $oSoap->LoginApplication('LALA-LALA-LALA-LALA');
передать:
PHP:
$param->appKey='LALA-LALA-LALA-LALA';
$oRet = $oSoap->LoginApplication($param);
 

MiRacLe

просто Чудо
PHP:
$params = array('appKey' => 'LALA-LALA-LALA-LALA');
$oRet = $oSoap->LoginApplication($params);
 

alexn

Guest
chameleon
MiRacLe
Спасибо огромное - работают оба варианта!!!!!!

Я с этой проблемой уже второй день бьюсь. Никогда не думал, что решение будет вот таким!! :eek:
Но мне все-таки по душе больше второй вариант, т.к. в нем можно обойтись без всмомогательной переменной $params:
PHP:
$oRet = $oSoap->LoginApplication(array('appKey' => 'LALA-LALA-LALA-LALA'));
Любопытно все-таки, что когда мои коллеги пробовали это SOAP-соединение на dotnet, говорят, что там они никакого хеша не использовали - просто передавали аргумент как строку. :confused:
 

MiRacLe

просто Чудо
alexn
рекомендации собаководов: WSDL Validator - крайне удобно проверять валидность, "инвочить" методы и узнавать имена их параметров
 
Сверху