‫-: Va bene.
‫Quindi ora creiamo un nuovo documento di prenotazione nel nostro database ogni
‫volta che un utente acquista con successo un tour.
‫Quindi siamo tornati qui nel controller
‫di prenotazione e nella
‫gara grezza, che crea le sessioni di pagamento, giusto?
‫E ricorda che qui abbiamo questo URL di successo
‫e questo URL è la base della funzionalità
‫che implementeremo in questa lezione.
‫Quindi, ogni volta che un check-out
‫va a buon fine, il browser andrà automaticamente a questo
‫URL, che in questo momento è semplicemente la nostra home page, giusto?
‫È anche in questo momento, quindi
‫quando un checkout va a buon fine vogliamo creare
‫una nuova prenotazione, giusto?
‫Quindi fondamentalmente vogliamo creare una nuova prenotazione
‫ogni volta che si accede a questo URL qui.
‫Ora potremmo creare un nuovo percorso per questo successo, ma poi
‫dovremmo creare una pagina completamente nuova e in questo
‫caso non ne vale davvero la pena.
‫E questo perché ciò che faremo in questa
‫lezione è comunque solo una soluzione
‫temporanea perché non è davvero sicura, ok?
‫Quindi ricorda come abbiamo detto alcune
‫lezioni fa e quel bel diagramma che in
‫seguito, quando un sito Web viene effettivamente distribuito su
‫un server, avremo accesso all'oggetto sessione una volta
‫completato l'acquisto utilizzando Stripe Webhooks.
‫E quindi questi webhook saranno perfetti per
‫noi per creare una nuova prenotazione.
‫Va bene?
‫Ma per ora, dal momento che non
‫possiamo ancora farlo, usiamo una
‫soluzione alternativa, che consiste semplicemente nell'inserire i dati di cui abbiamo
‫bisogno per creare una nuova prenotazione direttamente in questo URL come stringa di query.
‫Va bene?
‫E abbiamo bisogno di creare una stringa di query
‫perché Stripe farà semplicemente una richiesta di ricezione a questo URL qui,
‫quindi non possiamo davvero inviare un corpo o alcun dato con
‫esso tranne la stringa di query.
‫Va bene?
‫Quindi facciamolo e ciò di cui abbiamo bisogno qui sono fondamentalmente
‫i tre campi richiesti nel nostro modello di prenotazione.
‫Quindi tour,
‫utente e prezzo.
‫Quindi tour
‫è uguale a req.
‫parametri.
‫turistico vero?
‫Allora cosa ho fatto qui?
‫Quindi è corretto.
‫Successivamente abbiamo bisogno dell'utente.
‫Quindi utente, che è su
‫richiesta. utente. ID.
‫E infine abbiamo bisogno del
‫prezzo,
‫che è al tour. prezzo.
‫Va bene.
‫Ora, come ho detto prima,
‫questo ovviamente non è affatto
‫sicuro perché in questo
‫momento chiunque conosca questa struttura di URL qui potrebbe
‫semplicemente chiamarla senza passare attraverso il processo di checkout, giusto?
‫E così chiunque potrebbe
‫davvero prenotare un tour senza dover pagare.
‫Tutto quello che dovrebbero fare è aprire questo URL
‫con il tour, l'utente e il
‫prezzo e quindi creeranno automaticamente una nuova prenotazione
‫senza nemmeno pagare, ok?
‫Quindi, di nuovo, non è davvero sicuro, ma
‫per ora come soluzione funziona
‫bene perché non molte persone ovviamente sapranno che questo
‫è il nostro URL di successo.
‫Va bene?
‫Perché in realtà nasconderemo questo fatto
‫un po' tra un secondo, ok?
‫Quindi creiamo ora la funzione che creerà effettivamente la nuova
‫prenotazione nel database.
‫Quindi questo andrà alle esportazioni dot
‫create booking checkout e
‫si chiama creare booking checkout perché in seguito
‫avremo anche creare prenotazione,
‫che sarà quindi accessibile dalla
‫nostra API
‫di
‫prenotazione.
‫Va bene.
‫Comunque.
‫Qui come sempre.
‫E iniziamo ottenendo i nostri dati dalla stringa di query.
‫E quindi per questo userò la strutturazione.
‫Quindi
‫tour, utente
‫e prezzo sono disponibili su richiesta. interrogazione.
‫Quindi ricorda che è la stringa di query.
‫Quindi in realtà vogliamo solo creare
‫una nuova prenotazione se tutti questi qui sono specificati.
‫E quindi in pratica diciamo che se non esistono, allora giriamo e
‫passiamo al middleware successivo.
‫Quindi questa è la nostra procedura standard, giusto?
‫Quindi diciamo che se
‫non c'è
‫tour e nessun utente
‫e nessun prezzo.
‫Quindi fondamentalmente richiediamo che esistano tutti su di essi.
‫E quindi, in tal caso, passiamo al
‫middleware successivo.
‫Ora, qual è esattamente il prossimo middleware?
‫Ricorda che vogliamo
‫creare una nuova prenotazione su questo URL di casa.
‫Quindi questo qui.
‫Perché ancora una volta questo è l'URL
‫che viene chiamato ogni volta che un acquisto ha esito positivo con Stripe.
‫Quindi quello che dobbiamo fare è aggiungere questa funzione middleware che stiamo creando
‫proprio ora nello stack middleware di questo
‫gestore di route.
‫Quindi che gestore di percorso è?
‫Bene, è in vista delle rotte
‫ed è questa, giusto?
‫Quindi probabilmente suona un po' confuso.
‫Ma ancora una volta questo è il
‫percorso che verrà colpito quando una carta di credito viene addebitata con successo.
‫E quindi questo è anche il momento in cui vogliamo creare una
‫nuova prenotazione.
‫E quindi qui è dove dobbiamo
‫aggiungere quella funzione middleware, quindi facciamolo e
‫richiediamo il nostro controller
‫e ora lo duplichiamo qui.
‫Quindi il controller di
‫prenotazione e ora modificherò effettivamente qui proprio all'inizio perché non importa se
‫abbiamo effettuato l'accesso o meno per questo.
‫Quindi bookingcontroller. ottenere, o in
‫realtà non creare
‫bookingcheckout.
‫Salvalo e va
‫bene.
‫E di nuovo questo è solo un po 'temporaneo
‫fino a quando non avremo effettivamente distribuito i nostri
‫siti Web su un
‫server dove saremo quindi in grado di creare una soluzione migliore per questo.
‫Va bene?
‫Quindi qui nel controller di prenotazione è
‫ora il momento di creare effettivamente quella nuova prenotazione.
‫E quindi ora dobbiamo importare quel modello.
‫Quindi facciamolo qui.
‫Prenotazione e
‫modello di prenotazione anche qui.
‫E per qualche ragione qui ho questi strani percorsi.
‫Quindi questi non hanno alcun senso.
‫Non sono sicuro del motivo per cui li ho scritti in questo modo allora.
‫Quindi quello che abbiamo lì è esattamente lo stesso di questo.
‫Ma ovviamente questo è più leggibile.
‫Comunque.
‫Creiamo ora quella prenotazione.
‫E quindi per questo dovremo
‫attendere la prenotazione. creare con un
‫oggetto
‫di tour, utente e prezzo.
‫E questo è tutto.
‫Ora dobbiamo anche contrassegnare questo
‫qui come asincrono e come
‫sempre catchasync.
‫Va bene?
‫E non lo stiamo salvando bene
‫in nessuna variabile perché non ne abbiamo davvero bisogno.
‫Non lo invieremo indietro come risposta API.
‫A questo punto tutto ciò che vogliamo fare qui è
‫creare quel nuovo documento, ok?
‫Il prossimo
‫potrebbe quindi dire il prossimo, in questo modo.
‫E quindi questo passerebbe
‫al prossimo middleware, ma non è proprio l'ideale.
‫Quindi, ancora una volta, tieni presente che il prossimo
‫middleware nello stack è ovviamente questo
‫e la panoramica di get.
‫Quindi fondamentalmente la
‫funzione che renderà la nostra pagina.
‫Ma ricorda che questo URL è tutto questo.
‫Quindi tutto questo con tutti questi dati qui.
‫E quindi, ancora una volta, non è affatto sicuro.
‫E quindi almeno rendiamolo
‫un po' più sicuro, ok?
‫E quindi
‫quello che possiamo fare qui è fondamentalmente reindirizzare
‫l'applicazione ora solo a questo URL.
‫E quindi in pratica stai
‫rimuovendo la stringa di query dall'URL originale.
‫E quindi ora
‫useremo qualcosa che non abbiamo mai usato prima.
‫Quindi è fantastico, giusto?
‫Quindi useremo il reindirizzamento.
‫Va bene?
‫Quindi ora quello che
‫vogliamo è l'intero URL, ma senza la stringa di query.
‫Quindi quello che potremmo
‫fare è
‫semplicemente imbrogliare e copiare questo qui.
‫Ma rendiamolo un po' più elegante.
‫Quindi quello che stiamo facendo è una richiesta. theoriginalurl, che abbiamo già usato
‫prima.
‫E quindi questo è fondamentalmente
‫l'intero URL da cui proviene la richiesta.
‫E quindi ora quello
‫che dobbiamo fare è dividerlo per il punto interrogativo.
‫Destra?
‫Perché questo è il divisore tra la parte che effettivamente
‫vogliamo e la stringa di query.
‫Quindi, se lo dividiamo per il punto interrogativo,
‫avremo un array in cui il primo
‫elemento è questo e il secondo elemento è tutto il resto.
‫Quindi la stringa di query stessa.
‫E quindi
‫qui prendiamo il primo elemento e quindi quella è la nostra homepage.
‫Quindi l'URL del nostro percorso.
‫E ciò che il reindirizzamento qui fa è fondamentalmente creare una nuova
‫richiesta ma a questo nuovo URL che abbiamo passato lì.
‫Va bene?
‫Quindi questo ora creerà
‫un'altra richiesta al nostro URL di percorso.
‫Quindi affronteremo di nuovo questa strada.
‫E così ancora una volta ci occuperemo di questo middleware qui.
‫Quindi quello che stiamo solo creando.
‫Quindi per la seconda volta lo faremo, ma ora il tour, l'utente e il prezzo non
‫sono più definiti.
‫E quindi passeremo al prossimo middleware, che alla fine è
‫la funzione di
‫gestione della panoramica di get, che poi renderemo semplicemente la home page, ok?
‫Aveva senso?
‫Quindi questa è una specie di circolare allora.
‫Quindi fondamentalmente
‫all'inizio percorreremo questa strada qui.
‫Quindi viene creata una
‫nuova prenotazione qui e reindirizziamo nuovamente l'applicazione su
‫questa rotta, questa volta senza la stringa di query.
‫E così,
‫senza la stringa di query e questo
‫middleware, siamo passati direttamente al successivo.
‫E così solo allora
‫arriviamo a è loggato e otteniamo una panoramica.
‫Va bene?
‫E quindi è davvero così, va bene?
‫Bene, è proprio qui che
‫questo è solo temporaneo perché
‫non è sicuro.
‫Tutti possono prenotare senza
‫pagare.
‫Quindi, di nuovo, sarebbe terribile per l'azienda.
‫Ok, ora è il momento di testarlo.
‫E quindi in realtà voglio farlo con quell'altro utente che abbiamo creato che
‫è jonas@mailsac.
‫E questo
‫perché voglio vedere se riceviamo effettivamente quella ricevuta via e-mail da Stripe.
‫Quindi
‫accediamo con quell'utente al nostro sito web.
‫Quindi disconnettiti.
‫Beh, non funziona.
‫Quello è strano.
‫Ricarichiamo.
‫E dovrebbe funzionare, quindi vediamo se abbiamo qualche errore nel
‫nostro javascript.
‫Perché in realtà è rivolto al cliente e otteniamo che
‫Stripe non è definito.
‫Vediamo se abbiamo lo stesso errore qui in
‫questa pagina, che non dovremmo, giusto?
‫E in
‫realtà non c'è, ma torna in tutti i tour.
‫Sì, è lì.
‫Quindi la soluzione è spostarlo
‫dal tour praticamente a tutte le pagine.
‫Va bene?
‫Quindi, per qualche motivo, l'impacchettatore di
‫pacchi lo fa in modo che debba essere qui nell'ambito
‫principale per tutti loro.
‫Quindi per tutte le pagine, ok?
‫Quindi in realtà mettiamolo qui in basso a destra
‫prima del nostro pacchetto.
‫Va bene?
‫Riprova e così ora siamo a posto.
‫Quindi
‫disconnettiti e ha funzionato.
‫Ora accedi.
‫Ovviamente ora la nostra copia non c'è più.
‫Uno due tre quattro.
‫No, non è corretto.
‫Prova uno due tre quattro.
‫Quindi immagino di aver cambiato la password ad un certo punto, quindi
‫proviamo una nuova
‫password, che non funziona neanche.
‫Proviamo a passare uno due tre quattro
‫e ha funzionato.
‫Quindi non è test uno due
‫tre quattro, ma passa uno due tre quattro.
‫Almeno qui nel mio caso.
‫Allora proviamo a prenotare il diciamo
‫lo sportivo.
‫Va bene.
‫Qui sotto.
‫Prenota il tour e
‫funziona ancora ed è quello
‫costoso.
‫(ride) Quindi quattro due quattro due e
‫poi quattro due fino
‫alla fine.
‫Poi ecco qualche mese ed ecco qualche numero.
‫Diciamo il mio nome per
‫intero qui e ora andiamo a pagare.
‫E darò un'occhiata alla barra degli indirizzi.
‫E infatti otteniamo la nostra
‫homepage, quindi il nostro URL di percorso senza alcuna stringa di query che abbiamo specificato prima.
‫Quindi significa che qualcosa sta funzionando.
‫Quindi diamo un'occhiata alla bussola e fai clic qui per ricaricare
‫e otteniamo la nostra raccolta di prenotazioni.
‫E questo è un buon segno.
‫E infatti ci siamo.
‫Viene creato il nostro primo documento.
‫Quindi ricorda che era quel prezzo.
‫Diamo anche un'occhiata all'id dell'utente che
‫è questo che termina in otto E tre B.
‫Quindi otto mi tre si, è corretto.
‫E presumo che anche il tour sarà corretto.
‫Così perfetta.
‫Anche questo ha funzionato e quindi ora abbiamo davvero un
‫modo per creare prenotazioni ogni volta
‫che si verifica una prenotazione con Stripe.
‫Diamo anche un'occhiata veloce alle nostre dashboard qui di nuovo.
‫È davvero divertente.
‫E immagino che devo solo ricaricare qui.
‫Quindi vediamo.
‫Ecco Jonas a qualunque cosa abbiamo chiamato che è.
‫Abbiamo l'amante
‫dello
‫sport e perfetto.
‫Adesso funziona.
‫E il compito finale.
‫Diamo ora un'occhiata a mailsac.
‫Sacco di posta
‫com e vedi se ho ricevuto
‫la mia email lì.
‫E in realtà non l'ho fatto, ma
‫non è un grosso problema.
‫Non sono sicuro che forse non funziona con i dati di test.
‫E quindi per ora è tutto
‫ciò che ho da mostrarvi sull'integrazione di Stripe.
‫Ora di
‫nuovo, una volta implementato un sito Web, utilizzeremo effettivamente
‫Stripe Webhook per
‫creare prenotazioni in un modo più sicuro e molto migliore.
‫Va bene?
‫Quindi prendiamoci ancora un minuto per ricapitolare quello che abbiamo fatto qui.
‫Quindi in pratica abbiamo aggiunto
‫tutte le variabili di cui abbiamo bisogno
‫per creare una nuova prenotazione all'URL di successo.
‫Quindi abbiamo aggiunto una nuova funzione
‫middleware qui allo stack di quell'esatto percorso.
‫Quindi questo qui.
‫E così, ogni
‫volta che viene colpito questo URL qui, cercheremo di creare una nuova prenotazione.
‫Va bene?
‫Ma quella nuova prenotazione viene ovviamente creata solo quando il tour, l'utente e il
‫prezzo sono specificati nella query.
‫E così in questa funzione middleware, se sono specificati
‫bene nella query, creiamo qui
‫una nuova prenotazione.
‫Quindi, dopo aver fatto ciò, rimuoviamo la stringa di query
‫dall'URL per rendere l'intero processo un po' meno trasparente
‫per l'utente.
‫Fondamentalmente in modo che l'intera stringa di
‫query non venga visualizzata nella barra degli URL del nostro browser.
‫E poi quaggiù reindirizziamo la
‫nostra applicazione a questo nuovo URL di percorso qui, ok?
‫E così in questo modo questo middleware qui
‫verrà saltato e quindi la nostra normale homepage verrà semplicemente renderizzata.
‫Va bene?
‫Eliminiamo questo errore dell'app qui e
‫la fabbrica di cui avremo effettivamente bisogno nella prossima lezione.
‫Quindi in quella prossima lezione ci
‫occuperemo effettivamente di implementare un'ultima parte del nostro sito Web,
‫che fondamentalmente è questa pagina qui per le mie prenotazioni.
‫E ciò che farà questa pagina è fondamentalmente visualizzare una carta
‫del tour per ciascuno dei tour che abbiamo prenotato.
‫Quindi sembra
‫abbastanza simile a questa homepage, ma solo con
‫i tour che l'utente attualmente connesso ha prenotato, va bene?
‫Quindi questa è una bella caratteristica per un sito web, giusto?
‫E quindi occupiamoci di questo nel prossimo.