Вызов функций 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 ответа:
В сторону, чтобы использовать в режиме 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 режиме.