…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](https://www.ivanzaccaron.net/wp-content/uploads/2017/11/esempio1.jpg)
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](https://www.ivanzaccaron.net/wp-content/uploads/2017/09/magmi.jpg)
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...