Modulo 2 · 2.4
Che cosa mostra pubblicamente il Suo negozio
Modulo 2: Installazione e configurazione · Tempo di lettura: 10 minuti
Obiettivo della lezione: Al termine di questa lezione Lei saprà spiegare che cosa sono la Store API e l'API REST di WooCommerce, quali dati devono essere pubblici e quali no, e come utilizzare in modo sicuro le chiavi API e i webhook.
Concetti chiave: API, API REST di WordPress, Store API (wc/store/v1), API REST di WooCommerce (wc/v3), JSON, pubblico e protetto, chiave API, permessi di lettura e scrittura, privilegi minimi, webhook, chiave segreta di un webhook, X-WP-Total
Un negozio con due porte
Un visitatore vede il Suo negozio come pagine web. Ma il Suo negozio ha anche delle "porte" per i programmi: indirizzi a cui un programma può richiedere o inviare dati, senza la grafica di una pagina. Una porta di questo tipo si chiama API (application programming interface). WordPress ne ha una sotto /wp-json/, l'API REST. Il corso su WordPress ha mostrato nella lezione 7.3 che lì è possibile, ad esempio, ottenere i nomi utente se non si protegge nulla.
WooCommerce aggiunge due API proprie, con scopi molto diversi:
| Store API | API REST di WooCommerce | |
|---|---|---|
| Indirizzo | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Per chi | Il browser di un visitatore (i blocchi del carrello e del pagamento, lezione 2.2) | Altri programmi: contabilità, magazzino, un'app, un collegamento con un marketplace |
| Serve una chiave | No, è pubblica | Sì, una chiave API di un amministratore (o un utente connesso con i permessi adeguati) |
| Che cosa contiene | Prodotti, prezzi, stato delle scorte, categorie, recensioni; il carrello e l'ordine del visitatore stesso | Tutto: gli ordini di chiunque, clienti, codici promozionali, impostazioni, report |
La Store API è quindi l'ingresso della vetrina: ciò che nel Suo negozio compare in una pagina prodotto si trova anche lì, solo sotto forma di dati. L'API REST di WooCommerce è la porta sul retro del magazzino: deve restare chiusa a chiave.
La Store API: che cosa può richiedere un visitatore (e chiunque)
Apra nel Suo browser:
https://shop.example.com/wp-json/wc/store/v1/productsRiceverà un elenco in JSON, un formato di testo per i dati. Per ogni prodotto vedrà, tra l'altro, il nome, lo slug, il tipo (semplice, variabile), l'indirizzo della pagina prodotto (permalink), lo SKU, i prezzi, le immagini, le categorie, se è disponibile in magazzino e se è acquistabile. Nelle intestazioni della risposta compare X-WP-Total: il numero di prodotti che il negozio mostra ai visitatori.
Alcune cose da sapere:
- I prezzi sono in centesimi. Una teiera da € 34,95 compare come
"price": "3495"con"currency_minor_unit": 2. Va diviso per 100. Se si tratti del prezzo con o senza IVA dipende dalla Sua impostazione in "Visualizza i prezzi nel negozio" (lezione 4.1). Utilizzeremo questa caratteristica nell'esercizio della lezione 4.1. - Solo ciò che è visibile. I prodotti in bozza, privati o nascosti nel catalogo non vengono conteggiati dalla Store API. Per questo
X-WP-Totalpuò essere inferiore al numero che vede nel pannello di amministrazione. - Leggere è permesso a tutti, scrivere non liberamente. Aggiungere qualcosa al carrello o completare il pagamento tramite la Store API è possibile solo con un codice monouso (nonce) presente nella pagina, e soltanto per il carrello di quel visitatore.
È un problema che questi dati siano pubblici? No: sono gli stessi dati presenti nelle Sue pagine prodotto. Un concorrente che vuole monitorare i Suoi prezzi può farlo anche con le pagine normali. È però bene sapere che tutto ciò che inserisce in un campo del prodotto può finire nella Store API. Non inserisca mai prezzi di acquisto, nomi di fornitori o note interne nella descrizione breve o lunga "perché tanto il tema non mostra quel campo".
Non disattivi nemmeno la Store API. I blocchi del carrello e del pagamento ne hanno bisogno (lezione 2.2). I plugin di sicurezza che "disattivano l'API REST per i visitatori" a volte bloccano così il pagamento. Se desidera limitare l'API REST, escluda la Store API da tale limitazione.
Gli abusi della Store API esistono, ma riguardano il lato della scrittura: aggressori che tentano migliaia di piccoli ordini con numeri di carta rubati. Si chiama card testing; ne parla la lezione 6.3.
L'API REST di WooCommerce: sempre protetta da una chiave
Ora apra, senza aver effettuato l'accesso:
https://shop.example.com/wp-json/wc/v3/ordersLa risposta corretta è un messaggio di errore con stato 401 (non autenticato) e un codice come woocommerce_rest_cannot_view. Il Suo negozio dice: "Lei non è autorizzato a vedere questo contenuto". È così che deve essere. Se qui riceve un elenco di ordini, c'è qualcosa di gravemente sbagliato: un plugin che apre i permessi, del codice personalizzato nel tema o una chiave inserita in un indirizzo pubblico. In tal caso si tratta di una possibile violazione dei dati personali (corso su WordPress, lezione 7.5, e articolo 6749 della base di conoscenza).
I programmi che devono accedere ai Suoi ordini ricevono una chiave API. La crea in WooCommerce > Impostazioni > Avanzate > API REST (Advanced > REST API). Una chiave è composta da due parti (una consumer key e un consumer secret) ed è associata a un utente WordPress. Lei sceglie i permessi:
- Leggi: il programma può richiedere dati;
- Scrivi: il programma può creare e modificare dati;
- Leggi/Scrivi: entrambe le cose.
Regole da seguire sempre:
- Privilegi minimi. Un collegamento con la contabilità che si limita a scaricare gli ordini riceve solo la lettura. Un collegamento di magazzino che aggiorna le scorte ha bisogno della scrittura, uno strumento di reportistica no.
- Una chiave per ogni collegamento, con una descrizione chiara ("Contabilità, solo lettura, 2026"). Se un collegamento viene dismesso, revoca soltanto quella chiave.
- Associ la chiave a un utente con permessi adeguati. La chiave di un amministratore può fare tutto ciò che può fare un amministratore. È preferibile creare un utente separato con il ruolo Gestore negozio (lezione 6.2).
- Conservi al sicuro la parte segreta. La vede una sola volta al momento della creazione. Va inserita nelle impostazioni del programma o in un gestore di password, non in un'email, in un documento condiviso o in un repository di codice pubblico.
- Faccia pulizia. In API REST vede per ogni chiave quando è stata utilizzata l'ultima volta. Una chiave che non viene usata da mesi va revocata.
Webhook: il Suo negozio chiama un altro programma
Un'API attende che qualcuno faccia una richiesta. Un webhook funziona al contrario: quando nel Suo negozio si verifica un evento (un nuovo ordine, un prodotto modificato), è WooCommerce stesso a inviare un messaggio a un indirizzo da Lei indicato. In questo modo il Suo programma di spedizione sa subito che c'è un ordine, senza doverlo chiedere ogni minuto. Li configura in WooCommerce > Impostazioni > Avanzate > Webhook.
Tre aspetti a cui prestare attenzione:
- Il messaggio contiene dati personali. Un webhook per un nuovo ordine invia nome, indirizzo e prodotti ordinati. Invii questi dati solo a un indirizzo https e a un soggetto indicato nella Sua informativa sulla privacy e nel Suo registro dei trattamenti (lezione 5.5).
- La chiave segreta. In un webhook si inserisce una chiave segreta. Con essa il programma che riceve può verificare che il messaggio provenga davvero dal Suo negozio e non da qualcuno che ha indovinato l'indirizzo. Non la lasci vuota e la condivida solo con il destinatario.
- Consegna non riuscita. Se l'indirizzo di destinazione resta irraggiungibile per un certo tempo, WooCommerce può disattivare il webhook dopo ripetuti errori. Dopo un guasto, verifichi in Webhook che siano ancora attivi.
Non confonda questo con il webhook del Suo fornitore di pagamento (lezione 4.4). Quello funziona al contrario: il fornitore comunica al Suo negozio che un pagamento è andato a buon fine.
In pratica: ecco come appare in WooCommerce
Con altri provider di hosting funziona allo stesso modo; si tratta di componenti di WooCommerce stesso.
- Apra in una finestra privata
/wp-json/wc/store/v1/productssul Suo negozio (di prova). Cerchi un prodotto e converta il prezzo. - Apra nella stessa finestra privata
/wp-json/wc/v3/orders. Dovrebbe vedere lo stato 401. - Vada su WooCommerce > Impostazioni > Avanzate > API REST. Controlli quali chiavi esistono, a quale utente sono associate e con quali permessi. Revochi le chiavi che non riconosce (più).
- In Webhook controlli quali webhook esistono e a quale indirizzo inviano.
- Se utilizza un plugin di sicurezza che limita l'API REST, verifichi che la Store API sia esclusa.
Riepilogo
- La Store API (
wc/store/v1) è pubblica e contiene ciò che compare anche nelle Sue pagine prodotto; i blocchi del carrello e del pagamento ne hanno bisogno. - Non inserisca dati interni nei campi del prodotto: possono diventare visibili tramite la Store API.
- L'API REST di WooCommerce (
wc/v3) senza chiave deve restituire un 401; un elenco di ordini senza chiave è una possibile violazione dei dati personali. - Chiavi API: privilegi minimi, una per collegamento, associata a un utente adeguato, conservata in segreto, revocata se non utilizzata.
- I webhook inviano dati personali a un altro programma: solo tramite https, con una chiave segreta, a un soggetto presente nel Suo registro dei trattamenti.
Quiz
Esercizio
Esercizio A2.4: Che cosa mostra pubblicamente il Suo negozio? Inserisca l'indirizzo del Suo negozio (di prova) e il numero di prodotti visibili nel negozio. Il programma esegue tre richieste, senza cookie e senza chiave, in sola lettura:
/wp-json/wc/store/v1/products?per_page=1(la Store API, tramite l'indirizzo REST indicato dal Suo sito stesso);/wp-json/wc/v3/orders?per_page=1;/wp-json/wc/v3/customers?per_page=1.
Corretto significa: la Store API risponde con stato 200 e un elenco JSON; l'intestazione X-WP-Total corrisponde al numero da Lei inserito; orders e customers restituiscono 401, 403 o 404.
Arancione: X-WP-Total non corrisponde (i prodotti in bozza, privati o nascosti non vengono conteggiati); la Store API restituisce 401 o 403, di solito a causa di un plugin di sicurezza, per cui i blocchi del pagamento non funzionano.
Rosso: la Store API non è raggiungibile mentre il Suo sito utilizza WooCommerce; oppure orders o customers restituiscono un elenco. Quest'ultimo caso è grave: chiuda subito l'accesso, controlli le Sue chiavi API e i plugin e valuti se deve notificare una violazione dei dati. In questo caso il programma conserva solo il codice di stato, mai il contenuto.
Controlli poi di persona in API REST e Webhook: quali chiavi e webhook sono presenti, e sa per ciascuno a che cosa serve?
Per saperne di più
- Corso gratuito WordPress 7.3: Accesso: password, autenticazione a due fattori e brute force
- Corso gratuito WordPress 7.5: Sito violato: riconoscerlo, ripristinarlo e prevenirlo
- L'accesso a xmlrpc.php di WordPress non funziona
- Si tratta di una violazione dei dati e devo segnalarla?
- La Store API (developer.woocommerce.com, in inglese): https://developer.woocommerce.com/docs/apis/store-api/
- Limitazione delle richieste (rate limiting) per la Store API (developer.woocommerce.com, in inglese): https://developer.woocommerce.com/docs/apis/store-api/rate-limiting/
