Magento API - 从特定类别获取产品名称

时间:2012-02-29 13:16:54

标签: api magento soap product

我正在研究Magento API,我有一些问题...... 我尝试从Magento的特定类别中获取所有产品名称。

这是我的代码:

<?php
        $host = "www.host.tld/index.php";
        $client = new SoapClient("http://".$host."/api/soap/?wsdl"); 
        $apiuser= "user"; //webservice user login
        $apikey = "pass"; //webservice user pass
        try { 
            // Login
            $sess_id= $client->login($apiuser, $apikey);

        // Getting all products from category
            $filters = array( 'category_ids' => array('107') );
            $productList = $client->call($sess_id, 'catalog_category.assignedProducts', $filters);  
            //iterate and get all the product_id's and put it into one array
            foreach($productList as $products => $values){ 
                    if (isset($values['product_id']) || array_key_exists('product_id', $values)) {
                        $product_ids[] = $values['sku'];
                    }
            }
            //Get product details from product_id
            foreach($product_ids as $key => $values) {
                $details = $client->call( $sess_id, 'product.info', array($values));
                #echo $details['name'];
            } 
        }
        catch (Exception $e) { //while an error has occured
            echo "==> Error: ".$e->getMessage();
               exit();
        }
?>

我遇到的主要问题是,我得到的表现并不是最好的。对于每个“产品名称”,我为获得所有产品打了一个api电话。每次都为每个产品。那可能不是那么聪明。

我可以优化什么?我错过了什么吗?

我可以想象,如果我想从多个类别中获取详细信息,我的服务器将崩溃;)。我们的商店里有大约1000种产品。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试

$proxy = new SoapClient('http://magentohost/api/soap/?wsdl');
$sessionId = $proxy->login('apiUser', 'apiKey');

$filters = array(
    'id' => array('in' => array(<product_id_1>, <product_id_2>, ...))
);

$products = $proxy->call($sessionId, 'product.list', array($filters));

如果您需要一些关于产品的扩展信息 - 您应该更改magento代码,请参阅类似问题L Magento API v1- List prices for all products in one call

答案 1 :(得分:2)

您可以使用 catalog_category.assignedProducts

  

检索分配到所需类别的产品列表。

如果您使用SOAP V1,请尝试此操作:

$client = new SoapClient('http://magentohost/api/soap/?wsdl');

// If somestuff requires api authentification,
// then get a session token
$session = $client->login('apiUser', 'apiKey');

$result = $client->call($session, 'catalog_category.assignedProducts', '4');
var_dump($result);

// If you don't need the session anymore
//$client->endSession($session);

如果您使用的是SOAP V2:

$proxy = new SoapClient('http://magentohost/api/v2_soap/?wsdl'); // TODO : change url
$sessionId = $proxy->login('apiUser', 'apiKey'); // TODO : change login and pwd if necessary

$result = $proxy->catalogCategoryAssignedProducts($sessionId, '4');
var_dump($result);

并且回复将是这样的:

array
  0 =>
    array
      'product_id' => string '1' (length=1)
      'type' => string 'simple' (length=6)
      'set' => string '4' (length=1)
      'sku' => string 'n2610' (length=5)
      'position' => string '1' (length=1)
  1 =>
    array
      'product_id' => string '2' (length=1)
      'type' => string 'simple' (length=6)
      'set' => string '4' (length=1)
      'sku' => string 'b8100' (length=5)
      'position' => string '1' (length=1)