‫Instruktur: Jadi dalam video ini mari
‫kita integrasikan Stripe ke backend kita dengan membuat titik akhir
‫API yang akan membuat dan mengirim kembali sesi checkout Stripe.
‫Jadi pada titik ini, kita sebenarnya akan mulai membuat
‫sumber daya berikutnya.
‫Dan begitulah pemesanannya.
‫Dan saya akan mulai di sini dengan rute pemesanan.
‫Jadi
‫pemesanan rute. js.
‫Dan kami telah melakukannya berkali-kali sekarang.
‫Jadi saya akan menyalin semua
‫kode ini dan
‫meletakkannya di sini di rute pemesanan.
‫Dan kemudian cukup hapus semua ini.
‫Dan juga yang ini.
‫Kami juga tidak perlu menggabungkan params
‫dan kami akan memiliki pengontrol pemesanan alih-alih pengontrol
‫ulasan.
‫Jadi pengontrol pemesanan, mari kita buat itu.
‫Jadi. js yang terlihat
‫benar dan mari kita juga
‫mengintegrasikan ini langsung ke app.js. js.
‫Jadi mari kita letakkan di
‫sini setelah router review.
‫Jadi di sini
‫itu hanya lagi pemesanan dan kemudian tentu saja di sini
‫mengintegrasikannya ke dalam API kami.
‫Jadi pemesanan
‫dan di sini pemesanan router.
‫Dan saya pikir itu seharusnya hanya pemesanan.
‫Jadi mari kita perbaiki di sini juga.
‫Dan memang kami menyebutnya sebagai booking router.
‫Dan hal yang sama di sini, bukan
‫pemesanan tetapi pemesanan rute.
‫Jadi, simpanlah.
‫Tutup yang ini dan
‫yang ini dan yang ini juga di sini.
‫Jadi sekarang mari kita lanjutkan dan buat
‫rute pertama kita di sini.
‫Jadi mari kita router. dapatkan dan rute yang
‫akan dibuat di sini sekali lagi tidak akan
‫mengikuti prinsip lainnya karena yang satu ini tidak benar-benar tentang membuat
‫atau mendapatkan atau memperbarui pemesanan apa pun.
‫Alih-alih, rute ini hanya untuk klien
‫untuk mendapatkan sesi checkout.
‫Jadi, mari kita sebut sesi checkout
‫yang satu ini.
‫Kemudian kita perlu melindungi rute ini
‫sehingga hanya pengguna yang
‫diautentikasi yang benar-benar bisa mendapatkan sesi checkout.
‫Jadi masuk akal, kan?
‫Dan kemudian tambahkan pengontrol pemesanan.
‫Kita akan membuat penangan
‫rute yang disebut get checkout session.
‫Baiklah.
‫Jadi mari
‫kita salin yang ini dan buat di sini di ekspor. getCheckoutSession lalu permintaan ditanggapi
‫selanjutnya.
‫Dan sekarang mari kita mulai bekerja.
‫Sekarang sebenarnya ada satu hal lagi yang perlu kita lakukan
‫di sini di rute yang menentukan parameter URL.
‫Dan itu akan menjadi ID tur.
‫Oke, jadi pada dasarnya kami ingin
‫klien mengirimkan ID tur yang saat ini mulai dipesan.
‫Dan itu agar kita dapat mengisi sesi checkout dengan
‫semua data yang diperlukan, seperti nama tur
‫dan harga tur dan sebagainya.
‫Baiklah, jadi kita sekarang memiliki akses ke ID tur dalam
‫fungsi handler ini dan hal pertama yang sebenarnya akan
‫kita lakukan adalah
‫menemukan tur itu di database kita.
‫Baiklah, jadi untuk itu kita membutuhkan model wisata tentunya.
‫Jadi mari kita datang ke pengontrol tur
‫dan mendapatkannya dari sana.
‫Juga kita akan
‫membutuhkan catchAsync ini dan semua ini.
‫Jadi saya menyalin semuanya dan
‫bahkan jika saya tidak
‫membutuhkannya segera, saya mungkin akan membutuhkannya nanti.
‫Baiklah.
‫Jadi mari kita tata langkah kita di sini lagi.
‫Jadi dapatkan tur yang saat ini dipesan.
‫Kemudian sebagai langkah kedua, kami membuat sesi
‫checkout dan akhirnya mengirimkannya ke klien.
‫Baiklah, jadi langkah pertama sangat mudah.
‫Jadi kita akan menunggu.
‫Jadi tur. findbyId
‫yang merupakan req. param ID tur
‫Benar, jadi
‫itulah nama yang kami berikan di parameter URL.
‫Dan tentu saja, ini
‫sekarang merupakan fungsi async dengan catchAsync selain itu atau sekitar itu, sebenarnya.
‫Bagus, selanjutnya, mari kita buat sesi itu di sini.
‫Dan untuk itu sebenarnya kita perlu menginstal
‫paket NPM drive ini.
‫Jadi mari kita lakukan itu di sini.
‫NPM menginstal Stripe.
‫Dan sementara itu kita akan pergi ke dashboard Stripe kita
‫dan mendapatkan kunci rahasia kita dari sini.
‫Jadi tekan saja tombol ini
‫di sini lalu lanjutkan dan salin.
‫Dan Anda melihat bahwa di sini di kunci itu
‫sebenarnya tertulis tes.
‫Dan sekali lagi, yang ini
‫di sini hanya untuk pengujian dan kemudian setelah akun Stripe Anda aktif,
‫Anda kemudian bisa mendapatkan kunci API langsung Anda.
‫Oke, sekarang seperti halnya kunci lainnya,
‫kami akan meletakkannya di sini di file konfigurasi kami.
‫Jadi kunci rahasia Stripe sama dengan
‫ini.
‫Dan ini tidak benar di sini.
‫Baiklah, jadi salin yang ini.
‫Kembali ke pengontrol pemesanan kami.
‫Mari sekarang benar-benar membutuhkan paket
‫drive ini dengan telah berhasil diinstal di sini.
‫Dan hanya dengan semua paket lain sebelumnya, harap
‫pastikan bahwa Anda benar-benar menggunakan versi
‫yang sama dengan saya.
‫Dan Anda melihat bahwa saya di sini di 7 yang baru. 0. 0.
‫Jadi ini benar-benar baru.
‫Dan sebenarnya itu karena banyak
‫hal yang baru saja berubah dengan Stripe beberapa hari yang lalu.
‫Jadi saya harus mengubah beberapa implementasi ini.
‫Bagaimanapun, const
‫stripe sama membutuhkan dan kemudian stripe.
‫Sekarang ini di sini kemudian akan mengekspos fungsi pada dasarnya.
‫Dan biasanya yang kami lakukan segera adalah memasukkan
‫kunci rahasia kami ke dalamnya.
‫Dan itu kemudian akan memberi kita objek Stripe
‫yang bisa kita kerjakan.
‫Sehingga saat ini sedang dalam proses. lingkungan STRIPE_SECRET_KEY.
‫Oke, dan sekarang mari kita gunakan itu.
‫Jadi kita katakan Stripe. Periksa. sidang. membuat.
‫Dan kemudian objek opsi yang biasa.
‫Baiklah, sekarang ada banyak sekali pilihan yang
‫bisa kita atur di sini.
‫Tetapi hanya tiga dari mereka yang diperlukan.
‫Jadi yang pertama adalah jenis metode pembayaran.
‫Jadi jenis metode pembayaran.
‫Jadi itu adalah array di mana kita dapat menentukan
‫beberapa jenis dan kartu untuk kartu kredit.
‫Dan saat ini sebenarnya semua opsi
‫pembayaran yang dapat kita gunakan untuk checkout Stripe.
‫Tetapi saya membaca bahwa di masa depan mereka akan menambahkan lebih banyak lagi.
‫Jadi Anda bisa mendapatkan informasi dengan itu.
‫Kemudian kita perlu menentukan URL sukses.
‫Dan pada dasarnya itulah URL yang
‫akan dipanggil segera setelah kartu kredit berhasil ditagih.
‫Jadi segera setelah pembelian berhasil, pengguna
‫akan diarahkan ke URL ini.
‫Dan untuk saat ini, mari kita tentukan itu sebagai beranda kita.
‫Baiklah dan kita akan melakukannya
‫seperti sebelumnya dengan req. protokol:// dan kemudian
‫meminta. mendapatkan tuan rumah.
‫Jadi pada dasarnya hanya URL beranda kami.
‫Kemudian kita juga perlu menentukan URL pembatalan.
‫Jadi seperti ini.
‫Dan yang ini akan serupa.
‫Jadi pada dasarnya ini adalah halaman
‫tempat pengguna pergi jika mereka memilih untuk membatalkan pembayaran saat ini.
‫Dan sebenarnya mari kita buat mereka pergi ke
‫halaman tur di mana mereka sebelumnya.
‫Dan itu pada dasarnya adalah tur/tur. siput.
‫Selanjutnya, kita juga bisa menentukan email pelanggan.
‫Dan itu sangat berguna karena tentu saja kita sudah
‫memiliki akses ke email pelanggan.
‫Jadi dengan ini kami dapat menyelamatkan pengguna satu langkah
‫dan membuat pengalaman checkout jauh lebih lancar.
‫Baiklah, jadi ingatlah bahwa ini adalah rute yang dilindungi.
‫Dan seperti biasa pengguna sudah sesuai permintaan.
‫Jadi kita bisa mengatakan permintaan. pengguna. surel.
‫Selanjutnya, kita juga
‫dapat menentukan bidang khusus yang disebut ID referensi klien.
‫Dan itu terdengar agak aneh tetapi
‫sebenarnya itu akan menjadi sangat penting bagi kami.
‫Jadi bidang ini akan memungkinkan
‫kita untuk memasukkan beberapa data tentang sesi yang sedang kita buat.
‫Dan itu penting karena nanti setelah pembelian
‫berhasil, kita akan mendapatkan
‫akses ke objek sesi lagi.
‫Dan saat itu, kami ingin membuat pemesanan
‫baru di database kami.
‫Jadi ingatlah diagram
‫yang saya tunjukkan di kuliah terakhir.
‫Pada dasarnya apa yang saya bicarakan
‫di sini adalah langkah terakhir dalam diagram itu.
‫Dan juga ingat bagaimana itu hanya
‫akan bekerja dengan situs web yang digunakan.
‫Tapi tetap saja, mari kita persiapkan untuk itu di sini.
‫Oke, jadi untuk membuat pemesanan baru
‫di database kami, kami memerlukan ID pengguna, ID tur, dan harganya.
‫Ingat bahwa?
‫Dan di sesi
‫ini kita sudah memiliki akses ke
‫email pengguna dan dari situ
‫kita bisa membuat ulang ID pengguna karena email di sini unik.
‫Kami juga akan menentukan harga tur
‫di sini dalam sedetik dan semua yang hilang adalah ID tur.
‫Dan itulah yang akan kita tentukan di sini pada
‫bidang khusus ini pada dasarnya.
‫Jadi itu disebut ID referensi klien.
‫Dan semua yang baru saja saya jelaskan sebelumnya sebenarnya akan
‫jauh lebih masuk akal
‫setelah kita benar-benar menerapkan langkah terakhir
‫membuat pemesanan di database, bukan?
‫Bagaimanapun, ID tur itu berdasarkan permintaan. param ID tur.
‫Baiklah, dan sekarang akhirnya,
‫kita akan menentukan beberapa detail tentang produk itu sendiri.
‫Jadi tur kami dalam hal ini.
‫Dan itulah yang
‫disebut item baris yang menerima array objek.
‫Jadi pada dasarnya satu per item
‫dan dalam kasus kami itu hanya akan menjadi satu.
‫Jadi kita untuk menentukan
‫nama produk dan itu di tour. nama dan seperti biasa kami juga
‫menambahkan tur ke nama itu.
‫Kemudian kita juga bisa menentukan deskripsi.
‫Dan semua nama bidang ini di sini mereka benar-benar berasal dari Stripe.
‫Jadi kita tidak bisa membuat ladang kita sendiri.
‫Jadi jika Anda mencoba melakukan itu, Anda akan benar-benar mendapatkan kesalahan.
‫Baiklah, jadi dalam deskripsi saya akan memasukkan ringkasan tur, sehingga
‫frasa singkat yang bagus yang
‫akan menggambarkan setiap tur.
‫Kemudian kita juga dapat menentukan array gambar.
‫Sekarang gambar-gambar ini di sini mereka harus menjadi gambar langsung.
‫Jadi pada dasarnya gambar yang di-host di
‫internet karena Stripe akan benar-benar mengunggah gambar
‫ini ke server mereka sendiri.
‫Dan ini adalah salah satu hal
‫yang hanya dapat kami lakukan setelah situs web di-deploy.
‫Tetapi untuk saat ini, sebagai pengganti, pada dasarnya saya akan menggunakan
‫yang dari situs web contoh yang dihosting di natours. pengembang
‫Jadi mari kita pergi ke situs web itu.
‫Jadi itu yang ini di natours. pengembang
‫Dan gambar yang akan saya pilih adalah gambar sampul.
‫Jadi mari kita periksa gambar itu.
‫Jadi yang ini di sini dan salin alamat tautan di sini.
‫Baiklah.
‫Jadi ini adalah
‫array karena kita dapat menentukan banyak gambar tetapi kita benar-benar hanya menginginkan salah satunya.
‫Dan memang kita memiliki alam. dev/images/tours dan kemudian
‫nama gambarnya.
‫Dan yang satu ini akan saya ganti dengan tour. sampul gambar.
‫Dan itu akan
‫berhasil karena nama-nama gambar di alam. dev persis sama dengan yang kami miliki di
‫sini di proyek kami.
‫Jadi tur. gambarSampul.
‫Jadi ini adalah satu
‫hal lagi yang sebenarnya perlu kita ubah setelah kita membuat situs web kita menjadi produksi.
‫Dan saya menyimpan daftar hal-hal
‫itu agar kita tidak melupakan apa pun.
‫Pokoknya, selanjutnya adalah jumlahnya.
‫Jadi pada dasarnya harga produk
‫yang sedang dibeli.
‫Jadi itulah wisata. harga dan sekarang
‫kita perlu mengalikannya dengan 100.
‫Karena jumlah ini diperkirakan dalam sen.
‫Jadi satu dolar atau satu Euro atau benar-benar sebagian
‫besar mata uang memiliki 100 sen.
‫Jadi satu dolar sama dengan 100 sen.
‫Jadi untuk mengubahnya menjadi sen, kalikan saja dengan 100.
‫Kemudian kita juga perlu menentukan mata uang.
‫Dan itulah dalam hal ini USD.
‫Tapi bisa juga
‫seperti, untuk Euro itu EUR dan untuk mata uang
‫lainnya, Anda mungkin harus melihat dokumentasinya.
‫Jadi tentu saja saya
‫tidak bisa menutupi semua mata uang yang ada, bukan?
‫Pokoknya, akhirnya kami juga menentukan kuantitas.
‫Dan itu hanya satu tur dalam kasus ini.
‫Jadi itu sebenarnya.
‫Dan pada dasarnya bagian
‫ini adalah informasi tentang sesi itu sendiri.
‫Dan berikut adalah
‫informasi tentang produk yang akan dibeli pengguna.
‫Baiklah, sekarang mari kita simpan sesi.
‫Jadi sesi const dan sekarang kita
‫menunggu ini.
‫Jadi ini buat di sini pada dasarnya
‫mengembalikan premis karena menyetel semua opsi ini di
‫sini pada dasarnya akan melakukan
‫panggilan API ke Stripe dan tentu saja itu
‫adalah fungsi asinkron yang harus kita tunggu di sini.
‫Oke, tapi bagaimanapun ini
‫adalah sesi kita dan jadi langkah terakhir
‫tentu saja mengirimkannya kembali ke klien.
‫Jadi seperti
‫biasa, statusnya sukses.
‫Dan kemudian mari kita kirimkan sesi seperti ini.
‫Baiklah, jadi memang seharusnya begitu.
‫Router kami sudah dikonfigurasi dan saya
‫pikir kami sekarang
‫dapat mencobanya di tukang pos.
‫Baiklah, sekarang nanti tentunya
‫kita tidak akan membiarkan siapapun melakukan ini menggunakan tukang pos
‫karena itu tidak masuk akal.
‫Tapi sekarang karena kami hanya
‫menguji ini, ini sangat masuk akal.
‫Baiklah, jadi mari kita
‫pergi ke tukang pos dan membuat permintaan baru.
‫Jadi itu akan
‫di pemesanan/ eh, saya tidak begitu yakin.
‫Ya, jadi sesi checkout dan kemudian /tourId.
‫Baiklah, jadi mari kita tur kita di sini.
‫Untuk mendapatkan ID dari sana pada dasarnya.
‫Jadi mari kita lakukan Penjelajah Laut.
‫Oke, dan itu seharusnya sudah cukup.
‫Oh tunggu, kami tentu saja tidak masuk.
‫Jadi login di sini.
‫Sekarang kita berada di admin, tetapi
‫mari kita gunakan orang lain di sini.
‫Dan saya pikir kami menggunakan
‫Leo sebelumnya, jadi sekarang mari gunakan pengguna itu.
‫Sekarang kami memiliki kata sandi yang salah.
‫Baiklah jadi mari kita lihat apa lagi yang kita miliki.
‫Jadi pengguna lain apa yang bisa kita gunakan.
‫Dan sebenarnya mari kita gunakan Monica di sini.
‫Mengapa tidak?
‫Jadi mudah-mudahan kata sandinya benar.
‫Nah, mari kita coba ganti ini
‫di sini dengan test1234.
‫Yah, mungkin kami pernah mengubah
‫kata sandi semua pengguna ini di beberapa kuliah lain sebelumnya.
‫Jadi mari kita gunakan John di sini.
‫Jadi saya tahu bahwa kami tidak pernah menggunakan
‫John, jadi sekarang ini harus berhasil.
‫Oh, saya benar-benar melihat kesalahan yang baru saja saya lakukan sebelumnya.
‫Jadi di sini bukan natours, itu harus menjadi contoh. com.
‫Jadi mari kita coba lagi dengan Monica di sini.
‫Atau benar-benar hanya dengan John.
‫Ini lebih sulit dari yang saya harapkan.
‫Tapi sekarang akhirnya kita login.
‫Baiklah, dan dengan itu,
‫mari kita coba untuk mendapatkan sesi checkout kita.
‫Kami kehilangan otorisasi dari sini.
‫Sekali lagi, dan sekarang kami mendapatkan beberapa kesalahan nyata di sini.
‫Jadi sesuatu yang sebenarnya benar-benar berasal dari kode
‫yang baru saja kita tulis.
‫Baiklah.
‫Jadi mari kita periksa.
‫Dan masalahnya adalah di sini sebenarnya sesi.
‫Jadi garis. Periksa. sesi.
‫Sekali lagi.
‫Kali ini butuh waktu lebih lama yang merupakan pertanda baik.
‫Dan kami memiliki kesalahan lain.
‫Jadi baris 15 tidak dapat membaca slug dari node.js.
‫Baiklah, itu pasti aneh karena harus
‫ada siput di tur ini.
‫Jadi uh ya Anda lihat di
‫sini sebenarnya.
‫Jadi mungkin ada yang
‫salah dengan benar-benar membaca tur ini.
‫Yang saya tidak bisa benar-benar mengerti mengapa itu terjadi.
‫Tapi mari kita coba log tur ke konsol.
‫Baiklah, dan sebenarnya kita mendapatkan null.
‫Yang mungkin berarti ada
‫ID tur yang tidak ditentukan dengan benar.
‫Oh, inilah masalahnya.
‫Jadi saya memilikinya, ID semua huruf
‫besar, tetapi kemudian di sini di controller saya memiliki D dalam huruf kecil.
‫Jadi seperti ini.
‫Dan itulah jenis
‫bug kecil yang terjadi sepanjang waktu dengan jelas.
‫Jadi mari kita lihat apa yang berikutnya.
‫Oh dan sebenarnya kali ini kami melakukannya dengan benar.
‫Jadi Anda lihat itu adalah sesi yang baru saja kita buat.
‫Dan itu mengedit beberapa hal lain di sini, tetapi itu tidak
‫terlalu penting bagi kami saat ini.
‫Apa yang benar-benar menarik untuk dilihat adalah bahwa
‫kita sekarang sebenarnya sudah
‫dapat melihat pembayaran ini, atau setidaknya permintaan
‫pembayaran ini, katakanlah di dasbor drive kita.
‫Jadi jika kita pergi ke
‫sana dan pergi ke pembayaran dan kemudian ke semua, Anda akan melihat
‫bahwa yang terakhir di sini sebenarnya baru saja terjadi sekarang.
‫Jadi jika kita klik itu, maka Anda akan melihat beberapa data tentangnya.
‫Jadi Anda lihat misalnya bahwa ini sebenarnya tentang
‫Tur Penjelajah Laut.
‫Anda juga memiliki harga, Anda juga memiliki gambar.
‫Mungkin juga beberapa data tentang pengguna.
‫Dan sebenarnya tidak, tidak juga.
‫Tetapi yang penting di sini adalah dikatakan tidak lengkap.
‫Dan itu karena kami hanya membuat
‫sesi checkout di server.
‫Jadi kami melewatkan
‫langkah kedua di mana kami kemudian
‫benar-benar menagih kartu kredit di sisi klien.
‫Jadi karena kita melewatkan itu, mari
‫kita lakukan dengan benar di video berikutnya.