Ошибка Magento Api Неустранимая ошибка: исключение Uncaught SoapFault: [4] Путь к ресурсу не может быть вызван

Когда я запускаю следующий код в корне magento

<?php
$client = new SoapClient('http://localhost/mymagento/index.php/api/v2_soap/index?wsdl=1', array('cache_wsdl' => WSDL_CACHE_NONE));
$session = $client->login('testuser', 'testuser');              
    $result = $client->salesOrderList($session);                    
echo"<pre>";
    print_r($result);
echo"</pre>";
?>

Я получаю следующую ошибку

   Fatal error: Uncaught SoapFault exception: [4] Resource path is not callable. in /var/www/html/mymagento/sales_order.php:9
Stack trace:
#0 /var/www/html/mymagento/sales_order.php(9): SoapClient->__call('salesOrderList', Array)
#1 /var/www/html/mymagento/sales_order.php(9): SoapClient->salesOrderList('98850601ed8aa6f...')
#2 {main}
  thrown in /var/www/html/mymagento/sales_order.php on line 9

Но когда я бегу

$result = $client->salesOrderInfo($session,'100000030');   

Ошибка не приходит.

Как это исправить? Пожалуйста помоги


person Mukesh    schedule 13.11.2013    source источник
comment
Посмотрите разрешения на учетную запись API и права на файлы жесткого диска.   -  person Martin    schedule 13.11.2013
comment
@Martin Я создал пользователя в админке как testuser и назначил этим ресурсам продажи и каталог. Не могли бы вы объяснить значение разрешений для учетной записи API?   -  person Mukesh    schedule 13.11.2013
comment
Да, это то, что я имею в виду. Также проверьте права доступа ко всем файлам в папке Magento (но я думаю, что это не решение).   -  person Martin    schedule 14.11.2013
comment
@Martin, может быть, эта проблема связана с тем, что я переопределяю информацию о публичной функции ($ orderIncrementId) класса Mage_Sales_Model_Order_Api_V2   -  person Mukesh    schedule 14.11.2013
comment
в моем случае это было связано с неправильным путем для модели, указанным в api.xml (я указывал путь к файлу, а требовал путь к каталогу, т. е. mymodel/mymodel, а не mymodel/mymodel_file)   -  person R T    schedule 24.04.2014


Ответы (2)


Это означает, что вы пытаетесь получить доступ к ресурсу, который недоступен там, где он должен быть. Например, файл класса.

В моем проекте я получил эту ошибку, один каталог не находился в нужном месте. Пожалуйста, проверьте структуру каталогов, которую вы создаете, для переопределения основных файлов. Или проверьте, не была ли ошибочно нарушена структура каталогов основных файлов.

person Mukesh    schedule 22.04.2014
comment
Чтобы увидеть хорошую структуру каталогов, inchoo.net/magento/magento-api-v2 ; в моем случае у меня была опечатка в имени класса API - person nicolallias; 20.09.2016

Вместо использования localhost используйте IP-адрес вашей локальной системы. IP-адрес по умолчанию — 127.0.0.1.

Итак, ваш код должен мне понравиться:

<?php
$client = new SoapClient('http://127.0.0.1/mymagento/index.php/api/v2_soap/index?wsdl=1', array('cache_wsdl' => WSDL_CACHE_NONE));
$session = $client->login('testuser', 'testuser');              
$result = $client->salesOrderList($session);                    
echo"<pre>";
print_r($result);
echo"</pre>";
?>

Попробуйте это, надеюсь поможет!

person Rajiv Ranjan    schedule 13.11.2013
comment
Как вы думаете, я не передаю значение фильтра, это может быть причиной проблемы? - person Mukesh; 14.11.2013
comment
Нет, используйте IP-адрес вместо «localhost» в первой строке, которая является URL-адресом SOAP http://127.0.0.1/mymagento/index.php/api/v2_soap/index?wsdl=1. - person Rajiv Ranjan; 14.11.2013
comment
Я пробовал то же самое на моем сервере разработки, отличном от моего loaclhost, я получаю ту же ошибку. На самом деле, что означает путь к ресурсу, не вызывается - person Mukesh; 14.11.2013
comment
откройте app\code\core\Mage\Sales\etc\wsdl.xml и найдите операцию salesOrderList, а тип сообщения - выход или нет. - person Rajiv Ranjan; 14.11.2013
comment
не могли бы вы объяснить, что вы подразумеваете под типом сообщения, является выходом или нет - person Mukesh; 14.11.2013
comment
этот код должен быть там <portType name="{{var wsdl.handler}}PortType"> <operation name="salesOrderList"> <documentation>Retrieve list of orders by filters</documentation> <input message="typens:salesOrderListRequest" /> <output message="typens:salesOrderListResponse" /> </operation></portType> - person Rajiv Ranjan; 14.11.2013