2011-12-15 94 views
5

我正嘗試在C#中使用SOAP。 Magento 1.4.2。Magento API v2 PHP錯誤

http://localhost/api/v2_soap/?wsdl 

在這裏我可以看到該方法catalogProductCreate

所以我嘗試使用連接:

$proxy = new SoapClient('http://localhost/api/v2_soap/?wsdl'); 

$sessionId = $proxy->login('xxx', 'xxxxxx'); // user with full access 

$newProductData      = new stdClass(); 
$newProductData->name    = 'Product Name'; 
$newProductData->description  = 'Description'; 
$newProductData->short_description = 'Short Description'; 
$newProductData->websites   = array(138); 
$newProductData->categories   = array(7,15); 
$newProductData->status    = 1; 
$newProductData->price    = 45; 
$newProductData->tax_class_id  = 2; 
$newProductData->weight    = 1; 


$result = $proxy->catalogProductCreate(
    $sessionId,   // Soap Session 
    'simple',   // Product Type 
    4,     // Attribute Set Id (Default) 
    'product-sku',  // Product Sku 
    $newProductData  // Product Data 
); 

但我收到這樣的輸出:

Fatal error: Uncaught SoapFault exception: [4] Resource path is not callable.

+0

錯誤的哪個部分你不完全明白嗎?你能詳細說明嗎? – hakre 2011-12-15 13:42:12

+0

http:// localhost/api/v2_soap /?wsdl在瀏覽器中打開它看看是否有這樣的方法catalogProductCreate – 2011-12-15 13:53:48

回答

1

確保您能她的WSDL資源是正確的,但我也遇到了這個問題,當我沒有用戶設置直到角色的正確權限。

15

(細節具體Magento的1.6.x版,但技巧,如果沒有細節,應適用於其他版本)

我假設的基礎上,您的代碼示例,您使用的是PHP客戶端代碼測試方法的存在性,然後您可以將其應用於C#應用程序的調用?

假設是這樣,這意味着你知道PHP,所以你需要在Magento soap服務器PHP級別進行調試。唯一的類文件產生故障

app/code/core/Mage/Api/Model/Server/Handler/Abstract.php 

不管是臨時的,直接添加以下記錄到該文件,或在

app/code/local/Mage/Api/Model/Server/Handler/Abstract.php 

下降的類文件的拷貝,codepool覆蓋。

看在類文件以下異常

throw new Mage_Api_Exception('resource_path_not_callable') 

這是Magento的SOAP服務器是什麼原因引起來的響應與故障。這個文件中有四個地方發生。在每個之上添加日誌記錄調用。

Mage::Log(sprintf('Line %s in file %s',__LINE__, __FILE__)); 
throw new Mage_Api_Exception('resource_path_not_callable'); 

這會讓你知道哪個故障導致你的問題,從中你可以進一步調試和記錄。有兩個地方可能發生(文件中共有四個,一個用於常規呼叫,另一個用於多路呼叫)。

按照出現的順序,在評論中可能的原因。

//here magento is attempting to instantiate the "API Model" that will perform 
//the work of your API call. Upon instantiation, it discovers that the model 
//doesn't inherit from Mage_Api_Model_Resource_Abstract, and bails. 
//This is rare for a non-custom API call, but might be caused by a class rewrite 
//gone amuck, or a very hacked system 
try { 
    $model = Mage::getModel($modelName); 
    if ($model instanceof Mage_Api_Model_Resource_Abstract) { 
     $model->setResourceConfig($resources->$resourceName); 
    } 
} catch (Exception $e) { 
    Mage::Log(sprintf('Line %s in file %s',__LINE__, __FILE__)); 
    throw new Mage_Api_Exception('resource_path_not_callable'); 
} 


//Here Magento's been able to instantiate the $model, and is checking if the method is 
//callable. If not, it bails. Again, for a standard, stock API call this shouldn't 
//be happening, but could be the result of a rewrite gone wrong, or someone hacking an 
//api class to make the method non accesible, or someone hacking the method mapping in api.xml 
if (is_callable(array(&$model, $method))) { 
    if (isset($methodInfo->arguments) && ((string)$methodInfo->arguments) == 'array') { 
     return $model->$method((is_array($args) ? $args : array($args))); 
    } elseif (!is_array($args)) { 
     return $model->$method($args); 
    } else { 
     return call_user_func_array(array(&$model, $method), $args); 
    } 
} else { 
    Mage::Log(sprintf('Line %s in file %s',__LINE__, __FILE__)); 
    throw new Mage_Api_Exception('resource_path_not_callable'); 
} 

找出Magento爲什麼會拋出API錯誤。它會經常指向你的肥皂呼叫中的一個類型,或者指向你在PHP系統中被黑掉的東西

0

把這個文件放到magento/project的根文件夾中,這樣你就可以訪問magento的所有方法。

享受的想法...

1

嘗試創建與角色的web服務的用戶,並將它們分配給訪問「ALL」的作用。角色信息中角色資源菜單中的選項。