Un negozio o ERP personalizzato è uno per cui non esiste un plug-in già pronto, quindi il tuo sviluppatore collega il configuratore al carrello. La regola alla base di tutto qui è una sola frase: un prezzo inviato dal browser non deve mai diventare un prezzo di carrello. Il tuo server lo verifica prima con CutOptim.
CutOptim non incassa pagamenti e non ospita negozi; carrello, checkout e pagamento restano tuoi. Non esiste ancora un SDK. Il riferimento API del configuratore elenca ogni route, codice di errore e limite, con un documento OpenAPI 3.1; questa pagina, la pagina sugli ordini e il codice di riferimento guidano l’integrazione passo per passo.
Due chiavi
- La chiave pubblicabile sta nella tua pagina per l’integrazione. Può fare solo ciò che fa un acquirente, e solo dai domini che hai elencato per essa.
- La chiave segreta è per il tuo server e non va mai messa in una pagina. Viene inviata come
Authorization: Bearer <key>al servizio, per impostazione predefinitahttps://cfg.cutoptim.com. Invia sempreContent-Type: application/jsonin una POST.
Passo 1: verifica il preventivo prima del carrello
Quando il cliente ordina, la tua pagina riceve un evento cutoptim:order con un token di preventivo. Invia il token al tuo server e da lì:
curl -X POST https://cfg.cutoptim.com/cfg/v1/quote/verify \
-H "Authorization: Bearer $CFG_API_SECRET" \
-H "Content-Type: application/json" \
-d '{"quoteToken":"<token from the page>"}'
La risposta è 200 con {"valid": true, "redeemed": false, "claims": {...}} oppure {"valid": false, "reason": "..."}. Un rifiuto è comunque un 200, quindi leggi valid. Considera un timeout, un 401, un 500 o un corpo illeggibile come non verificato e rifiuta la riga. Poi confronta le claim con la tua riga di carrello: il tenant è il tuo, la valuta è quella del carrello, la scadenza è nel futuro e l’hash del preventivo è uguale all’hash del preventivo mostrato dalla tua pagina. Il codice di riferimento include la funzione che calcola quell’hash.
Un controllo locale della forma, del tenant e della scadenza del token costa meno ma non può provare la firma, perché la chiave di firma non viene distribuita. Usalo solo come pre-controllo.
Passo 2: controlla l’ordine
Verificare il preventivo dimostra che la promessa di prezzo è autentica. Non dimostra a quale ordine si riferisce il browser. Prima di memorizzare o evadere in base a un id d’ordine, recuperalo sul tuo server con GET /cfg/v1/orders/{id} e la tua chiave segreta. Restituisce hash del piano, hash del preventivo, stato, valuta e i tre totali in unità minori, e nessun dato personale. Confrontali con ciò che hai verificato.
Passo 3: ricevi il webhook
Configura un webhook come descritto nella pagina sugli ordini. Il tuo ricevente:
- legge il corpo grezzo prima di analizzarlo;
- legge l’intestazione
CutOptim-Signature,t=<unix seconds>,v1=<hex>(possono esserci due valoriv1mentre un segreto viene ruotato); - ricalcola
HMAC-SHA256(secret, "<t>.<raw body>"), confronta in tempo costante e rifiuta un timestamp distante più di circa cinque minuti; - rivendica l’id evento da
CutOptim-Event-Idprima di eseguire qualsiasi operazione e ignora un id già gestito; - ignora i tipi di evento che non conosce e risponde
2xx, così il mittente non ritenta inutilmente.
Ottieni il segreto del ricevente con POST /cfg/v1/admin/webhooks/{id}/secret e la tua chiave segreta. Tieni i segreti nel tuo ambiente, mai in una pagina, in un repository o in un log.
Codice di riferimento
Due piccoli esempi senza dipendenze mostrano tutti e tre i passi. Sono codice da leggere e copiare, non un servizio ospitato:
- Node 18 o successivo: cutoptim-verify.mjs e example-server.mjs.
- PHP 7.4 o successivo: CutOptimVerify.php e example-webhook.php.
I loro segreti sono segnaposto. L’archivio dei duplicati in memoria presente negli esempi è un ripiego: in produzione, conserva gli id evento gestiti nel tuo database e rivendica un id nella stessa transazione che registra l’ordine.
Gli stessi passi, con le richieste e le risposte esatte, sono nel riferimento: Negozio personalizzato o ERP.
Rotazione delle chiavi
Una chiave o un segreto di webhook può essere ruotato con una sovrapposizione, in modo che il vecchio continui a funzionare per un tempo stabilito mentre distribuisci il nuovo. Durante la rotazione di un webhook una consegna porta due firme v1 per sette giorni, e accettarne una qualsiasi permette di passare senza interruzioni. I pulsanti della console per la rotazione con sovrapposizione non sono ancora realizzati; la console può creare e revocare le chiavi.
Altri modi per ricevere gli ordini
Per WooCommerce usa il plug-in. Se ti servono solo piani di taglio all’interno del tuo software, senza una schermata cliente integrata, si tratta dell’Engine API.