我使用以下代码从我的localhost
获取magento商店的产品详细信息$proxy = new SoapClient('http://domain.com/magento/index.php/api/soap/?wsdl');
$sessionId = $proxy->login('username', 'apikey');
$filters = array(
'sku' => array('like'=>'test%')
);
$products = $proxy->call($sessionId, 'product.list', array($filters));
var_dump($products);
它适用于我的localhost机器但不适用于服务器。但是在服务器中启用了soap配置。以下是错误消息
“ SOAP-ERROR:解析WSDL:无法在中找到< definitions>”
当我使用以下网址时,我得到了相应的xml文件 http://domainname/shoponline/index.php/api/soap/?wsdl
我删除了index.php但没有得到任何结果。
$proxy = new SoapClient('http://domain.com/magento/index.php/api/soap/?wsdl');
以上陈述显示以下错误
Parsing WSDL: Couldn't find definitions in
答案 0 :(得分:2)
看起来根本没有加载WSDL XML文件。要进行调试,请尝试在浏览器中打开此文件。
我想它根本不会被加载而且你会收到错误(这会帮助你找出错误的地方)或者你会被要求输入用户名和密码(基本的HTTP身份验证)。在第二种情况下,请尝试将您的网址从http://domain.com/magento/index.php/api/soap/?wsdl
更改为http://user:pass@domain.com/magento/index.php/api/soap/?wsdl
答案 1 :(得分:2)
确保在index.php中禁用开发人员模式和错误报告。
答案 2 :(得分:0)
从C:\windows\system32\drivers\etc
打开“hosts”文件并注释掉::1
行(如下所示:# ::1
)或完全删除该行,然后保存该文件。
我也使用过这项服务 - http://localhost:81/magento/index.php/api/soap/?wsdl,它对我有用。
答案 3 :(得分:0)
SoapClient无法检索wsdl定义文件,这意味着未正确配置路由或发生某些外部错误。但很可能这是一个路由问题。 api / [type]重写规则在.htaccess中注释,因此您需要删除#符号或直接使用api.php。要使api.php直接工作,您需要将类型参数传递给api.php以指定您要使用的API协议。
例如,对于SOAP,它将是 - http://domain.com/magento/api.php?type=soap&wsdl。您也可以使用'soap_v2'。