…importare prodotti magento2…case study

 

 

In questi giorni mi sono imbattuto nelle migrazione da magento1 a magento2 e come importare prodotti magento2. Sintetizzando gli step, il lavoro consisteva in questo:

  • esportazione prodotti magento1 su csv dal vecchio shop
  • migrazione delle configurazioni, spedizioni e metodi di pagamento da magento1 a magento2
  • restyle grafico
  • importare in magento2 circa 150mila prodotti semplici
  • creazione algoritmo di raggruppamento di prodotti semplici in 60mila prodotti configurabili taglia/colore
  • sviluppo di una dashboard con laravel per la lettura di barcode con controllo presenza a database e possibilità di fare una insert su magento2

 

Conoscendo bene magento1 e non magento2 immaginavo di trovare qualche problema che avrebbe allungato i tempi per il completamento della lavorazione e invece tramite l’utilizzo delle api di magento2 il lavoro si è dimostrato meno complesso del previsto.

 

In magento2 è stato eliminato il il protocollo XML-RPC mentre le Api REST e SOAP a livello funzionale sono equivalenti. In magento1 le api soap offrivano un livello migliore delle api rest. Altra funzione tra le novità di magento2 riguarda la gestione dei ruoli e gli utenti backend.

In magento2 non sono più distinti come nella versione 1.

I primi test li ho eseguiti con api rest tramite Postman (consiglio l’utilizzo di postman in quanto è open source e di facile utilizzo)

Come prima cosa è necessario settare il ruolo e la coppia di chiavi nel menù system -> Permission -> User Roles e in System -> Permissions -> All Users.

Ora è possibile generare il token tramite una chiamata CURL come nell’esempio sotto riportato.

curl -X POST "http://hostname/index.php/rest/V1/integration/admin/token" \
     -H "Content-Type:application/json" \
     -d '{"username":"mio_utente", "password":"mia_password"}'

 

 

Nell’ esempio le credenziali vengono passate come parametri in formato JSON, se necessario possiamo passare i parametri anche tramite altri formati come XML modificando il Contet-Type e il corpo della richiesta.

 

Per lo sviluppo ho utilizzato php e la libreria Client CURL ottengo il token per le richieste. Il token sarà simile a v8x430f98……….

<?php
function getAuthToken($hostname, $username, $password)
{
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => "http://$hostname/index.php/rest/V1/integration/admin/token",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => json_encode(['username' => $username, 'password' => $password]),
        CURLOPT_HTTPHEADER => [
            "cache-control: no-cache",
            "content-type: application/json",
        ],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        throw new Exception($err);
    } else {
        return json_decode($response, true);
    }
}

Con il token ottenuto possiamo fare le richieste tramite PHP.  Esempio di codice:

<?php
    /**
     * @return array
     * @throws Exception
     */
    function curlGet($endpoint, $token)
    {
      $curl = curl_init();
      curl_setopt_array($curl, [
          CURLOPT_URL => $endpoint,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
              "cache-control: no-cache",
              "authorization: Bearer " . $token,
          ],
      ]);

      $response = curl_exec($curl);
      $err = curl_error($curl);

      curl_close($curl);

      if ($err) {
          throw new Exception($err);
      } else {
          return json_decode($response, true);
      }
    }

    $response = curlGet(
      'http://hostname/index.php/rest/V1/customers/1',
      $token
    );

In conclusione se vi trovate nella necessità di interfacciarvi a magento2 consiglio di fare dei test e leggere la documentazione ufficiale al link devdocs.magento.com

Algoritmo…

Il csv riportava singolarmente tutti i prodotti ed era necessario ottenere un catalogo con  i prodotti in modalità configurabile. Per evitare di avere un catalogo con prodotti uguali ho realizzato uno script PHP che legge tutti i prodotti semplici dal csv, trova quelli con la radice comune (camicia elegante per esempio) e li raggruppa sotto un singolo prodotto configurabile ottenendo:

  • Prodotto padre configurabile (sku: camicia elegante)
    • variante blu: sku camicia elegante blu taglia M / camicia elegante blu taglia S / camicia blu taglia L 
    • variante bianca : sku camicia elegante bianca taglia M / camicia elegante bianca taglia S / camicia bianca taglia L 

 

L’intero progetto l’ho realizzato e testato in locale e caricato successivamente su vps dedicata filtrando il tutto con cdn cloudflare.

Se hai dubbi o necessiti di qualche consiglio non esitare a contattarmi commentando l’articolo o scrivendomi in privato.

 

Opzioni avanzate per i bordi Divi Builder

Opzioni avanzate per i bordi Divi Builder

Bordi Divi Builder.....era ora! Per chi, come me, utilizza Divi Builder per impaginare e gestire i contenuti nei propri siti wordpress consiglio di aggiornare Divi Builder alla versione 2.0.49 perchè, finalmente, sono state introdotte delle opzioni...

Importare prodotti in Magento con Magmi

Importare prodotti in Magento con Magmi

In questo articolo capirai come Importare prodotti in Magento con Magmi. Magmi è un modulo gratuito per shop su base Magento e permette, tramite CSV, di importare migliaia di prodotti in poco tempo. A differenza di altri strumenti Magmi lavora direttamente con il...

Share This

Share This

Share this post with your friends!