通过SOAP从PHP调用Moodle函数

时间:2011-04-06 20:09:45

标签: php soap soap-client moodle

我很难开始通过提供的SOAP Web服务将我的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] SOAP-ERROR:解析WSDL:无法加载...

如果我直接转到此网址,则不会返回任何数据。使用Fiddler查看它显示服务器确实返回Content-Length为0。

我找不到任何关于此的文件......但是documentation for other protocols

我假设SoapClient期望某些WSDL定义可用的函数。我有一个这些函数和参数的列表(不,谢谢official documentation page)。如何指示SoapClient不要担心WSDL并继续?

我已经检查过Moodle服务器上的PHP错误日志中的错误,并且它显示为干净。

2 个答案:

答案 0 :(得分:1)

使用非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进行简单的调试。

答案 1 :(得分:0)

关键是错误,所以我开始查看Moodle的文档知道会发生什么,没有WSDL。

查看SoapClientdocumentation for Moodle的文档,因为您可以看到Moodle不提供WSDL,因此您需要在non-WSDL mode中使用SoapClient。