SOAP错误:解析WSDL:无法从“”加载,无法加载外部实体


9

在此处输入图片说明

我们正在为magento网站开发一个android应用。我们必须将SOAP API从magento传递到android,以获取会话ID。

通过以下链接,我们在magento管理面板中创建了SOAP Web用户和角色:

https://www.yireo.com/tutorials/magebridge/administration/596-step-by-step-create-a-magento-api-user

当我们尝试从android连接到magento时,出现错误。这是我们正在使用的链接:

http://videomergerapp.com/index.php/api/v2_soap/


1
您好-在您提供的链接上看不到错误;它说下来维护。
Garet Claborn 2015年

您好,很抱歉该网站正在维护中,请检查更新的问题。
婴儿在Magento

1
您是否尝试了上一个问题中的步骤?看起来确实与我的错误相同,该错误是由服务器的防火墙和NAT设置引起的。
Garet Claborn 2015年

1
当magento尝试获取一些资源时,它会向自身发出更多的SOAP请求,但与其使用本地主机,不如尝试使用本地主机,它会一直尝试使用外部IP和主机名。在我来说,我不得不打开防火墙的环回,并添加我的域名和外部IP的主机文件
杰拉尔德Claborn

好的,@ GaretClaborn,我将与服务器团队联系。
婴儿在Magento

Answers:


5

需要使用WSDL初始化SOAP服务器,以了解如何处理传入的请求(在Magento的情况下,它基本上是从指定的URL加载WSDL)。这发生在\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()

$this->_soap = new Zend_Soap_Server(
    $this->getWsdlUrl(array("wsdl" => 1)),
    array('encoding' => $apiConfigCharset)
);

请注意,它getWsdlUrl()基于您的Magento实例基本URL构造WSDL URL。这意味着如果无法从部署它的主机访问您的Magento存储,则SOAP服务器将无法在初始化期间加载WSDL。结果,您在尝试执行对Magento SOAP API的请求时会遇到此类错误。


以及如何解决这个问题?
亚历山德罗斯

将Magento实例主机添加到/etc/hosts服务器上。
Alex Paliarush

我确实添加了我的IP XXX.XXX.XXX.XXX www.example.com,但我仍然得到了同样的东西。我也尝试限制和ping整个域,并且它们起作用:(
Alexandros

您可以在该服务器上加载WSDL吗?
Alex Paliarush

1
不确定,尝试在附近调试\Mage_Api_Model_Server_Adapter_Soap::_instantiateServer()
Alex Paliarush16年

2

我遇到了同样的问题。我确实安装了需要访问soap api的orocrm桥,按照给定的步骤配置了soap角色和用户,然后尝试连接: 参数无效!

挖掘日志后,我确实注意到了此错误:

[2017-07-03 16:57:46] app.CRITICAL: MageCheck 
error: 0:  [message]           
SOAP-ERROR: Parsing WSDL: Couldn't load from 
'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity 
"https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"

[request]
<?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
            <ns1:login>
                <username xsi:type="xsd:string">orocrm</username>
                <apiKey xsi:type="xsd:string">***</apiKey>
            </ns1:login>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

[response]
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>WSDL</faultcode>
            <faultstring>
SOAP-ERROR: Parsing WSDL: Couldn't load from  'https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1' : 
failed to load external entity "https://my.magento.store/index.php/api/v2_soap/index/?wsdl=1"
            </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[code]              500   [] []

我弄清楚了为什么会遇到这个问题。实际上,这与orocrm无关,而与magento有关。那是防火墙的问题。实际上,我确实正确添加了规则,以允许crm服务器攻击magento api,但这一规则需要自己解决!因此,经过一番头痛之后,我只是在magento服务器的防火墙上添加一条规则,以允许其自身(magento服务器)访问自己的api(外部查找)...

无论如何,我希望这可以节省一些时间


1
感谢您的回答,很难解决这些与肥皂有关的问题,我知道很痛苦……
Magento的宝贝

0

我解决了在将CentOS / Apache / WHM / cPanel / Magento 1.9.4连接到ERP通过SOAP API v2的服务器中更新自动SSL证书的问题

在自动SSL日志中,我们有以下消息:

PM ERROR TLS状态:缺陷ERROR缺陷:OPENSSL_VERIFY:证书链未能通过OpenSSL验证(0:10:CERT_HAS_EXPIRED)

*在我的情况下,他的证书尚未过期,但是颁发者有一个特定的问题:https : //forums.cpanel.net/threads/sectigo-issue.673157/

这导致与api的连接失败,并显示以下消息:

SOAP错误:解析WSDL:无法从' https://www.example.com/api/v2_soap/?wsdl=1 '加载:无法加载外部实体“ https://www.example.com/api / v2_soap /?wsdl = 1

更新证书可以解决此问题。

我希望这可以帮助其他人

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.