Design per un checkout condiviso

1

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:

  1. Utente accede con le credenziali corrette
  2. 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
  3. 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)
  4. 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)
  5. 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?

    
posta Roberto Modica 27.11.2014 - 15:41
fonte

2 risposte

1

In passato mi sono occupato di uno scenario un po 'simile, sebbene si trattasse di sottodomini. (Non so quale linguaggio di programmazione stai usando, quindi descriverò solo quello che ho fatto usando PHP) L'approccio che ho usato è stato configurare PHP su tutti i server per memorizzare le sessioni su 1 server memcached dedicato. Ciò ha consentito ai dati di sessione di essere centralizzati e accessibili da qualsiasi server, ma si consiglia di scrivere alcune regole del firewall per limitare l'accesso solo ai propri server. Memcached non ha alcuna sicurezza come quella incorporata, devi limitarlo a solo 1 indirizzo IP, o '0.0.0.0' che è qualsiasi. Il secondo passo era configurare l'impostazione "cookie_domain" su ciascun server sul dominio padre. Ecco le opzioni di configurazione dal mio php.ini:

session.save_handler = memcached
session.save_path = "[server ip address]:33023?persistent=1&weight=1&timeout=1&retry_interval=15"
session.cookie_domain = .somesite.com

Sostituirai [server ip address] con l'indirizzo IP del tuo server memcached.

Molte persone non lo sanno, PHP tiene traccia dell'ID di sessione tramite un cookie, sebbene tu possa passarlo anche attraverso la stringa di query. Tuttavia, se si è in grado di configurare il / i sito / i come descritto sopra, non sarà necessario farlo poiché i siti avranno accesso al cookie di sessione con lo stesso dominio cookie. I browser sono dotati di funzioni di sicurezza che impediscono l'accesso ai cookie da un altro sito.

HTH

    
risposta data 01.01.2015 - 07:18
fonte
0

Mi scuso se ho frainteso la domanda e i requisiti.

Ipotesi

Tre siti web unici
shop1.com
shop2.com
checkout.com

Shopping nel sito 1 o nel sito 2. Quando esegui il checkout, reindirizza al sito 3.

Vorrei dare un'occhiata alle sessioni del browser. Di solito hanno un ID univoco tra le schede del browser.

La mia implementazione sarebbe qualcosa sulla falsariga di.

• Negozi degli utenti su shop1.com
• L'utente fa un checkout. Login richiesto.
• Cattura l'ID della sessione del browser. Apri un socket dal server shop1.com al server checkout.com e passa l'ID del browser univoco insieme a qualsiasi altra informazione richiesta.
• Eseguire il reindirizzamento su checkout.com
• Ottieni un ID browser univoco e controlla se il server di checkout.com lo sa.

In questo modo non è necessario utilizzare URL e parametri speciali e puoi passare le informazioni tra i siti.

    
risposta data 02.12.2014 - 06:47
fonte

Leggi altre domande sui tag