Вызов функций Moodle из PHP через SOAP

У меня возникли трудности с запуском интерфейса моего PHP-скрипта с Moodle 2.0 через предоставляемую веб-службу SOAP. Не зная многого о SOAP, я решил просто подключиться и уйти оттуда. Но я не могу даже подключиться...

$soap=new SoapClient(
    'http://mymoodleserver/webservice/xmlrpc/server.php?wstoken=asdfasdfasdfasdfasdf',
    array(
        'trace'=>1,
        'exceptions'=>true,
        'cache_wsdl'=>WSDL_CACHE_NONE
    )
);

Это возвращает:

Неустранимая ошибка: необработанное исключение SoapFault: [WSDL] SOAP-ОШИБКА: разбор WSDL: не удалось загрузить...

Если бы я перешел по этому URL-адресу напрямую, данные не возвращались бы. Если посмотреть на это с помощью Fiddler, видно, что сервер действительно возвращает значение Content-Length, равное 0.

Я не смог найти никакой документации по этому вопросу... есть документация для других протоколов однако.

Я предполагаю, что SoapClient ожидает, что некий WSDL определит, какие функции доступный. У меня есть список этих функций и параметров (нет, благодаря странице официальной документации ). Как я могу указать SoapClient, чтобы он не беспокоился о WSDL и продолжал?

Я проверил наличие ошибок в журнале ошибок PHP на сервере Moodle, и он оказался чистым.


person Brad    schedule 06.04.2011    source источник


Ответы (2)


Способ использования режима без wsdl — добавить его в uri.

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
                                     'uri'      => "http://test-uri/"));

Ofocurse, используйте трассировку, а затем найдите getlastrequest и getlastresponse.

$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";

http://www.php.net/manual/en/soapclient.getlastrequest.php

Используйте xmlspy для легкой отладки.

person pal4life    schedule 24.04.2011

Ключ в ошибке, поэтому я начал смотреть документацию по Moodle, зная, чего ожидать, никакого WSDL.

Ознакомьтесь с документацией по SoapClient и документация для Moodle, как видите, Moodle не предлагает WSDL, поэтому вам нужно использовать SoapClient в не-WSDL-режим.

person Kristoffer Sall-Storgaard    schedule 06.04.2011