2011-04-06 131 views
2

我在开始通过SOAP Web服务提供接口我的PHP脚本到Moodle 2.0时遇到困难。由于不太了解SOAP,我想我会简单地连接并从那里出发。但是,我甚至无法连接...通过SOAP从PHP调用Moodle函数

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

这将返回:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load...

如果我直接去这个网址,不会返回任何数据。看着它与提琴手表明,该服务器确实返回一个内容长度为0.

没有任何文档,我可以找到...有documentation for other protocols但是。

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

我检查了Moodle服务器上的PHP错误日志中的错误,并且它变得干净。

回答

1

使用非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,以便于调试。