(подробности специфичны для Magento 1.6.x, но методы, если не подробности, должны быть применимы к другим версиям)
Я предполагаю, что на основе вашего примера кода вы используете клиент PHPкод для проверки существования метода, который затем можно применить к вызову из приложения C #?
Предполагая, что это так, это означает, что вы знаете PHP, поэтому вы захотите отладить его на PHP-уровне мыльного сервера Magento.Единственный файл класса, который вызывает эту ошибку, это
app/code/core/Mage/Api/Model/Server/Handler/Abstract.php
. Либо временно добавьте в этот файл следующую запись в журнал, либо перетащите копию файла класса в
app/code/local/Mage/Api/Model/Server/Handler/Abstract.php
дляПереопределение кодового пула.
Найдите в этом файле класса следующее исключение
throw new Mage_Api_Exception('resource_path_not_callable')
Именно поэтому мыльный сервер Magento реагирует на эту ошибку.Есть четыре места, где это происходит в этом файле.Добавьте журналы вызовов над каждым из них.
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