【问题标题】:WSDL file loads in browser, but not in codeWSDL 文件在浏览器中加载,但不在代码中
【发布时间】:2013-11-27 05:08:24
【问题描述】:

我们正在尝试连接到我们的 magento soap/wsdl 后端,当我们在浏览器中加载 XML 文件时,我们可以很好地加载它。

http://<url>/index.php/api/v2_soap?wsdl

但是当我们通过 wsimport(java) 生成的客户端或者通过非常简单的 php 代码来实现时:

<?php
  $proxy = new SoapClient('http://<url>/index.php/api/v2_soap?wsdl');
  $sessionId = $proxy->login('test', 'test');

  var_dump($proxy->call($sessionId, 'customer.list'));
?>

我们得到以下错误:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: 
Parsing WSDL: Couldn't load from 'http://<url>/index.php/api/v2_soap?wsdl' : 
Start tag expected, 
'<' not found in /home/test/public_html/test_api.php:3 
Stack trace: 
#0 /home/test/public_html/test_api.php(3): 
SoapClient->SoapClient('http://<url>...') 
#1 {main} thrown in 
/home/test/public_html/test_api.php on line 3

如果我们在浏览器中打开与上面相同但没有?wsdl

http://<url>/index.php/api/v2_soap

它也会导致同样的解析错误。

用户名和api密钥正确,用户所在的组拥有完全权限。

更新: 我们还尝试了SoapUI,但出现了同样的错误。

这是我们从浏览器访问 URL 时得到的开始:

<wsdl:definitions xmlns:typens="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Magento" targetNamespace="urn:Magento">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
<xsd:complexType name="associativeEntity">
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="associativeArray">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:associativeEntity"/>
</xsd:sequence>
</xsd:complexType>

【问题讨论】:

    标签: java php magento soap wsdl


    【解决方案1】:

    我们只花了两天时间。解决这个问题的方法是打开位于System -&gt; Cache Management 下的Web Services Configuration 缓存。

    所以你应该从这里开始......

    到这个...

    【讨论】:

      【解决方案2】:

      如果即使在浏览器中打开解析错误仍然存​​在,那么我认为 SOAP 服务器中一定有一些错误(可能是语法错误)

      【讨论】:

      • 当我们在浏览器中打开它时它确实可以工作,只是当我们删除 wsdl 部分时就不行了。所以这适用于浏览器http://&lt;url&gt;/index.php/api/v2_soap?wsdl,但不适用于http://&lt;url&gt;/index.php/api/v2_soap
      • 我不确定如何获取请求 xml 或 SOAP 信封,因为它在从定义文件构建它们时崩溃,如果我正确理解了所有内容?您对如何打印它们有什么建议吗?
      • 您之前说过,您可以在浏览器中看到 wsdl,那么它显示了什么。你只能在那里找到 SOAP Envelope
      • 这是我访问 URL 时得到的 XML:pastebin.com/ZpKwqFzQ,但这真的是 SOAP 信封吗?
      • 你能发布你得到的 xml 的前 20 行吗
      【解决方案3】:
      <?php
          $soap_client = new SoapClient("http://<url>/index.php/api/v2_soap?wsdl");
          $info = new StdClass();
          $info->key = "test";
          $info->value = "test";
          $param = array($info);
          $result = $soap_client->__soapCall('customer.list',$param);
          var_dump($result);
      ?>
      

      试试这个代码.... 从xml 我看到您的wsdl 似乎不需要对连接进行任何身份验证。

      希望你能找到这段代码对你有所帮助...

      【讨论】:

        【解决方案4】:

        我也遇到了同样的问题,这个技巧帮了我大忙:

        我所做的只是:

        更改:

        http://<url>/index.php/api/v2_soap?wsdl
        

        http://<url>/index.php/api/v2_soap.wsdl
        

        注意问号“?”在第一个链接中替换为句点“。”在最后“wsdl”之前的第二个链接中。

        【讨论】:

          猜你喜欢
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-22
          • 1970-01-01
          • 2015-01-02
          • 2017-06-11
          • 2021-05-10
          相关资源
          最近更新 更多