Magento 致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:解析架构:can';t从';http://schemas.xmlsoap.org/soap/encoding/'

Magento 致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:解析架构:can';t从';http://schemas.xmlsoap.org/soap/encoding/',magento,soap,wsdl,Magento,Soap,Wsdl,首先,我很抱歉地说,我把这些问题放在这里,因为在stackoverflow中有这么多相同的问题。但它似乎不适合我 我多次使用MagentoSOAP2API,这个错误并不经常发生。但是当我今天运行脚本时,它总是犯一个致命的错误 我已经找到了一些方法来解决这个问题,例如,一些文章告诉我在/app/code/core/Mage/Api/etc/wsdl.xml中更改此代码 Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Par

首先,我很抱歉地说,我把这些问题放在这里,因为在stackoverflow中有这么多相同的问题。但它似乎不适合我

我多次使用MagentoSOAP2API,这个错误并不经常发生。但是当我今天运行脚本时,它总是犯一个致命的错误

我已经找到了一些方法来解决这个问题,例如,一些文章告诉我在/app/code/core/Mage/Api/etc/wsdl.xml中更改此代码

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: can't import schema from 'http://schemas.xmlsoap.org/soap/encoding/'

对此

<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemalocation="http://schemas.xmlsoap.org/soap/encoding/">
</import> 

我遵循了这个,但它又犯了一个错误,如下所示

<!-- 
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />
-->  
致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:分析架构:架构中意外
然后我不知道出了什么问题,因为这个脚本总是运行得很好,但今天,我甚至不更改任何代码行。我的问题是,, 1、有什么办法解决吗? 2、我是否可以将这个xmlsoap.org xml文件设置为本地主机或我自己的服务器,这样我的脚本就不会依赖于服务器上的文件


提前谢谢你

首先,请不要篡改任何Magento API V2 WSDL配置文件的默认元素。这是一条基本规则

请记住在每个自定义WSDL文件的开头编写以下元素,或者确保在目标现有模块的WSDL文件的开头存在以下元素:-

  • 定义
    ”元素(
    -开始标记)
  • 类型
    ”元素(
    -开始标记)
  • schema
    ”元素(
    -start标记)
  • import
    ”元素(
    -单例标记,不带结束标记)
  • 然后,您可以继续为该自定义模块定义MagentoAPIv2的复杂数据类型

    通过查看一些现有的MagentoAPIv2WSDL文件,您可以很好地了解所有这些文件的概念


    现在回到你们的问题上来

    1。有什么办法解决吗? 如前所述,请在WSDL文件的开头维护上述元素定义

    import
    ”语句应该是:-

    没有结束标记。 属性名称也是“
    schemaLocation
    ”&而不是“
    schemaLocation
    ”。请跟着骆驼皮走


    2。我可以将这个xmlsoap.org xml文件设置为本地主机或我自己的服务器,这样我的脚本就不会依赖于服务器上的文件吗?

    是的,你可以,但你需要知道并保持两个关键点:-

  • 根据W3C规范,两个属性“
    名称空间
    ”&“
    模式位置
    ”必须为URI类型。因此,这两个属性的本地文件也必须在本地浏览器中使用HTTP协议进行访问
  • 如果您在本地硬盘中维护它,那么您就忘记了升级的一条黄金法则,即SOAP/1.1编码文件的模式。这是因为如果(仅当)W3C在相同的URI中升级此文件,那么如果提供了通用URI,您的Magento将能够自动获取它;否则,您需要将该升级文件再次下载到服务器
  • 除了这两点,一切都很好&你可以走了


    然而,我希望我已经回答了你所有的问题。希望有帮助。

    使用如下代码:

    //创建soap对象

    Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: unexpected <import> in schema
    
    //使用api用户名和api密钥创建授权会话id

    `$proxy = new SoapClient('http://localhost/magento/index.php/api/soap/?wsdl');`
    
    $sessionId=$proxy->login('apiUser','apiKey');
    $productinfo=$proxy->call($sessionId,'product.info',16);
    回声“;打印(productinfo);
    
    只是一些可接受解决方案的细节。

  • 在浏览器中输入架构位置的地址:

  • 将浏览器中的XML结果保存在名为
    encoding.xsd
    的文件中(将文件另存为)

  • 将此文件复制到您的magento web根目录,例如
    /var/www/magento/
  • 从magento根文件夹中搜索wsd*.xml文件中的所有schemaLocation条目,例如使用
    find-名称“wsdl*.xml”| xargs grep schemaLocation 2>/dev/null | grep org

    在我的系统上./app/code/core中有12个匹配文件./app/code/local中有2个来自第三方扩展名的匹配文件
  • 每匹配一个xml文件,在中更改一行


    备注:在这种情况下,encoding.xsd文件比
    api路径高4个目录http://sampleshop.com/testsystem/index.php/api/v2_soap/?wsdl

    在您的实时系统中,2(不带index.php)或3(带index.php)次
    。/“
    可能是正确的

  • 尝试从本地和远程服务器进行SOAP调用
    示例脚本

    这个解决方案对我很有效,只是想添加一些细节,因为它需要一些时间才能运行。
    系统:magento CE 1.7.0.2
    SOAP:php SOAP在magento服务器上使用php 5.3版,在远程服务器上使用php 5.6版

  • 科祖尔

    $sessionId = $proxy->login('apiUser', 'apiKey');
    
    $productinfo = $proxy->call($sessionId, 'product.info',16);
    echo "<pre>";print_r($productinfo);