Вызов функций Moodle из PHP через SOAP - PullRequest
2 голосов
/ 07 апреля 2011

У меня возникают трудности с подключением моего скрипта 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-ERROR: синтаксический анализ WSDL: не удалось загрузить ...

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

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

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

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

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Способ использования режима без 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 для простой отладки.

0 голосов
/ 07 апреля 2011

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

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

...