2013-02-11 49 views
2

我爲Magento Enterprise 1.11創建了一個自定義API。通過Soap v1調用API可以在本地開發環境中正常工作,但是我無法從本地環境調用遠程環境。Magento Soap API本地工作但不是遠程工作

我localdev使用PHP交互的shell:

php > $client = new SoapClient(WSDL_URI,array('trace'=>1)); 
php > $client->login(API_USER,API_KEY); 
php > var_dump($client->__getLastResponse()); 
string(538) "<?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:loginResponse><loginReturn xsi:type="xsd:string">f0eec73e49665aaf9cc4a6644fba5dc6</loginReturn></ns1:loginResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> 

我已經能夠從本地主機成功地做到這一點,以及我的開發機器上運行兩個本地虛擬機之間。我也可以訪問我的自定義API的方法而沒有問題。但是,當我嘗試將肥皂客戶端添加到遠程測試環境時,我可以創建客戶端,但調用$ client-> login()或任何後續調用將導致以下結果:

php > $client = new SoapClient(REMOTE_WSDL_URI,array('trace'=>1)); 
php > $client->login(API_USER,API_KEY); 
PHP Warning: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://REMOTE_HOST/index.php/api/index/index/wsdl/1/' : failed to load external entity "http://REMOTE_HOST/index.php/api/index/index/wsdl/1/" in php shell code:1 
Stack trace: 
#0 php shell code(1): SoapClient->__call('login', Array) 
#1 php shell code(1): SoapClient->login(API_USER, API_KEY) 
#2 {main} 
php > var_dump($client->__getLastRequestHeaders()); 
string(255) "POST /index.php/api/index/index/ HTTP/1.1 
Host: REMOTE_HOST 
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.3.18-1~dotdeb.0 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "urn:Mage_Api_Model_Server_HandlerAction" 
Content-Length: 550 

php > var_dump($client->__getLastResponseHeaders()); 
string(840) "HTTP/1.1 500 Internal Service Error 
Date: Mon, 11 Feb 2013 19:06:56 GMT 
Server: Apache/2.2.16 (Debian) 
X-Powered-By: PHP/5.3.19-1~dotdeb.0 
Set-Cookie: PHPSESSID=7uqrcmiv96hroubnb1uu7c7cm6; expires=Wed, 13-Feb-2013 01:06:56 GMT; path=/; domain=.REMOTE_HOST; HttpOnly 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: CUSTOMER=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.REMOTE_HOST; httponly 
Set-Cookie: CUSTOMER_INFO=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.REMOTE_HOST; httponly 
Set-Cookie: CUSTOMER_AUTH=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.REMOTE_HOST; httponly 
Content-Length: 468 
Vary: Accept-Encoding 
Connection: close 
Content-Type: text/xml; charset=utf-8 

php > var_dump($client->__getLastResponse()); 
string(468) "<?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 'http://REMOTE_HOST/index.php/api/index/index/wsdl/1/' : failed to load external entity "http://REMOTE_HOST/index.php/api/index/index/wsdl/1/" 
</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope> 

當我點擊//REMOTE_HOST/index.php/api/?wsdl時,我得到了標準的Magento WSDL。

兩個環境是99.99%相同:

  • 服務器版本:阿帕奇/ 2.2.16(Debian的)(二者本地開發和遠程)
  • PHP 5.3.18(本地DEV)5.3.19 (遠程主機)
  • Apache/PHP配置是相同的。
  • 代碼庫是相同

我已經沖刷爲線索intewebs,包括:

我試過sedond-to-last鏈接中提到的「Content-Length」頭部修補程序,以及其他所有我能想到的內容......難以置信。

回答

13

雖然您可以從計算機加載WSDL URL(http://REMOTE_HOST/index.php/api/index/index/wsdl/1/),但您的遠程服務器無法通過其REMOTE_HOST與自己聯繫。

PHP的SoapServer對象(由Magento的實現使用)需要聯繫WSDL以瞭解哪些方法公開。

由於我從來沒有想到的原因,這是服務器無法訪問它自己的DNS條目的常見網絡配置。通過SSH連接到你的服務器,並嘗試運行以下

curl http://REMOTE_HOST/index.php/api/index/index/wsdl/1/ 

我的猜測是,你會得到一個網絡超時或REMOTE_HOST未知錯誤。修復你的配置,讓你的服務器可以訪問自己,一切都應該開始工作。

+0

謝謝艾倫!發現。這是一個防火牆規則。我可以發送請求,但響應(與服務器配置的WSDL一起)被阻止。時間去困擾Ops書桌。 – 2013-02-12 17:36:42

+0

作爲一個快速解決方案,你可以簡單地在/ etc/hosts中爲你的ip/domainname添加一個主機條目,這將允許服務器自己「交談」 – Andy 2015-11-26 14:04:32

+0

謝謝Alan!我的問題也是。 – MagentoMan 2016-12-15 22:50:47

相關問題