IVAN CAPPONI.NET/C# · Microsoft Azure

Shopify · ERP · E-commerce

Integrare Shopify con l'ERP: ordini, stock e catalogo

Ultimo aggiornamento: giugno 202610 min di letturaIntermedio

Integrazione tra Shopify ed ERP per ordini, stock e catalogo
Sincronizzare prodotti, scorte e ordini tra Shopify e gestionale con flussi event-driven.

Shopify è una delle piattaforme e-commerce più diffuse, ma da solo non parla con il gestionale. Integrare Shopify con l'ERP significa tenere allineati catalogo, stock e ordini in modo affidabile, evitando il doppio inserimento e gli errori manuali.

Gli strumenti di Shopify

StrumentoUso
Admin GraphQL APILeggere/scrivere prodotti, inventario, ordini
WebhookNotifiche di eventi (ordini, aggiornamenti)
Bulk OperationsEstrazioni e modifiche su grandi volumi

La Admin GraphQL API è oggi la via principale; i webhook abilitano flussi event-driven; le bulk operations servono per cataloghi grandi.

Gli ordini: meglio i webhook

Per importare gli ordini, i webhook (es. orders/create) sono preferibili al polling: Shopify notifica l'evento, l'integrazione lo accoda e un worker crea l'ordine in ERP. Due accortezze indispensabili:

  • verifica della firma HMAC per accettare solo webhook autentici;
  • idempotenza: i webhook possono ripetersi, quindi si deduplica per id ordine.

Stock e catalogo

Lo stock va sincronizzato a livello di inventory item e location: Shopify gestisce le giacenze per sede. Dall'ERP si propagano le quantità (con buffer anti-overselling) e dal catalogo si allineano prodotti, varianti e prezzi. Conviene lavorare per delta ed evitare di riscrivere l'intero catalogo a ogni ciclo.

Mappare prodotti e varianti

Le varianti Shopify (per opzioni come taglia/colore) vanno mappate sugli SKU del gestionale. È utile mantenere un legame stabile tra SKU ERP e variant id Shopify, così gli aggiornamenti colpiscono sempre l'entità giusta senza ambiguità.

Architettura event-driven su Azure

Una integrazione robusta su Microsoft Azure: un endpoint (Azure Function) che riceve i webhook, ne verifica la firma e li accoda su Service Bus; worker che creano ordini in ERP, propagano stock e catalogo verso Shopify con retry e rate limiting; gestione sicura dei token in Key Vault; osservabilità con correlation ID.

Rate limit di Shopify

Shopify applica limiti (con costo per query nella GraphQL API). Vanno gestiti con throttling e backoff, monitorando il costo residuo restituito dall'API per non superare il budget. Le bulk operations aiutano a ridurre il numero di chiamate per i grandi volumi.

Esempio pratico: mapping SKU e aggiornamento stock

Il dato più importante da salvare non è solo lo SKU, ma la relazione tra SKU ERP, variantId, inventoryItemId e location Shopify. Senza questa tabella gli aggiornamenti stock diventano ambigui appena hai varianti o più magazzini.

{
  "erpSku": "TSHIRT-BLK-M",
  "shopifyVariantId": "gid://shopify/ProductVariant/431234567890",
  "inventoryItemId": "gid://shopify/InventoryItem/9876543210",
  "locationId": "gid://shopify/Location/123456789",
  "safetyBuffer": 2
}

Un aggiornamento ERP da 17 pezzi disponibili diventa quindi 15 pezzi pubblicabili, se il buffer anti-overselling è 2. La mutation GraphQL deve essere emessa solo quando la quantità calcolata cambia davvero.

mutation inventorySetQuantities($input: InventorySetQuantitiesInput!) {
  inventorySetQuantities(input: $input) {
    inventoryAdjustmentGroup { createdAt reason }
    userErrors { field message }
  }
}

Gestione reale dei webhook duplicati

Per orders/create salvo sempre l'header X-Shopify-Webhook-Id e l'id ordine. Se lo stesso webhook rientra entro 48 ore, rispondo 200 ma non ricreo l'ordine. Se invece cambia solo lo stato dell'ordine, genero un evento separato di aggiornamento.

Errori comuni

  • webhook senza verifica HMAC e senza idempotenza;
  • stock sincronizzato senza tenere conto delle location;
  • riscrittura completa del catalogo invece dei delta;
  • nessun legame stabile tra SKU ERP e variant id.

Conclusione

Integrare Shopify con l'ERP è soprattutto questione di eventi affidabili e mapping stabile: webhook firmati e idempotenti per gli ordini, sincronizzazione di stock per location e catalogo per delta, il tutto su un'architettura event-driven. Documentazione ufficiale: Shopify Admin GraphQL API.