‫Istruttore: Quindi in questo video
‫integriamo Stripe nel nostro backend creando quell'endpoint API
‫che creerà e invierà una sessione di checkout Stripe.
‫E quindi, a questo punto, inizieremo a creare la
‫nostra prossima risorsa.
‫E quindi queste sono le prenotazioni.
‫E comincerò da qui con i percorsi di prenotazione.
‫Quindi
‫prenotazione percorsi. js.
‫E l'abbiamo fatto così tante volte adesso.
‫Allora vado avanti, copio tutto
‫questo codice e
‫lo metto qui nei percorsi di prenotazione.
‫E poi semplicemente rimuovi tutto questo.
‫E anche questo.
‫Inoltre, non abbiamo bisogno di parametri di unione
‫e avremo un controller di prenotazione invece di un controller
‫di revisione.
‫Quindi, controllore della prenotazione, creiamolo.
‫Così. js che
‫sembra corretto e integriamo
‫anche questo diritto nell'app. js.
‫E quindi mettiamolo qui dopo
‫il router di revisione.
‫Quindi qui
‫sono solo di nuovo le prenotazioni e poi, naturalmente,
‫quaggiù integrale nella nostra API.
‫Quindi bookings
‫e qui bookings router.
‫E penso che dovrebbe essere solo la prenotazione.
‫Quindi sistemiamo anche qui.
‫E infatti lo chiamiamo router di prenotazione.
‫E lo stesso qui, non si tratta di prenotazioni
‫ma di percorsi di prenotazione.
‫Quindi salvalo.
‫Chiudi questo e
‫questo e anche questo qui.
‫E quindi ora andiamo avanti e creiamo
‫il nostro primo percorso qui.
‫Quindi passiamo al router. get e il percorso
‫che creerà qui non seguirà ancora una volta
‫il principio del resto perché questo non riguarderà davvero la
‫creazione, l'acquisizione o l'aggiornamento di alcuna prenotazione.
‫Invece questo percorso sarà solo per il cliente
‫per ottenere una sessione di pagamento.
‫E quindi chiamiamola effettivamente questa
‫sessione di pagamento.
‫Quindi dobbiamo proteggere questo percorso in
‫modo che solo gli utenti
‫autenticati possano effettivamente ottenere una sessione di pagamento.
‫Quindi ha senso, no?
‫E poi aggiungi il controller di prenotazione.
‫Creeremo un gestore di
‫route chiamato get checkout session.
‫Va bene.
‫Quindi
‫copiamo questo e creiamolo qui alle esportazioni. getCheckoutSession quindi la richiesta risponde
‫successivamente.
‫E ora iniziamo a lavorare.
‫Ora in realtà c'è un'altra cosa che dobbiamo fare qui
‫nelle rotte che è specificare un parametro URL.
‫E quindi questo sarà l'ID del tour.
‫Ok, quindi in pratica vogliamo che
‫il cliente invii l'ID del tour che è attualmente prenotato.
‫Ed è così che possiamo riempire la sessione di checkout con tutti
‫i dati necessari, come il nome del tour e il
‫prezzo del tour e tutto il resto.
‫Bene, ora abbiamo accesso all'ID del tour in questa
‫funzione di gestione e quindi la prima cosa
‫che faremo è
‫trovare quel tour nel nostro database.
‫Va bene, quindi per questo abbiamo ovviamente bisogno del modello del tour.
‫Quindi veniamo qui dal tour controller
‫e prendiamolo da lì.
‫Inoltre avremo bisogno di
‫questo catchAsync e quindi davvero tutto questo.
‫Quindi sto copiando tutto e anche se
‫non ne ho bisogno subito,
‫probabilmente ne avrò bisogno comunque un po' più tardi.
‫Va bene.
‫Quindi impostiamo di nuovo i nostri passaggi qui.
‫Quindi prendi il tour attualmente prenotato.
‫Quindi, come secondo passaggio, creiamo la sessione di
‫checkout e infine la inviamo al cliente.
‫Va bene, quindi il primo passo è davvero facile.
‫Quindi aspetteremo.
‫Quindi tour. findbyId
‫che è req. parametri. tourId.
‫Giusto, questo
‫era il nome che gli abbiamo dato nel parametro URL.
‫E ovviamente, questa è ora
‫una funzione asincrona con un catchAsync oltre a quello o intorno a quello, in realtà.
‫Ottimo, il prossimo passo è creare quella sessione qui.
‫E per questo abbiamo effettivamente bisogno di installare
‫questo pacchetto NPM dell'unità.
‫Quindi facciamolo qui.
‫NPM installa Stripe.
‫E nel frattempo andremo alla nostra dashboard di Stripe e
‫prenderemo la nostra chiave segreta da qui.
‫Quindi premi questo pulsante qui
‫e poi vai avanti e copialo.
‫E vedi che qui nelle chiavi in realtà
‫c'è scritto test.
‫E così di nuovo, questi qui
‫sono solo per i test e poi una volta che hai il tuo
‫account Stripe attivo, puoi ottenere le tue chiavi API live.
‫Ok, ora come con qualsiasi altra
‫chiave, le inseriremo qui nel nostro file di configurazione.
‫Quindi la chiave segreta Stripe è uguale a
‫questa.
‫E questo non è corretto qui.
‫Va bene, quindi copia questo.
‫Torna al nostro controllore di prenotazione.
‫Ora richiediamo effettivamente che questo
‫pacchetto di unità sia stato installato con successo qui.
‫E solo con tutti gli altri pacchetti prima
‫assicurati di essere effettivamente sulla
‫stessa versione di me.
‫E vedi che sono qui al nuovissimo 7. 0. 0.
‫Quindi questo è davvero nuovo di zecca.
‫E in realtà è perché
‫molte cose sono cambiate con Stripe un paio di giorni fa.
‫Quindi ho dovuto modificare un paio di queste implementazioni.
‫Ad ogni modo,
‫const stripe equal require e poi stripe.
‫Ora questo qui esporrà fondamentalmente una funzione.
‫E di solito quello che facciamo subito è passare la
‫nostra chiave segreta proprio in quello.
‫E così questo ci darà un oggetto Stripe
‫con cui possiamo lavorare.
‫In modo che ora al processo. avv. STRIPE_SECRET_KEY.
‫Ok, quindi ora usiamolo.
‫Quindi diciamo Stripe. guardare. sessione. creare.
‫E poi il solito oggetto di opzioni.
‫Bene, ora ci sono un sacco di
‫opzioni che possiamo impostare qui.
‫Ma ne servono solo tre.
‫Quindi il primo sono i tipi di metodo di pagamento.
‫Quindi tipi di metodo di pagamento.
‫Quindi questo è un array in cui possiamo specificare più tipi
‫e la carta è per la carta di credito.
‫E in questo momento sono in realtà tutte
‫le opzioni di pagamento che possiamo usare per il checkout di Stripe.
‫Ma ho letto che in futuro aggiungeranno molto di più.
‫Quindi puoi essere informato da questo.
‫Quindi dobbiamo specificare l'URL di successo.
‫E quindi questo è fondamentalmente l'URL che verrà
‫chiamato non appena una carta di credito sarà stata addebitata con successo.
‫Quindi, non appena l'acquisto è andato a buon
‫fine, l'utente verrà reindirizzato a questo URL.
‫E per ora, specifichiamolo semplicemente come nostra homepage.
‫Va bene e lo faremo
‫come prima con req. protocol:// e poi
‫request. ottenere l'ospite.
‫Quindi fondamentalmente solo il nostro URL di casa.
‫Quindi dobbiamo anche specificare l'URL di cancellazione.
‫Quindi proprio così.
‫E questo sarà simile.
‫E quindi fondamentalmente è la pagina
‫in cui l'utente va se sceglie di annullare il pagamento corrente.
‫E in effetti facciamoli andare alla pagina del
‫tour dove erano in precedenza.
‫E quindi questo è fondamentalmente tour/tour. lumaca.
‫Successivamente, possiamo anche specificare l'e-mail del cliente.
‫E questo è molto utile perché ovviamente abbiamo
‫già accesso all'e-mail del cliente.
‫E così con questo possiamo salvare l'utente di un passaggio
‫e rendere l'esperienza di pagamento molto più agevole.
‫Va bene, quindi ricorda che questo è un percorso protetto.
‫E così come sempre l'utente è già alla richiesta.
‫E quindi possiamo dire richiesta. utente. e-mail.
‫Successivamente, possiamo anche
‫specificare un campo personalizzato chiamato ID di riferimento del cliente.
‫E questo suona un po' strano,
‫ma in realtà sarà davvero importante per noi.
‫Quindi questo campo ci
‫permetterà di passare alcuni dati sulla sessione che stiamo creando.
‫E questo è importante perché in seguito, una volta
‫che l'acquisto è andato a
‫buon fine, avremo nuovamente accesso all'oggetto sessione.
‫E per allora, vogliamo creare una nuova
‫prenotazione nel nostro database.
‫Quindi ricorda il diagramma
‫che ti ho mostrato nell'ultima lezione.
‫Fondamentalmente quello di cui sto
‫parlando qui è l'ultimo passaggio in quel diagramma.
‫E ricorda anche come funzionerà
‫solo con i siti Web distribuiti.
‫Ma comunque, prepariamoci già qui.
‫Ok, quindi per creare una nuova prenotazione nel
‫nostro database avremo bisogno dell'ID dell'utente, dell'ID del tour e del prezzo.
‫Ricordati che?
‫E in
‫questa sessione abbiamo già accesso
‫all'e-mail dell'utente e da quella
‫possiamo quindi ricreare l'ID dell'utente perché l'e-mail qui è unica.
‫Specifichiamo anche il prezzo del tour qui
‫in un secondo e quindi tutto ciò che manca è l'ID del tour.
‫E quindi è quello che specificheremo qui su
‫questo campo personalizzato fondamentalmente.
‫Quindi questo è chiamato ID di riferimento del cliente.
‫E tutto ciò che ho appena spiegato prima in realtà avrà
‫molto più senso una
‫volta implementato l'ultimo passaggio della creazione
‫di una prenotazione nel database, giusto?
‫Comunque, l'ID del tour è su richiesta. parametri. tourId.
‫Va bene, e
‫ora, finalmente, specificheremo alcuni dettagli sul prodotto stesso.
‫Quindi il nostro tour in questo caso.
‫E così si chiamano
‫elementi pubblicitari che accettano un array di oggetti.
‫Quindi fondamentalmente uno per articolo
‫e quindi nel nostro caso sarà solo uno.
‫Quindi dobbiamo specificare il nome
‫del prodotto e quindi è in tour. nome e come sempre a quel
‫nome aggiungiamo anche il tour.
‫Quindi possiamo anche specificare una descrizione.
‫E tutti questi nomi di campo qui vengono davvero da Stripe.
‫Quindi non possiamo creare i nostri campi.
‫Quindi, se provi a farlo, otterrai davvero qualche errore.
‫Va bene, quindi nella descrizione metterò il riassunto del tour,
‫quindi quella simpatica breve frase
‫che descriverà ogni tour.
‫Quindi possiamo anche specificare un array di immagini.
‫Ora queste immagini qui devono essere immagini dal vivo.
‫Quindi fondamentalmente le immagini che sono ospitate
‫su Internet perché Stripe caricherà effettivamente
‫questa immagine sul proprio server.
‫E quindi questa è un'altra delle cose che possiamo
‫davvero fare solo una volta che il sito web è stato implementato.
‫Ma per ora, come segnaposto, utilizzerò fondamentalmente quelli del nostro
‫sito Web di esempio ospitato su natours. sviluppatore
‫Quindi andiamo su quel sito web.
‫Quindi questo è quello di natours. sviluppatore
‫E l'immagine che sceglierò è l'immagine di copertina.
‫Quindi esaminiamo quell'immagine.
‫Quindi questo qui e copia l'indirizzo del link qui.
‫Va bene.
‫Quindi questo è
‫un array perché possiamo specificare più immagini ma in realtà ne vogliamo solo una.
‫E infatti abbiamo natours. dev/images/tours e poi il
‫nome dell'immagine.
‫E questo lo sostituirò semplicemente con tour. copertina dell'immagine.
‫E funzionerà perché
‫i nomi delle immagini su natours. dev sono esattamente gli stessi che abbiamo
‫qui nel nostro progetto.
‫Quindi tour. immagineCopertina.
‫Quindi questa è
‫un'altra cosa che dobbiamo effettivamente cambiare una volta messo in produzione il nostro sito web.
‫E in realtà tengo una
‫lista di quella roba così non dimentichiamo nulla.
‫Comunque, il prossimo è l'importo.
‫Quindi sostanzialmente il prezzo del
‫prodotto che viene acquistato.
‫Quindi questo è il tour. prezzo e ora
‫dobbiamo moltiplicarlo per 100.
‫Perché questo importo dovrebbe essere in centesimi.
‫E così un dollaro o un euro o davvero la
‫maggior parte delle valute ha 100 centesimi.
‫Quindi un dollaro equivale a 100 centesimi.
‫E quindi per convertirlo in centesimi, basta moltiplicarlo per 100.
‫Quindi dobbiamo anche specificare la valuta.
‫E quindi questo è in questo caso USD.
‫Ma potrebbe anche essere
‫come, per l'euro è EUR e per altre valute,
‫dovresti probabilmente dare un'occhiata alla documentazione.
‫Quindi ovviamente non posso
‫coprire tutte le valute che ci sono, giusto?
‫Comunque, finalmente specifichiamo anche la quantità.
‫E quindi questo è solo un tour in questo caso.
‫Quindi è davvero così.
‫E quindi fondamentalmente questa
‫parte qui è l'informazione sulla sessione stessa.
‫E poi ecco le
‫informazioni sul prodotto che l'utente sta per acquistare.
‫Bene, ora memorizziamo effettivamente la sessione.
‫Quindi const sessione e ora
‫aspettiamo questo.
‫Quindi questa creazione qui sostanzialmente restituisce una
‫premessa perché l'impostazione di tutte queste opzioni
‫qui fondamentalmente eseguirà una
‫chiamata API a Stripe e quindi ovviamente questa
‫è una funzione asincrona che dovremmo aspettare qui.
‫Ok, ma comunque questa
‫è ora la nostra sessione e quindi l'ultimo
‫passo è ovviamente rispedirla al cliente.
‫Quindi, come sempre,
‫lo stato è il successo.
‫E poi inviamo semplicemente la sessione in questo modo.
‫Va bene, quindi dovrebbe essere così.
‫Il nostro router è già configurato e
‫quindi penso che
‫ora potremmo effettivamente provarlo in postino.
‫Va bene, ora più
‫tardi ovviamente non permetteremo a nessuno di farlo usando il
‫postino perché non ha molto senso.
‫Ma ora, poiché lo stiamo
‫solo testando, in realtà ha molto senso.
‫Va bene, allora andiamo
‫dal postino e creiamo una nuova richiesta.
‫Quindi sarà alle
‫prenotazioni/ uh, non ne sono proprio sicuro.
‫Sì, quindi checkout session e poi /tourId.
‫Va bene, quindi mettiamo qui i nostri tour.
‫Per ottenere l'ID da lì in pratica.
‫Quindi facciamo il Sea Explorer.
‫Ok, e questo dovrebbe essere sufficiente.
‫Oh aspetta, ovviamente non abbiamo effettuato l'accesso.
‫Quindi accedi qui.
‫Ora siamo in admin,
‫ma usiamo qualcun altro qui.
‫E penso che abbiamo
‫usato Leo prima, quindi ora usiamo quell'utente.
‫Ora abbiamo una password errata.
‫Va bene, vediamo cos'altro abbiamo.
‫Quindi quali altri utenti potremmo usare.
‫E in realtà usiamo Monica qui.
‫Perchè no?
‫Quindi speriamo che la sua password sia corretta.
‫Bene, proviamo a sostituirlo qui
‫con test1234.
‫Bene, forse abbiamo cambiato le
‫password di tutti questi utenti in altre lezioni prima.
‫Quindi usiamo John qui.
‫Quindi so che non abbiamo mai usato
‫John, quindi ora deve funzionare.
‫Oh, in realtà vedo l'errore che ho appena fatto prima.
‫Quindi qui non è natours, deve essere un esempio. com.
‫Quindi proviamo di nuovo con Monica qui.
‫O davvero solo con John.
‫Questo è più difficile di quanto mi aspettassi.
‫Ma ora finalmente siamo registrati.
‫Va bene, quindi con
‫questo, proviamo a ottenere la nostra sessione di pagamento.
‫Ci manca l'autorizzazione da qui.
‫Ancora una volta, e ora otteniamo un vero errore qui.
‫Quindi qualcosa che in realtà proviene dal
‫codice che abbiamo appena scritto.
‫Va bene.
‫Quindi diamo un'occhiata.
‫E il problema è che qui si tratta in realtà di sessioni.
‫Quindi striscia. guardare. sessioni.
‫Un'altra volta.
‫Questa volta ci vuole molto più tempo, il che è un buon segno.
‫E abbiamo un altro errore.
‫Quindi la riga 15 non può leggere lo slug del nodo.
‫D'accordo, beh, sicuramente è strano perché dovrebbe
‫esserci una lumaca in questo tour.
‫Quindi uh sì, vedi che qui lo
‫è davvero.
‫Quindi forse qualcosa è
‫andato storto durante la lettura di questo tour.
‫Cosa che non riesco davvero a capire perché dovrebbe essere.
‫Ma proviamo a registrare il tour sulla console.
‫Va bene, e in realtà otteniamo zero.
‫Il che probabilmente significa
‫che c'è un ID tour non definito correttamente.
‫Oh, ecco il problema.
‫Quindi ce l'ho, ID tutto
‫maiuscolo, ma poi qui nel controller ho la D in minuscolo.
‫Quindi così.
‫E quindi questo è
‫il piccolo tipo di bug che accadono tutto il tempo ovviamente.
‫Quindi vediamo qual è il prossimo.
‫Oh e in realtà questa volta abbiamo capito bene.
‫Quindi vedi che è la sessione che abbiamo appena creato.
‫E modifica altre cose qui, ma questo non ha molta importanza
‫per noi in questo momento.
‫Ciò che è davvero interessante da vedere è
‫che ora possiamo già
‫vedere questo pagamento, o almeno questa richiesta
‫di pagamento, diciamo nei nostri cruscotti di guida.
‫Quindi, se andiamo lì
‫e andiamo ai pagamenti e poi a tutti, vedrai che
‫quest'ultimo qui in realtà è successo proprio ora.
‫Quindi, se facciamo clic su questo, vedrai alcuni dati a riguardo.
‫Quindi vedi ad esempio che si tratta in realtà
‫del Sea Explorer Tour.
‫Hai anche il prezzo, hai anche l'immagine.
‫Probabilmente anche alcuni dati sull'utente.
‫E in realtà no, non proprio.
‫Ma ciò che conta qui è che dice incompleto.
‫E questo perché abbiamo creato solo la sessione
‫di checkout sul server.
‫E quindi ci
‫manca il secondo passaggio in cui poi addebitiamo
‫effettivamente la carta di credito dal lato del cliente.
‫Quindi, visto che ci
‫manca, facciamolo nel prossimo video.