2015-03-04 4 views
3

Я пытаюсь использовать SOAP-сервис Chaverweb. У меня есть WSDL; это here.PHP SOAP запрос не работает с WSDL

Когда я пытаюсь сделать простой запрос, например GetCWVersion, он работает, но всякий раз, когда я пытаюсь запросить функцию, которая потребует какой-то проверки подлинности, например Get_Syn_Comsend (получение информации об институте), она не работает.

Я попытался установить AuthHeader, как указано в WSDL, но он не работает.

Вот мой код. Я надеюсь, что есть что-то очевидно, что я не делаю, так как это мой первый раз работает с SOAP:

try { 
    $soapClient = new SoapClient('https://www.chaverweb.net/Synagogue.asmx?WSDL'); 
    $header = new SoapHeader('https://www.chaverweb.net/webservices/', 'AuthHeader', array("Username"=>"[email protected]", "Password"=>"...", "SynKey"=>"..."), false); 
    $header2 = new SoapHeader('https://www.chaverweb.net/webservices/', 'SFHeader', array("sf"=>""), false); 


    $soapClient->__setSoapHeaders(array($header, $header2)); 
    $versionResponse = $soapClient->Get_Syn_Comsend(); 
    print_r($versionResponse); 
} catch (SoapFault $exception) { 
    echo "Exception: " . $exception->getMessage(); 
} 

Это, кстати, дает мне: StdClass Object() Спасибо вам большое!

+0

Вы можете уточнить, что означает «не работает»? вы получили сообщение об ошибке? если да, то какая была ошибка. – castis

+0

Возвращает пустой stdClass - страница показывает stdClass Object() – maor10

+0

Форматирование и исправления грамматики. – AstroCB

ответ

4

, так что я сделал некоторые прямое тестирование, и это очень просто:

INVALID LOGIN возвращается на WSDL.

http://phpfiddle.org/main/code/3pvp-8wi9

Вы можете посмотреть мой код и тестирование здесь. Во время тестирования используйте их bulit в TestFunction() вместо функции, которую вы хотите запустить, таким образом вы можете увидеть, где ошибка. Дайте мне знать, как я могу помочь.

ПЕРЕД EDIT, это был мой ответ:

Сначала необходимо убедиться, что последний запрос вы послали, чтобы завершить функцию не имеет ошибок. Также проверьте, что ответ получен. Это может помочь отладить, почему вы получаете это для начала. Просто добавьте эти две строки кода и дайте нам знать, что вы видите:

print_r($soapClient->__getLastRequest()); 
print_r($soapClient->__getLastResponse()); 

Ключевым моментом здесь является, чтобы убедиться, вы получаете ответ правильно. Отправьте этот ответ, и я с радостью помогу вам его отладить.

Просто пища для размышлений, вот как бы я настроил этот запрос (это НЕ проверено), но определение в вашем wsdl показывает, что вам нужно использовать литерал, а SoapClient не всегда использует правильный тип документа при интерпретации ответ:

ini_set("soap.wsdl_cache_enabled", "0"); 
try { 
$options = array('trace'=>1, 
       'exceptions'=> 1, 
       'style'=> SOAP_DOCUMENT, 
       'use'=> SOAP_LITERAL 
       ); 

$soapClient = new SoapClient('https://www.chaverweb.net/Synagogue.asmx?WSDL',$options); 
$header = new SoapHeader('https://www.chaverweb.net/webservices/', 'AuthHeader', array("Username"=>"[email protected]", "Password"=>"demo1234!", "SynKey"=>"T21982011213"), false); 
    $header2 = new SoapHeader('https://www.chaverweb.net/webservices/', 'SFHeader', array("sf"=>""), false); 


    $soapClient->__setSoapHeaders(array($header, $header2)); 
    $versionResponse = $soapClient->Get_Syn_Comsend(); 

    print_r($versionResponse->Get_Syn_ComsendSoapOut); 

    } catch (SOAPFault $f) { 
    print $f; 
    } 

Надеюсь, это поможет в некотором роде! Отправить результаты для дальнейшей помощи :)

POST редактирования.К SimpleXml TEST: заменить:

print_r($versionResponse->Get_Syn_ComsendSoapOut); 

с этим:

$data = simplexml_load_file($versionResponse->Get_Syn_ComsendSoapOut); 
print_r($data); 

Посмотрите, что это дает вам, надеюсь, она либо бросает описательный ошибка или обрабатывает результат (очень редко, но возможно)!

+0

Пробовал добавление в ваших двух строках, и это то, что я получил: stdClass Object() Исключение: Функция ("_getLastRequest") не является допустимым методом для этой службы – maor10

+0

Тогда кажется, что она переносит ее на am xml, как формат. Вы пробовали просто simplexml_load_string? Не очень распространено, что это должно произойти. Он больше не рассматривает это как мыльный призыв. – lov2code

+0

У вас есть фактическая страница, которую вы тестируете, чтобы увидеть ответ? – lov2code

Смежные вопросы