Carrello e Checkout: Flusso B2B Basato su Preventivo
Questo articolo spiega il nostro sistema di carrello e checkout progettato per vendite B2B basate su preventivo.
Il Problema: B2B vs B2C
L'e-commerce tradizionale è B2C (Business-to-Consumer):
-
Prezzi fissi
-
Checkout immediato
-
Pagamento con carta di credito
-
Evasione automatizzata
La nostra attività è B2B (Business-to-Business):
-
Prezzi basati su preventivo
-
Revisione manuale
-
Pagamento tramite bonifico bancario
-
Configurazioni personalizzate
Abbiamo bisogno di un sistema di carrello che supporti entrambi i modelli.
Tipi di Carrello
Carrello Preventivo (Predefinito)
Scopo: Richiedere un preventivo per una configurazione personalizzata
Flusso: Aggiungi articoli → Compila dettagli → Invia → Ricevi preventivo via email
Pagamento: Non richiesto in anticipo
Caso d'uso: Build personalizzate, ordini all'ingrosso, prezzi negoziati
Carrello Acquisti (Google Shopping)
Scopo: Acquisto diretto con prezzi fissi
Flusso: Aggiungi articoli → Compila dettagli → Paga online → Ordine confermato
Pagamento: Richiesto in anticipo (Razorpay)
Caso d'uso: Configurazioni standard da Google Shopping
Rilevamento: gclid, gbraid o wbraid nell'URL
Struttura del Carrello
Modello Carrello
Campi:
-
Items: Lista di voci (SKU, quantità, tariffa, importo) -
CustomerName: Nome acquirente -
CustomerEmail: Email acquirente -
CustomerPhone: Telefono acquirente -
CustomerAddress: Indirizzo di spedizione -
CustomerGSTIN: Partita IVA (opzionale) -
TotalAmount: Somma delle voci -
GSTAmount: Importo IVA -
NetAmount: Totale + IVA -
Currency: Valuta del carrello (INR, USD, ecc.) -
Type: "cart" o "quote"
Voce del Carrello
Campi:
-
SKU: Identificativo prodotto -
quantity: Numero di unità -
Rate: Prezzo per unità -
Amount: Tariffa × quantità
Flusso Aggiungi al Carrello
Aggiunta Diretta (GET)
Aggiungi articolo tramite parametro URL con SKU.
Comportamento:
- Crea nuovo carrello o carica esistente
- Aggiungi SKU con quantità 1
- Mostra pagina del carrello
Caso d'uso: Pulsante "Aggiungi al Carrello" sulla pagina prodotto
Aggiunta da Modulo (POST)
Dati modulo: SKU, quantità, dettagli cliente
Comportamento:
- Valida che lo SKU esista
- Aggiungi al carrello con la quantità specificata
- Aggiorna totali del carrello
- Mostra pagina del carrello
Gestione Speciale V-SKU
I V-SKU (prodotti virtuali/configurati) sostituiscono il contenuto del carrello:
Motivo: I V-SKU sono sistemi completi, non compatibili con altri articoli
Comportamento: Cancella articoli esistenti, aggiungi solo V-SKU
Eccezione: Modalità Google Shopping (consenti più articoli)
Archiviazione del Carrello
Posizione: Sessione Flask lato server
Formato: Dizionario serializzato nella sessione
Persistenza: Fino alla chiusura del browser o alla scadenza del cookie
Vantaggio: Nessuna scrittura su database fino al checkout
Flusso di Checkout
Richiesta Preventivo
Passaggi:
- L'utente compila i dettagli cliente
- Clicca su "Ottieni un Preventivo"
- Il carrello viene salvato come ticket nel CRM
- Email inviata al team vendite
- Il team vendite risponde con il preventivo
Nessun pagamento: Preventivo inviato via email
Acquisto Diretto
Passaggi:
- L'utente compila i dettagli cliente
- Clicca su "Procedi al Pagamento"
- Il carrello viene salvato nella tabella Ordini
- Viene mostrata la pagina di pagamento Razorpay
- Pagamento acquisito
- Ordine confermato
Pagamento richiesto: Integrazione Razorpay
Gestione Valuta
Valuta del carrello: Impostata alla creazione del carrello
Bloccata: Non si può cambiare valuta dopo aver aggiunto articoli
Conversione: Tutti gli articoli convertiti nella valuta del carrello
Visualizzazione: Mostra sia la valuta del carrello che l'equivalente in INR
Calcolo GST (IVA)
India (GSTIN fornito): GST aggiunto all'aliquota applicabile
India (nessun GSTIN): GST aggiunto all'aliquota applicabile
Internazionale: Nessun GST
Formula: Importo netto = Importo totale + GST
Parametri di Tracciamento
Quando il carrello viene creato, memorizziamo:
Parametri campagna: utm_source, utm_medium, utm_campaign
ID click: gclid, gbraid, wbraid, fbclid
Archiviazione: Basata su cookie con finestra temporale (30 minuti)
Scopo: Attribuire conversioni offline a campagne online tramite tracciamento contatti
Notifiche Email
Email Richiesta Preventivo
A: Team vendite
Contenuto: Dettagli cliente, voci, importo totale
Allegati: Nessuno
Email Conferma Ordine
A: Cliente
Contenuto: Dettagli ordine, informazioni pagamento, prossimi passi
Allegati: PDF fattura (se pagamento ricevuto)
Integrazione Pagamenti
Gateway: Razorpay
Supportate: INR, USD, EUR, GBP
Metodi: Carta di credito, carta di debito, UPI, net banking
Webhook: Aggiornamenti stato pagamento tramite webhook
Vedi: Integrazione pagamenti per i dettagli
Validazione del Carrello
Prima del checkout:
Validazione SKU: Tutti gli SKU devono esistere
Validazione quantità: Solo numeri interi positivi
Validazione cliente: Nome, email, telefono obbligatori
Validazione indirizzo: Obbligatorio per la spedizione
Validazione GSTIN: Controllo formato se fornito
Riferimenti
Articoli Correlati
-
Pagine Prodotto - Pulsante aggiungi al carrello
-
Conversione Valuta - Valuta del carrello
-
Tracciamento Analytics - Attribuzione campagna
Riepilogo
Il nostro sistema di carrello supporta sia flussi basati su preventivo che acquisti diretti:
Tipi di carrello:
-
Carrello preventivo (predefinito, nessun pagamento)
-
Carrello acquisti (Google Shopping, pagamento richiesto)
Funzionalità:
-
Carrello multi-articolo
-
Blocco valuta
-
Calcolo GST
-
Gestione speciale V-SKU
-
Tracciamento campagne
Checkout:
-
Richiesta preventivo (email al team vendite)
-
Acquisto diretto (pagamento Razorpay)
Archiviazione:
-
Basata su sessione (nessun DB fino al checkout)
-
Persistenza 30 giorni
Questo approccio ibrido serve sia i modelli B2B basati su preventivo che quelli B2C di acquisto diretto.