2012-03-16 72 views
1

我嘗試使用Magento的SOAP,但我得到的錯誤「的SOAPFault異常:[HTTP]未知內容編碼」
我使用的代碼是這樣的:Magento的SOAP「未知內容編碼」

function init_connector() { 
global $mage_url,$mage_user, $mage_api_key, $sessionId, $proxy; 

try { 

$proxy = new SoapClient($mage_url ."/api/?wsdl"); //calling this function with no errors 
// Login to Magento 
$sessionId = $proxy->login($mage_user, $mage_api_key); //this call trigers the exception 
return 1; 
} catch(SoapFault $fault) { 
    logError($fault); 
    return 0; 
} 
} 

當創建對象$代理我沒有得到任何錯誤,但是當我打電話$ sessionId = $代理 - >登錄(...)我得到上述異常。

相同的代碼適用於其他magento安裝。

有什麼建議嗎?
謝謝..

+0

最好的猜測,可能與您的服務器有關。你使用Apache deflate,頭擴展? (或者,也許你沒有使用Apache) – 2012-03-16 14:47:26

+0

我也相信它是服務器相關的,但我不知道在哪裏看.. – karpa 2012-03-16 15:36:52

回答

0

非常感謝奧古茲。 我現在掙扎了2天,最終找到了解決方案。我不知道爲什麼服務器會這樣響應(儘管我真的很想知道),但是如果我用這個創建SoapClient,它就可以工作。

$proxy = new SoapClient($mage_url, array('compression' => SOAP_COMPRESSION_ACCEPT)); 

它使用gzip壓縮沒有這個問題的另一臺服務器上測試代碼(不選擇 '壓縮'=> SOAP_COMPRESSION_ACCEPT)..

1

此外,請試試這個,讓我們分享結果。

$proxy = new SoapClient($site_path.'api/soap/?wsdl=1'); 
+0

沒有這也沒有幫助..也不知道這是否有幫助,但從日食debuger我得到了這個迴應。 $ http_response_header \t數組[8] \t \t (字符串:15)HTTP/1.1 200 OK \t \t (字符串:35)日期:星期五,2012 3月16日15時十分48秒GMT \t \t (字符串:14)服務器:Apache \t \t (字符串:22)**內容編碼:無** \t \t (字符串:20)的Content-Length:9223 \t \t (字符串: 16)變化:用戶代理\t (字符串:17)連接:關閉\t (字符串:37)內容類型:text/xml; charset = UTF-8 ##抱歉無法格式化評論.. ## – karpa 2012-03-16 15:12:04

+0

檢查apache mod_deflate,mod_header擴展名。如果他們被啓用,暫時禁用,然後再試一次。 – 2012-03-16 15:18:03

+0

也檢查php.ini'output_handler = ob_gzhandler',如果這行啓用,暫時禁用它。 PS:如果你在共享主機提供商,你可以通過'.htaccess'設置 – 2012-03-16 15:25:35

0

也許這幫助別人:

$mode = array (
     'soap_version' => 'SOAP_1_1', // use soap 1.1 client 
     'keep_alive' => true, 
     'trace'   => 1, 
     'encoding'  =>'UTF-8', 
     'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE, 
     'exceptions' => true, 
     'cache_wsdl' => WSDL_CACHE_NONE, 
     'stream_context' => stream_context_create ( 
      array (
       'http' => array('header' => 'Content-Encoding: gzip'), 
      ) 
     ) 
    ); 

$client = new SoapClient ($wsdl, $mode);

+0

你能詳細說明如何解決這個問題嗎?謝謝。 – DanM7 2014-09-15 20:01:02