Cursos Magento

Produto Configurável na API do Magento 1.x

, ,

Atualizado em 14 de abril de 2020

Um dos primeiros artigos do Magenteiro falava sobre como usar a API do Magento 1.x, e ainda trazia vários exemplos de uso da API Soap.

No entanto, na API Soap do Magento 1.x não há formas de editar ou cadastrar um produto configurável. Pelo menos não nativamente.

Neste artigo vamos ver como contornar isso com um exemplo prático de uso válido para as últimas versões do Magento 1.x que nos permitirá associar produtos simples à produtos configuráveis e empacotados (bundles).

Não era isso que estava buscando?

Por onde começar com a API Soap?

Se você está começando a mexer com a API SOAP do Magento 1.x, certifique-se que já conseguiu se conectar à sua API e configurou a sua loja corretamente.

Veja a documentação oficial da API para mais detalhes. Considere também utilizar uma ferramenta como SoapUI (grátis).

1. Instalando módulo Bubble

Este módulo existe há vários anos e ainda é válido para este exercício proposto. Estou falando do Bubble_Api.

Você pode instalá-lo fazendo download do .zip, ou clonando o projeto direto no repositório. Ou ainda através do modgit com o comando abaixo:

modgit -e README.md clone bubble-api https://github.com/jreinke/magento-improve-api.git

Isso acrescentará suporte à vincular produtos simples à produtos configuráveis em seu Magento 1.

2. Como associar produtos simples aos configuráveis?

Uma vez instalado, você pode passar as opções dos produtos configuráveis no array associated_skus. Isto deve funcionar tanto na API v1, v2 com WSI-Compliance ativado ou não.

No exemplo abaixo mostro como fazer o cadastro de 2 produtos simples e 1 configurável, associando os 2 primeiros como seus filhos. Isto foi feito com base nos atributos existentes da base de exemplos de produtos do Magento, e após associar os atributos de cor e tamanho (size e color) ao grupo de atributos Padrão (Default).

### CONFIG AREA ###
$store_url = 'http://cursoback.test/';
$wsdl_url = $store_url . 'api/v2_soap/?wsdl=1';
$api_user = 'magenteiro';
$api_key = 'magenteiro123';

//ini_set("soap.wsdl_cache_enabled", 0);  //desabilita cache do wsdl do php - recomendavel qdo houver alteracao no wsdl
### END CONFIG ###


echo "<p>WSDL Url: " . $wsdl_url . "</p>" . PHP_EOL;

//profiller
$time_start = microtime(true);


/**
 * Connection API v2
 */
$options = array('trace' => true, 'connection_timeout' => 120, 'wsdl_cache' => WSDL_CACHE_NONE,);
$proxy = new SoapClient($wsdl_url, $options);
$sessionId = $proxy->login($api_user, $api_key);

/**
 * Simple product #1 (sku : SKU-001)
 */
$productData = array('name'                  => 'Name of product #1', 'description' => 'Description of product #1',
                     'short_description'     => 'Short description of product #1', 'website_ids' => array('base'),
                     // Id or code of website
                     'status'                => 1, // 1 = Enabled, 2 = Disabled
                     'visibility'            => 1, // 1 = Not visible, 2 = Catalog, 3 = Search, 4 = Catalog/Search
                     'tax_class_id'          => 2, // Default VAT
                     'weight'                => 0,
                     'stock_data'            => array('use_config_manage_stock' => 1,
                                                      'is_in_stock'=>1,
                                                      'qty' => 99
                                                      // We do not manage stock, for example
                     ),
                     'price'              => 9.90, // Same price than configurable product, no price change
                     'additional_attributes' => array('single_data' => array(array('key' => 'color', 'value' => 'Blue',
                                                                                   // Id or label of color, attribute that will be used to configure product
                                                                             ),
                                                                             array('key' => 'size', 'value' => 'L',
                                                                                   // Id or label of size, attribute that will be used to configure product
                                                                             ),),),);
// Creation of product #1
$proxy->catalogProductCreate($sessionId, 'simple', 'Default', 'SKU-001', $productData);

/**
 * Simple product #2 (sku : SKU-002)
 */
$productData = array('name'                  => 'Name of product #2', 'description' => 'Description of product #2',
                     'short_description'     => 'Short description of product #2', 'website_ids' => array('base'),
                     // Id or code of website
                     'status'                => 1, // 1 = Enabled, 2 = Disabled
                     'visibility'            => 1, // 1 = Not visible, 2 = Catalog, 3 = Search, 4 = Catalog/Search
                     'tax_class_id'          => 2, // Default VAT
                     'weight'                => 0,
                     'stock_data'            => array('use_config_manage_stock' => 1,
                                                      'is_in_stock'=>1,
                                                      'qty' => 99
                     ), 'price'              => 8.90, // Red product is $1 less than configurable product
                     'additional_attributes' => array('single_data' => array(array('key' => 'color', 'value' => 'Red',
                                                                                   // Id or label of color, attribute that will be used to configure product
                                                                             ),
                                                                             array('key' => 'size', 'value' => 'M',
                                                                                   // Id or label of size, attribute that will be used to configure product
                                                                             ),),),);
// Creation of product #2
$proxy->catalogProductCreate($sessionId, 'simple', 'Default', 'SKU-002', $productData);

/**
 * Configurable product
 */
$productData = array('name'              => 'Configurable product',
                     'description'       => 'Description of configurable product',
                     'short_description' => 'Short description of configurable product', 'website_ids' => array('base'),
                     // Id or code of website
                     'status'            => 1, // 1 = Enabled, 2 = Disabled
                     'visibility'        => 4, // 1 = Not visible, 2 = Catalog, 3 = Search, 4 = Catalog/Search
                     'tax_class_id'      => 2, // Default VAT
                     'weight'            => 0,
                     'stock_data'        => array('use_config_manage_stock' => 1,
                                                  'is_in_stock' => 1
                                                  // We do not manage stock, for example
                     ),
//                     'is_in_stock' => 1,
                     'price'          => 9.90, 'associated_skus' => array('SKU-001', 'SKU-002'));
                     // Simple products to associate
//                     'price_changes'     => array(array('color' => array('Red' => '2', 'Blue' => '-10%',),
//                                                        'size'  => array('Large' => '+1', 'Medium' => '-3',),),),);
// Creation of configurable product
$proxy->catalogProductCreate($sessionId, 'configurable', 'Default', 'SKU-TEST', $productData);

//profiler
$time_end = microtime(true);
$time = $time_end - $time_start;
echo sprintf("<hr/><small>Total execution time: %s seconds.</small>",$time);

Produto configurável criado via API
Produto configurável criado via API

Produtos criados com o exemplo acima

Problemas comuns na API

Enquanto testava o exemplo acima, esbarrei em 3 problemas clássicos quando se testa em ambiente local e que me impediram de seguir adiante. Se este for o seu caso, e quiser seguir sem maiores complicações:

  1. Desabilite o SSL (https) para evitar complicações com o SoapClient
  2. Desabilite o cache de wsdl no seu php.ini (soap.wsdl_cache_enabled=0). Sempre use desta forma quando realizar alguma alteração no wsdl.
  3. Caso esteja usando valet ou algum outro aplicativo que não mapeie o host da loja que está testando em /etc/hosts, faça isso manualmente.

Outros exemplos

Veja uma dezena de exemplos de chamadas à API do Magento 1.x aqui no Magenteiro, incluindo criação de produtos, atualização de estoque, e outras.

Outros exemplos referentes à criação de produtos configuráveis você pode encontrar no artigo original do Bubble_Api. O exemplo acima foi extraído e modificado de lá, inclusive.

Usando Magento 2.x? Tem APIs nativas.

O Magento 2 possuí APIs REST nativas para todos os tipos de produtos, além de APIs de atualização em massa (também nativas). Veja mais de 600 exemplos de uso no curso de APIs do Magenteiro, ou neste artigo com outros 16 exemplos.

Update: Outra forma de cadastrar produtos configuráveis via API

Uma outra forma sugerida por um dos leitores (Eneias Ramos) é usando o módulo Gamuza_ERP. Embora o módulo traga uma série de outras finalidades à API do Magento 1, nele é possível cadastrar produtos configuráveis com uma única chamada.

Veja exemplos e como usá-lo no repositório oficial do Gamuza_ERP.

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/produtos-configuraveis-api-magento-1/"]