这可能是一个新手脸上的问题,但我无法弄清楚这一点。我正在使用来自Magento商店的Web服务(即Magento商店中的代码正在访问远程Web服务)。在这种情况下,我有一个我需要引用的本地WSDL文件。在使用远程URL到WSDL文件之前我已经完成了这个,并且工作正常。但是,使用本地文件,我无法弄清楚如何引用它。我把它放在网站根目录的 wsdl 子目录中,然后我可以使用 http://mysite/wsdl/thefile.wsdl 引用它。 。但是,我更喜欢使用相对路径来引用它(主要是因为我计划将相同的代码部署到不同的站点,并且我想为所有站点使用相同的代码)。
我想我的问题归结为:当您实例化PHP的SoapClient实例时,如$client = new SoapClient("thefile.wsdl")
,它在哪里寻找 thefile.wsdl ?我认为实例化SoapClient的PHP文件是本地的,但是当我将文件放在同一个文件夹中时它不起作用。我尝试了 / includes 目录以及 app / code / local 。
我确信这对于经验丰富的程序员来说并不是一件容易的事情,但有时基础知识会暗示我......
答案 0 :(得分:3)
神秘解决了!这对大多数人来说可能是显而易见的,但我必须学习它,所以也许其他人也会从中受益。
我没有意识到,由于Magento的设计,所有页面的“根”都是/index.php。每个页面都是从那里加载的,所以当然它是根。当您尝试实例化SoapClient时,它会查找主根脚本文件的目录,而不是当前模块/类文件。我可以将WSDL文件放在Web服务器的根目录中并成功加载它们(我想我之前没有尝试过......)。
我现在所做的是将它们移动到/ media目录,然后通过使用getBaseDir('media')
获取媒体目录,在我的子目录路径上添加以及VIOLA来调用它们。
答案 1 :(得分:2)
我不是一个肥皂家伙,但你的问题没有意义。 Soap是一种通过HTTP进行远程方法调用的协议。 WSDL文件是客户端从远程服务器请求的文件,用于询问可用的方法以及可以和应该如何调用它们。 “本地WSDL文件”没有意义。
答案 2 :(得分:0)
如果您的问题是关于magento,那么您应该创建模块。创建wsdl.xml(以编目目录的模块wsdl.xml和api.xml文件为例)。
有关magento soap api here
的更多信息更新1
如果服务在另一台主机上,那么您应该能够以与magento服务消费相同的方式使用。
查看此link关于zend的fm
答案 3 :(得分:0)
您需要使用Magento的内置函数来生成本地文件路径。将WSDL存储在媒体目录中可能并不明智,因为这是可公开访问的(这可能是WSDL未远程托管@AlanStorm的原因)。
我建议您将文件存储在自定义模块的etc
目录中。示例代码:
$vWsdlPath = Mage::getModuleDir('etc', 'YourModule_NameHere').'/wsdl/SomeFile.wsdl';
$soap = new Zend_Soap_Client($vWsdlPath, $aOptions);