Ошибка PHP в Magento API v2 - PullRequest
       18

Ошибка PHP в Magento API v2

5 голосов
/ 15 декабря 2011

Я пытаюсь использовать SOAP с C #. Magento 1.4.2.

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
);

Но я получаю этот вывод:

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

Ответы [ 4 ]

16 голосов
/ 16 декабря 2011

(подробности специфичны для 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

1 голос
/ 01 апреля 2014

Попробуйте создать пользователя веб-службы с ролью и назначить ему роль с доступом к «ВСЕ».опция в меню ресурсов ресурсов в информации о ролях.

1 голос
/ 15 декабря 2011

Убедитесь, что вы можете использовать правильный ресурс wsdl, но я также столкнулся с этой проблемой, когда у меня не было настроено правильное разрешение для роли.

0 голосов
/ 21 января 2014

Поместите этот файл в корневую папку magento / project, чтобы вы могли получить доступ ко всем методам magento.

Наслаждайся идеей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...