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


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

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

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

Фатальная ошибка: непойманные SoapFault исключение: [WSDL-файл] мыло-ошибка: разбор WSDL-описание: не удалось загрузить...

Если я перейду на этот URL напрямую, никакие данные не будут возвращены. Глядя на него с помощью Fiddler показывает, что сервер действительно возвращает содержимое длиной 0.

Нет никакой документации по этому вопросу, которую я мог бы найти... однако существует документация для других протоколов.

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

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

2 2

2 ответа:

В сторону, чтобы использовать в режиме WSDL-файл, чтобы добавить его к URI

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

Ofocurse, используйте trace, а затем ищите getlastrequest и getlastresponse

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

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

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

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

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