Attualmente sto lavorando a un sistema di e-commerce leggermente diverso nella struttura di un tipico sistema di e-commerce in quanto hai più negozi, accedendo allo stesso database da URL diversi.
Quindi, ad esempio, potrei avere:
quanto sopra sono essenzialmente lo stesso archivio, puntano allo stesso database, nel main condivideranno gli stessi prodotti (questo può sembrare strano ma questi sono i requisiti del client). L'unica differenza è che, in base all'URL, gli utenti, i panieri, gli ordini, ecc. Sono divisi in modo che non si incrocino. Cioè gli ordini / i canestri / gli utenti di site1 non sono visibili a site2 quindi un modello multitenant di database singolo piuttosto standard.
Quanto sopra è implementato, sono solo leggermente bloccato su come implementare il processo di checkout. Il requisito è di avere un checkout condiviso, quindi anziché:
avresti (per chiarezza questo si collegherà allo stesso database dei siti sopra)
Potresti legare questo al modo in cui è gestito da Shopify, più negozi un processo di pagamento.
Il processo di checkout nel principale non è difficile, posso usare lo storeId e il cestinoId per identificare ciò che ho bisogno di identificare in termini di creare un ordine da un paniere e assegnarlo a un negozio se l'utente è un ospite. Il problema che sto affrontando è cosa fare quando un utente esistente vuole effettuare il checkout e il login in modo che l'ordine sia associato al proprio account e alcune informazioni di base (Indirizzo e-mail, Indirizzo di fatturazione) siano pre-compilate per loro.
Il processo di checkout ( link ) non riguarda gli accessi o la gestione degli account di alcun tipo, è solo lì per facilitare il checkout in modo che gli utenti, se sono all'inizio del processo di checkout e desiderano effettuare il login, verranno reindirizzati alla pagina di login dei siti corrispondenti. Da lì sto pensando a questo processo, ma volevo solo condividerlo per vedere se c'è qualcosa di assolutamente sbagliato in questo:
- Utente accede con le credenziali corrette
- Qualche oggetto (potrebbe essere il carrello o un oggetto CartOrder intermedio) viene aggiornato per contenere l'id dell'utente, una chiave di sessione univoca (possibilmente un GUID) e un timestamp per indicare la scadenza della sessione di checkout
- L'utente viene reindirizzato al sito di checkout con l'id di sessione aggiunto in querystring (non posso usare i cookie poiché i siti si trovano su domini diversi)
- Opzione: a questo punto potrei creare una sessione locale per trattenere il valore per il resto del processo di checkout assicurandoti che sia ancora valido lungo il percorso (un nuovo accesso scadrà anche la chiave di sessione)
- Checkout!
Ora c'è una leggera preoccupazione nel mettere l'id della sessione nella stringa di query che potrebbe essere rilevata da qualche malintenzionato, usata e alcune informazioni (nome, indirizzo) potrebbero essere visibili. Il rovescio della medaglia è tutto SSL, le sessioni sono di breve durata e non sono realmente in grado di falsificare gli account (o fare qualsiasi cosa per conto dell'account che rappresenta) quindi non sono sicuro che sia troppo pensieroso questo processo?