2011-12-15 33 views
5

Tôi đang cố gắng sử dụng SOAP với C#. Magento 1.4.2.Lỗi Magento API v2 PHP

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

Ở đây tôi có thể thấy phương pháp catalogProductCreate

Vì vậy, tôi cố gắng kết nối với:

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

Nhưng tôi nhận ra điều này:

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

+0

Phần nào của lỗi mà bạn không hiểu chính xác? Bạn có thể xây dựng? – hakre

+0

http: // localhost/api/v2_soap /?wsdl mở nó trong trình duyệt của bạn xem nếu có phương pháp như catalogProductCreate –

+0

Tôi biết điều này có nghĩa là tôi không thể tìm thấy phương pháp ... nhưng tôi có thể nhìn thấy nó trong xml ... Làm thế nào tôi có thể làm để giải quyết điều này? – Ste

Trả lời

1

Đảm bảo rằng bạn có thể cô ấy là tài nguyên wsdl là chính xác, nhưng tôi cũng chạy vào vấn đề đó khi tôi không có bộ người dùng lên đến các quyền chính xác theo vai trò.

15

(chi tiết có Magento 1.6.x cụ thể, nhưng kỹ thuật, nếu không muốn nói chi tiết, nên được áp dụng cho các phiên bản khác)

Tôi giả định, dựa trên mẫu mã của bạn, rằng bạn đang sử dụng mã PHP khách hàng để kiểm tra sự tồn tại của một phương thức, sau đó bạn có thể áp dụng cho một cuộc gọi từ ứng dụng C# của bạn?

Giả sử đó là trường hợp, nó có nghĩa là bạn biết PHP, vì vậy bạn sẽ muốn gỡ lỗi điều này ở cấp độ máy chủ Magento xà phòng PHP. Các chỉ tập tin lớp sản xuất rằng lỗi là

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

Hoặc thêm khai thác gỗ sau tạm thời và trực tiếp đến tập tin đó, hoặc thả một bản sao của tập tin lớp học trong

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

cho một override codepool.

Look trong tập tin lớp học cho các ngoại lệ sau đây

throw new Mage_Api_Exception('resource_path_not_callable') 

Đây là những gì làm cho máy chủ xà phòng Magento để phản ứng với lỗi đó. Có bốn điểm xảy ra trong tệp đó. Thêm các cuộc gọi đăng nhập ở trên mỗi cuộc gọi.

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

Điều này sẽ cho bạn biết lỗi nào đang gây ra sự cố, từ đó bạn có thể gỡ lỗi và đăng nhập thêm. Có hai nơi điều này có thể xảy ra (bốn tổng số trong tập tin, một cho một cuộc gọi thông thường, một cho đa cuộc gọi).

Theo thứ tự xuất hiện, với các nguyên nhân có thể có trong nhận xét.

//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'); 
} 

Tìm hiểu lý do tại sao Magento đang ném lỗi API. Nó thường trỏ đến một loại trong cuộc gọi xà phòng của bạn, hoặc chỉ cho bạn những gì đã bị tấn công trong hệ thống PHP của bạn

+0

2011-12-16T10: 39: 12 + 00: 00 DEBUG (7): Dòng 295 trong tệp /usr/www/app/code/core/Mage/Api/Model/Server/Handler/Abstract.php – Ste

+0

Đăng nhập get_class ($ model) và $ method. Có lẽ bạn không có phương pháp như vậy trong mô hình này. –

+0

Tôi có cùng một vấn đề ở đây (thứ hai nếu). Tôi đã đăng nhập vào Model và phương thức của tôi có trong danh sách Model của phương thức, nhưng dường như không thể gọi được. Quy tắc quyền có thể cho TẤT CẢ. –

0

Đặt tệp này vào thư mục gốc của Magento/Project để bạn có thể truy cập tất cả các phương pháp của Magento.

Hãy tận hưởng ý tưởng ...

1

Cố gắng tạo người dùng webservice với vai trò và gán vai trò có quyền truy cập vào ‘TẤT CẢ’. trong menu tài nguyên vai trò trong thông tin vai trò.

Các vấn đề liên quan