All language subtitles for 014 Integrating Stripe into the Back-End_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,060 --> 00:00:03,650 So in this video let's integrate Stripe 2 00:00:03,650 --> 00:00:07,240 into our backend by creating that API endpoint 3 00:00:07,240 --> 00:00:10,983 which will create and send back a Stripe checkout session. 4 00:00:12,870 --> 00:00:15,717 And so at this point, we're actually gonna start creating 5 00:00:15,717 --> 00:00:17,110 our next resource. 6 00:00:17,110 --> 00:00:18,860 And so that's the bookings. 7 00:00:18,860 --> 00:00:21,413 And I will start here with the booking routes. 8 00:00:24,995 --> 00:00:25,828 So booking 9 00:00:27,200 --> 00:00:29,100 routes.js. 10 00:00:29,100 --> 00:00:31,660 And we've done that so many times now. 11 00:00:31,660 --> 00:00:33,150 So then I'm just gonna go ahead 12 00:00:33,150 --> 00:00:34,480 copy all of this code 13 00:00:35,890 --> 00:00:37,843 and put it here in the booking routes. 14 00:00:39,410 --> 00:00:42,073 And then simply remove all of this. 15 00:00:44,230 --> 00:00:45,923 And also this one. 16 00:00:47,310 --> 00:00:50,060 We also don't need merge params 17 00:00:51,000 --> 00:00:54,530 and we will have a booking controller instead of 18 00:00:54,530 --> 00:00:55,593 a review controller. 19 00:00:57,850 --> 00:01:02,203 So booking controller, let's actually create that. 20 00:01:03,844 --> 00:01:04,677 So 21 00:01:09,317 --> 00:01:10,170 .js 22 00:01:11,520 --> 00:01:12,570 that looks correct 23 00:01:13,460 --> 00:01:17,503 and let's also integrate this right into app.js. 24 00:01:18,970 --> 00:01:20,970 And so let's put that right here 25 00:01:20,970 --> 00:01:22,423 after the review router. 26 00:01:25,430 --> 00:01:29,940 So here that's just again bookings 27 00:01:32,100 --> 00:01:34,370 and then of course down here integrate that 28 00:01:34,370 --> 00:01:35,513 into our API. 29 00:01:40,190 --> 00:01:42,220 So bookings and here 30 00:01:43,360 --> 00:01:44,913 bookings router. 31 00:01:46,970 --> 00:01:49,223 And I think that should only be booking. 32 00:01:50,170 --> 00:01:52,703 So let's fix that up here as well. 33 00:01:54,180 --> 00:01:57,010 And indeed we call it booking router. 34 00:01:57,010 --> 00:01:58,880 And the same here, it's not bookings 35 00:01:58,880 --> 00:02:00,700 but booking routes. 36 00:02:00,700 --> 00:02:01,863 So give it a save. 37 00:02:04,100 --> 00:02:05,990 Close this one and this one 38 00:02:05,990 --> 00:02:09,090 and this one here as well. 39 00:02:09,090 --> 00:02:11,670 And so now let's actually go ahead and create 40 00:02:11,670 --> 00:02:13,083 our first route here. 41 00:02:14,980 --> 00:02:19,980 So let's router.get and the route that it will create here 42 00:02:20,930 --> 00:02:24,160 will once again not follow the rest principle 43 00:02:24,160 --> 00:02:26,630 because this one is not really gonna be about 44 00:02:26,630 --> 00:02:30,080 creating or getting or updating any booking. 45 00:02:30,080 --> 00:02:33,060 Instead this route will only be for the client 46 00:02:33,060 --> 00:02:35,390 to get a checkout session. 47 00:02:35,390 --> 00:02:37,140 And so let's actually call this one 48 00:02:38,810 --> 00:02:41,733 checkout session. 49 00:02:43,060 --> 00:02:45,600 Then we need to protect this route 50 00:02:45,600 --> 00:02:48,820 so that only authenticated users can actually get 51 00:02:48,820 --> 00:02:50,380 a checkout session. 52 00:02:50,380 --> 00:02:51,863 So that makes sense, right? 53 00:02:52,840 --> 00:02:55,603 And then add booking controller. 54 00:02:56,460 --> 00:02:59,253 We're gonna create a route handler called get 55 00:03:02,477 --> 00:03:06,558 checkout session. 56 00:03:06,558 --> 00:03:07,391 All right. 57 00:03:08,512 --> 00:03:12,422 So let's copy this one and create it here 58 00:03:12,422 --> 00:03:14,839 at exports.getCheckoutSession 59 00:03:16,600 --> 00:03:19,513 then request responds next. 60 00:03:21,910 --> 00:03:24,740 And now let's start working. 61 00:03:24,740 --> 00:03:27,230 Now actually there's one more thing we need to do here 62 00:03:27,230 --> 00:03:31,550 in the routes which is to specify a URL parameter. 63 00:03:31,550 --> 00:03:34,083 And so that's going to be the tour ID. 64 00:03:35,970 --> 00:03:39,350 Okay, so basically we want the client to send along 65 00:03:39,350 --> 00:03:42,920 the ID of the tour that is currently begin booked. 66 00:03:42,920 --> 00:03:46,010 And that is so that we can fill up the checkout session 67 00:03:46,010 --> 00:03:48,230 with all the data that is necessary, 68 00:03:48,230 --> 00:03:52,220 such as the tour name and the tour price and all that stuff. 69 00:03:52,220 --> 00:03:55,780 All right, so we now have access to the tour ID 70 00:03:55,780 --> 00:03:57,470 in this handler function 71 00:03:57,470 --> 00:04:00,030 and so the first thing that we're actually gonna do 72 00:04:00,030 --> 00:04:02,610 is to find that tour in our database. 73 00:04:02,610 --> 00:04:06,260 All right, so for that we need of course the tour model. 74 00:04:06,260 --> 00:04:09,210 So let's come here to the tour controller 75 00:04:09,210 --> 00:04:11,190 and get that from there. 76 00:04:11,190 --> 00:04:14,120 Also we're gonna need this catchAsync 77 00:04:14,120 --> 00:04:15,793 and so really all of this. 78 00:04:16,870 --> 00:04:18,510 So I'm copying all of it 79 00:04:18,510 --> 00:04:20,730 and even if I don't need it right away 80 00:04:20,730 --> 00:04:23,363 I will probably need it a bit later anyway. 81 00:04:24,629 --> 00:04:25,462 All right. 82 00:04:27,840 --> 00:04:30,600 So let's layout our steps here again. 83 00:04:30,600 --> 00:04:35,600 So get the currently booked tour. 84 00:04:38,250 --> 00:04:43,250 Then as a second step, we create the checkout session 85 00:04:45,550 --> 00:04:47,633 and then finally send it to the client. 86 00:04:53,376 --> 00:04:57,043 All right, so the first step is really easy. 87 00:04:59,930 --> 00:05:01,053 So we're gonna wait. 88 00:05:02,140 --> 00:05:06,120 So tour.findbyId 89 00:05:07,210 --> 00:05:10,173 which is req.params.tourId. 90 00:05:14,790 --> 00:05:18,112 Right, so that was the name we gave it 91 00:05:18,112 --> 00:05:19,810 in the URL parameter. 92 00:05:19,810 --> 00:05:24,250 And of course, this is now an async function 93 00:05:25,120 --> 00:05:29,623 with a catchAsync besides that or around that, actually. 94 00:05:33,170 --> 00:05:36,360 Great, next up, let's create that session here. 95 00:05:36,360 --> 00:05:38,410 And for that we actually need to install 96 00:05:38,410 --> 00:05:40,323 this drive NPM package. 97 00:05:41,920 --> 00:05:45,650 So let's do that here. 98 00:05:45,650 --> 00:05:50,290 NPM install Stripe. 99 00:05:50,290 --> 00:05:54,000 And in the meantime we're gonna go to our Stripe dashboard 100 00:05:54,000 --> 00:05:56,003 and get our secret key from here. 101 00:05:57,030 --> 00:05:59,280 So just hit this button here 102 00:05:59,280 --> 00:06:03,040 and then go ahead and copy it. 103 00:06:03,040 --> 00:06:04,630 And you see that here in the keys 104 00:06:04,630 --> 00:06:06,380 it actually says test. 105 00:06:06,380 --> 00:06:09,920 And so again, these ones here are just for testing 106 00:06:09,920 --> 00:06:12,530 and then once you have your Stripe account active, 107 00:06:12,530 --> 00:06:14,993 you can then get your live API keys. 108 00:06:16,390 --> 00:06:19,230 Okay, now as with any other keys 109 00:06:19,230 --> 00:06:22,743 we will put them here in our config file. 110 00:06:25,490 --> 00:06:26,370 So Stripe 111 00:06:29,490 --> 00:06:32,670 secret key equal to this. 112 00:06:32,670 --> 00:06:34,120 And this is not correct here. 113 00:06:40,700 --> 00:06:43,163 All right, so copy this one. 114 00:06:44,730 --> 00:06:46,610 Back to our booking controller. 115 00:06:46,610 --> 00:06:49,400 Let's now actually require this drive package 116 00:06:49,400 --> 00:06:52,620 with has successfully installed here. 117 00:06:52,620 --> 00:06:54,810 And just with all the other packages before 118 00:06:54,810 --> 00:06:56,780 please make sure that you're actually on 119 00:06:56,780 --> 00:06:58,030 the same version as I am. 120 00:06:59,050 --> 00:07:02,137 And you see that I'm here at the brand new 7.0.0. 121 00:07:03,120 --> 00:07:04,730 So this is really brand new. 122 00:07:04,730 --> 00:07:07,650 And actually that's because a lot of stuff just changed 123 00:07:07,650 --> 00:07:10,370 with Stripe a couple of days ago. 124 00:07:10,370 --> 00:07:13,113 So I had to change a couple of these implementation. 125 00:07:15,190 --> 00:07:20,190 Anyway, const stripe equal require 126 00:07:24,440 --> 00:07:26,000 and then stripe. 127 00:07:26,000 --> 00:07:28,890 Now this here will then expose a function basically. 128 00:07:28,890 --> 00:07:30,940 And usually what we do then right away 129 00:07:30,940 --> 00:07:34,670 is to pass our secret key right into that. 130 00:07:34,670 --> 00:07:37,020 And so that will then give us a Stripe object 131 00:07:37,020 --> 00:07:38,123 that we can work with. 132 00:07:39,410 --> 00:07:43,057 So that now at process.env.STRIPE_SECRET_KEY. 133 00:07:46,930 --> 00:07:51,093 Okay, and so now let's use that. 134 00:07:52,700 --> 00:07:57,700 So we say Stripe.checkout.session.create. 135 00:08:02,450 --> 00:08:06,040 And then the usual object of options. 136 00:08:06,040 --> 00:08:08,680 All right, now there are a ton of options 137 00:08:08,680 --> 00:08:10,060 that we can set here. 138 00:08:10,060 --> 00:08:12,290 But only three of them are required. 139 00:08:12,290 --> 00:08:15,083 So the first one is the payment method types. 140 00:08:16,010 --> 00:08:20,213 So payment method types. 141 00:08:22,950 --> 00:08:26,740 So that is an array where we can specify multiple types 142 00:08:26,740 --> 00:08:28,920 and card is for credit card. 143 00:08:28,920 --> 00:08:31,780 And right now that's actually all the payment options 144 00:08:31,780 --> 00:08:34,330 that we can use for Stripe checkout. 145 00:08:34,330 --> 00:08:38,130 But I read that in the future they will add a lot more. 146 00:08:38,130 --> 00:08:41,549 So you can get informed by that. 147 00:08:41,549 --> 00:08:44,023 Then we need to specify the success URL. 148 00:08:46,240 --> 00:08:49,350 And so that is basically the URL that will get called 149 00:08:49,350 --> 00:08:52,690 as soon as a credit card has been successfully charged. 150 00:08:52,690 --> 00:08:55,780 So as soon as the purchase was successful 151 00:08:55,780 --> 00:08:58,860 the user will be redirected to this URL. 152 00:08:58,860 --> 00:09:02,123 And for now, let's simply specify that as our homepage. 153 00:09:03,060 --> 00:09:06,290 All right and we're gonna do that just as before 154 00:09:06,290 --> 00:09:10,963 with req.protocol:// 155 00:09:14,270 --> 00:09:18,663 and then request.get the host. 156 00:09:20,670 --> 00:09:23,403 So basically just our home URL. 157 00:09:24,330 --> 00:09:27,707 Then we also need to specify the cancel URL. 158 00:09:30,530 --> 00:09:31,773 So just like this. 159 00:09:33,010 --> 00:09:34,763 And this one is gonna be similar. 160 00:09:36,260 --> 00:09:38,800 And so basically it's the page where the user goes 161 00:09:38,800 --> 00:09:41,980 if they choose to cancel the current payment. 162 00:09:41,980 --> 00:09:44,610 And actually let's make them go to the tour page 163 00:09:44,610 --> 00:09:46,360 where they were previously. 164 00:09:46,360 --> 00:09:50,493 And so that is basically tour/tour.slug. 165 00:09:56,040 --> 00:09:59,870 Next up, we can also specify the customer email. 166 00:09:59,870 --> 00:10:02,410 And so that is very handy because of course 167 00:10:02,410 --> 00:10:05,380 we already have access to the customer's email. 168 00:10:05,380 --> 00:10:08,090 And so with this we can save the user one step 169 00:10:08,090 --> 00:10:11,080 and make the checkout experience a lot smoother. 170 00:10:11,080 --> 00:10:15,230 All right so remember that this is a protected route. 171 00:10:15,230 --> 00:10:19,320 And so as always the user is already at the request. 172 00:10:19,320 --> 00:10:23,763 And so we can say request.user.email. 173 00:10:25,030 --> 00:10:28,860 Next up, we can then also specify a custom field 174 00:10:28,860 --> 00:10:31,560 which is called client reference ID. 175 00:10:31,560 --> 00:10:34,610 And that sounds a bit weird but actually it's going to be 176 00:10:34,610 --> 00:10:36,340 really important for us. 177 00:10:36,340 --> 00:10:39,900 So this field is gonna allow us to pass in some data 178 00:10:39,900 --> 00:10:42,430 about the session that we are currently creating. 179 00:10:42,430 --> 00:10:44,400 And that's important because later 180 00:10:44,400 --> 00:10:46,530 once the purchase was successful, 181 00:10:46,530 --> 00:10:50,250 we will then get access to the session object again. 182 00:10:50,250 --> 00:10:52,830 And by then, we want to create a new booking 183 00:10:52,830 --> 00:10:54,400 in our database. 184 00:10:54,400 --> 00:10:56,380 So remember the diagram that I showed you 185 00:10:56,380 --> 00:10:57,610 in the last lecture. 186 00:10:57,610 --> 00:10:59,240 Basically what I'm talking about here 187 00:10:59,240 --> 00:11:01,890 is the last step in that diagram. 188 00:11:01,890 --> 00:11:04,670 And also remember how that is only going to work 189 00:11:04,670 --> 00:11:06,130 with deployed websites. 190 00:11:06,130 --> 00:11:08,900 But still, let's already prepare for that here. 191 00:11:08,900 --> 00:11:12,860 Okay, so to create a new booking in our database 192 00:11:12,860 --> 00:11:16,890 we will need the user's ID, the tour ID, and the price. 193 00:11:16,890 --> 00:11:18,260 Remember that? 194 00:11:18,260 --> 00:11:20,460 And in this session we already have access 195 00:11:20,460 --> 00:11:22,315 to the user's email 196 00:11:22,315 --> 00:11:26,290 and from that we can then recreate the user's ID 197 00:11:26,290 --> 00:11:28,520 because email here is unique. 198 00:11:28,520 --> 00:11:31,900 We will also specify the tour's price here in a second 199 00:11:31,900 --> 00:11:35,100 and so all that's missing is then the tour ID. 200 00:11:35,100 --> 00:11:37,130 And so that's what we're gonna specify here 201 00:11:37,130 --> 00:11:39,263 on this custom field basically. 202 00:11:41,320 --> 00:11:45,763 So that's called client reference ID. 203 00:11:47,500 --> 00:11:49,750 And all of what I just explained before 204 00:11:49,750 --> 00:11:52,210 actually is gonna make a lot more sense 205 00:11:52,210 --> 00:11:54,630 once we actually implement that last step 206 00:11:54,630 --> 00:11:58,240 of creating a booking in the database, right? 207 00:11:58,240 --> 00:12:02,667 Anyway, that tour ID is at request.params.tourId. 208 00:12:05,371 --> 00:12:08,080 All right, and now finally, we're gonna specify 209 00:12:08,080 --> 00:12:11,010 some details about the product itself. 210 00:12:11,010 --> 00:12:13,093 So our tour in this case. 211 00:12:14,100 --> 00:12:17,720 And so that's called line items which accepts 212 00:12:17,720 --> 00:12:19,700 an array of objects. 213 00:12:19,700 --> 00:12:22,330 So basically one per item 214 00:12:22,330 --> 00:12:24,733 and so in our case that's only gonna be one. 215 00:12:25,940 --> 00:12:28,640 So we're to specify the name of the product 216 00:12:30,160 --> 00:12:34,810 and so that's at tour.name 217 00:12:34,810 --> 00:12:39,423 and as always we also add the tour to that name. 218 00:12:41,720 --> 00:12:43,933 Then we can also specify a description. 219 00:12:45,840 --> 00:12:48,950 And all these field names here they really come from Stripe. 220 00:12:48,950 --> 00:12:51,200 So we cannot make up our own fields. 221 00:12:51,200 --> 00:12:54,683 So if you try to do that, you will really get some error. 222 00:12:55,530 --> 00:12:57,510 All right, so in the description 223 00:12:57,510 --> 00:12:59,373 I will put the tour summary, 224 00:13:00,540 --> 00:13:05,540 so that nice short phrase that will describe each tour. 225 00:13:06,400 --> 00:13:10,750 Then we can also specify an array of images. 226 00:13:10,750 --> 00:13:14,120 Now these images here they need to be live images. 227 00:13:14,120 --> 00:13:17,260 So basically images that are hosted on the internet 228 00:13:17,260 --> 00:13:20,090 because Stripe will actually upload this image 229 00:13:20,090 --> 00:13:21,680 to their own server. 230 00:13:21,680 --> 00:13:23,740 And so this is another of the things 231 00:13:23,740 --> 00:13:27,470 that we can only really do once the website is deployed. 232 00:13:27,470 --> 00:13:30,680 But for now, as a placeholder, I will basically use the ones 233 00:13:30,680 --> 00:13:34,760 from our hosted example website on natours.dev. 234 00:13:34,760 --> 00:13:36,623 So let's go to that website. 235 00:13:38,100 --> 00:13:41,050 So that's this one at natours.dev. 236 00:13:41,050 --> 00:13:44,500 And the image that I'm gonna choose is the cover image. 237 00:13:44,500 --> 00:13:46,283 So let's inspect that image. 238 00:13:47,130 --> 00:13:51,103 So this one here and copy link address here. 239 00:13:52,396 --> 00:13:53,710 All right. 240 00:13:53,710 --> 00:13:58,140 So this is an array because we can specify multiple images 241 00:13:58,140 --> 00:14:00,673 but we really only want one of them. 242 00:14:01,790 --> 00:14:05,950 And indeed we have natours.dev/images/tours 243 00:14:05,950 --> 00:14:07,940 and then the name of the image. 244 00:14:07,940 --> 00:14:11,810 And this one I will simply replace with tour.image cover. 245 00:14:11,810 --> 00:14:14,950 And that's gonna work because the names of the images 246 00:14:14,950 --> 00:14:18,920 on natours.dev are exactly the same as we have here 247 00:14:18,920 --> 00:14:20,053 in our project. 248 00:14:21,560 --> 00:14:23,500 So tour.imageCover. 249 00:14:26,580 --> 00:14:29,980 So this is one more thing that we actually need to change 250 00:14:29,980 --> 00:14:32,520 once we put our website into production. 251 00:14:32,520 --> 00:14:35,630 And I'm keeping actually a list of that stuff 252 00:14:35,630 --> 00:14:37,280 so that we don't forget anything. 253 00:14:38,450 --> 00:14:40,760 Anyway, next up is the amount. 254 00:14:40,760 --> 00:14:42,940 So basically the price of the product 255 00:14:42,940 --> 00:14:44,163 that is being purchased. 256 00:14:45,010 --> 00:14:47,990 So that is tour.price 257 00:14:47,990 --> 00:14:50,660 and now we need to multiply that by 100. 258 00:14:50,660 --> 00:14:53,673 Because this amount is expected to be in cents. 259 00:14:54,870 --> 00:14:57,270 And so one dollar or one Euro 260 00:14:57,270 --> 00:15:00,640 or really most of the currencies have 100 cents. 261 00:15:00,640 --> 00:15:02,920 So one dollar equals 100 cents. 262 00:15:02,920 --> 00:15:06,663 And so to convert it to cents, just multiply it by 100. 263 00:15:08,040 --> 00:15:11,790 Then we also need to specify the currency. 264 00:15:11,790 --> 00:15:14,110 And so that's in this case USD. 265 00:15:14,110 --> 00:15:18,850 But it could also be like, for Euro it's EUR 266 00:15:20,439 --> 00:15:23,560 and for other currencies, you should probably take a look 267 00:15:23,560 --> 00:15:25,090 at the documentation. 268 00:15:25,090 --> 00:15:27,670 So of course I cannot cover all the currencies 269 00:15:27,670 --> 00:15:31,000 that there are, right? 270 00:15:31,000 --> 00:15:35,760 Anyway, finally we also specify the quantity. 271 00:15:35,760 --> 00:15:38,263 And so that's just one tour in this case. 272 00:15:41,110 --> 00:15:43,370 So that's actually it. 273 00:15:43,370 --> 00:15:47,230 And so basically this part here is the information 274 00:15:47,230 --> 00:15:48,800 about the session itself. 275 00:15:48,800 --> 00:15:51,630 And then here is the information about the product 276 00:15:51,630 --> 00:15:54,060 that the user is about to purchase. 277 00:15:54,060 --> 00:15:56,883 All right, now let's actually store the session. 278 00:15:57,810 --> 00:15:59,090 So const session 279 00:16:00,270 --> 00:16:03,000 and now we to await this. 280 00:16:03,000 --> 00:16:05,850 So this create here basically returns a premise 281 00:16:05,850 --> 00:16:08,110 because setting all these options here 282 00:16:08,110 --> 00:16:11,060 will basically do an API call to Stripe 283 00:16:11,060 --> 00:16:14,341 and so then of course that's an asynchronous function 284 00:16:14,341 --> 00:16:16,470 that we should await here. 285 00:16:16,470 --> 00:16:19,790 Okay, but anyway this is now our session 286 00:16:19,790 --> 00:16:22,740 and so the last step is of course to send it 287 00:16:22,740 --> 00:16:24,020 back to the client. 288 00:16:24,020 --> 00:16:25,493 So as always, 289 00:16:29,480 --> 00:16:31,743 the status is success. 290 00:16:33,460 --> 00:16:36,463 And then let's simply send the session like this. 291 00:16:38,896 --> 00:16:42,510 All right, so that should actually be it. 292 00:16:42,510 --> 00:16:44,980 Our router is already configured 293 00:16:44,980 --> 00:16:48,260 and so I think we could actually now try this out 294 00:16:48,260 --> 00:16:49,950 in postman. 295 00:16:49,950 --> 00:16:53,470 All right, now later of course we will not allow anyone 296 00:16:53,470 --> 00:16:55,370 to do this using postman 297 00:16:55,370 --> 00:16:57,650 because that doesn't make much sense. 298 00:16:57,650 --> 00:16:59,990 But now since we're only testing this 299 00:16:59,990 --> 00:17:02,060 it actually makes a lot of sense. 300 00:17:02,060 --> 00:17:05,660 All right so let's head over to postman 301 00:17:05,660 --> 00:17:08,483 and create a brand new request. 302 00:17:11,150 --> 00:17:15,770 So that's gonna be at bookings/ 303 00:17:17,768 --> 00:17:19,313 uh, I'm not really sure. 304 00:17:20,261 --> 00:17:24,473 Yeah, so checkout session and then /tourId. 305 00:17:26,329 --> 00:17:28,823 All right, so let's get our tours here. 306 00:17:31,030 --> 00:17:33,323 To get the ID from there basically. 307 00:17:34,560 --> 00:17:36,263 So let's do the Sea Explorer. 308 00:17:41,700 --> 00:17:45,950 Okay, and that should actually be enough. 309 00:17:45,950 --> 00:17:47,963 Oh wait, we are of course not logged in. 310 00:17:50,022 --> 00:17:51,363 So log in here. 311 00:17:54,010 --> 00:17:55,460 Now we are in admin, 312 00:17:55,460 --> 00:17:57,370 but let's use someone else here. 313 00:17:57,370 --> 00:17:59,860 And I think we used Leo before 314 00:17:59,860 --> 00:18:01,813 so let's now use that user. 315 00:18:04,250 --> 00:18:07,053 Now we have an incorrect password. 316 00:18:08,761 --> 00:18:11,320 All right so let's see what else we have. 317 00:18:11,320 --> 00:18:14,470 So what other users we could use. 318 00:18:14,470 --> 00:18:16,683 And actually let's use Monica here. 319 00:18:19,990 --> 00:18:21,530 Why not? 320 00:18:21,530 --> 00:18:25,753 So hopefully her password is correct. 321 00:18:27,500 --> 00:18:30,410 Well, let's actually try to replace this here 322 00:18:32,170 --> 00:18:33,883 with test1234. 323 00:18:35,290 --> 00:18:38,040 Well, maybe we did change the passwords 324 00:18:38,040 --> 00:18:41,493 of all of these users in some other lectures before. 325 00:18:43,740 --> 00:18:46,320 So let's use John here. 326 00:18:46,320 --> 00:18:48,740 So I know that we never used John 327 00:18:48,740 --> 00:18:51,523 so now it has to work. 328 00:18:55,250 --> 00:18:59,000 Oh, I actually see the error that I just did before. 329 00:18:59,000 --> 00:19:02,583 So here it's not natours, it must be example.com. 330 00:19:06,410 --> 00:19:08,460 So let's try that again with Monica here. 331 00:19:11,990 --> 00:19:13,813 Or really just with John. 332 00:19:14,850 --> 00:19:18,000 This is more difficult than I expected it to be. 333 00:19:18,000 --> 00:19:19,963 But now finally we are logged in. 334 00:19:21,130 --> 00:19:24,500 All right, and so with that, 335 00:19:24,500 --> 00:19:26,743 let's try to get our checkout session. 336 00:19:29,180 --> 00:19:31,463 We are missing the authorization from here. 337 00:19:33,180 --> 00:19:37,270 One more time, and now we get some real error here. 338 00:19:37,270 --> 00:19:40,370 So something that is actually really coming from the code 339 00:19:40,370 --> 00:19:41,713 that we just wrote. 340 00:19:43,220 --> 00:19:44,550 All right. 341 00:19:44,550 --> 00:19:46,223 So let's check that out. 342 00:19:47,740 --> 00:19:51,200 And the problem is that here it's actually sessions. 343 00:19:51,200 --> 00:19:54,963 So stripe.checkout.sessions. 344 00:19:57,400 --> 00:19:58,383 One more time. 345 00:19:59,680 --> 00:20:03,850 This time it's taking a lot longer which is a good sign. 346 00:20:03,850 --> 00:20:05,740 And we have another error. 347 00:20:05,740 --> 00:20:09,573 So line 15 cannot read slug of node. 348 00:20:12,200 --> 00:20:15,510 All right, well that sure is weird 349 00:20:15,510 --> 00:20:18,463 because there should be a slug on this tour. 350 00:20:19,980 --> 00:20:21,290 So uh 351 00:20:22,930 --> 00:20:25,660 yeah you see that here it actually is. 352 00:20:25,660 --> 00:20:29,660 So maybe something went wrong with actually reading 353 00:20:29,660 --> 00:20:30,623 this tour. 354 00:20:31,580 --> 00:20:35,083 Which I cannot really understand why that would be. 355 00:20:35,970 --> 00:20:39,273 But let's just try to log the tour to the console. 356 00:20:46,970 --> 00:20:50,000 All right, and actually we get null. 357 00:20:50,000 --> 00:20:54,480 Which probably means that there's a tour ID 358 00:20:54,480 --> 00:20:55,763 not correctly defined. 359 00:20:56,750 --> 00:20:58,790 Oh, here is the problem. 360 00:20:58,790 --> 00:21:02,330 So I have it, ID all uppercase, 361 00:21:02,330 --> 00:21:06,450 but then here in the controller I have the D in lowercase. 362 00:21:06,450 --> 00:21:07,840 So like this. 363 00:21:07,840 --> 00:21:10,790 And so that's the small type of bugs that happen 364 00:21:10,790 --> 00:21:12,183 all the time obviously. 365 00:21:13,210 --> 00:21:15,040 So let's see what's the next one. 366 00:21:15,040 --> 00:21:18,280 Oh and actually this time we got it right. 367 00:21:18,280 --> 00:21:22,050 So you see that is the session that we just created. 368 00:21:22,050 --> 00:21:24,290 And it edits some more other stuff here 369 00:21:24,290 --> 00:21:27,430 but that doesn't really matter for us right now. 370 00:21:27,430 --> 00:21:29,340 What's really interesting to see though 371 00:21:29,340 --> 00:21:32,330 is that we now can actually already kind of see 372 00:21:32,330 --> 00:21:35,330 this payment, or at least this payment request, 373 00:21:35,330 --> 00:21:37,843 let's say in our drive dashboards. 374 00:21:39,490 --> 00:21:44,490 So if we go there and go to payments 375 00:21:44,540 --> 00:21:49,010 and then to all, you will see that this last one here 376 00:21:49,010 --> 00:21:51,320 actually just happened right now. 377 00:21:51,320 --> 00:21:56,320 So if we click that, then you will see some data about it. 378 00:21:56,630 --> 00:21:59,130 So you see for example that it is actually about 379 00:21:59,130 --> 00:22:00,960 the Sea Explorer Tour. 380 00:22:00,960 --> 00:22:03,983 You also have the price, you also have the image. 381 00:22:04,920 --> 00:22:07,800 Probably also some data about the user. 382 00:22:07,800 --> 00:22:10,530 And actually no, not really. 383 00:22:10,530 --> 00:22:14,400 But what matters here is that it says incomplete. 384 00:22:14,400 --> 00:22:17,160 And that's because we only created the checkout session 385 00:22:17,160 --> 00:22:18,310 on the server. 386 00:22:18,310 --> 00:22:20,440 And so we're missing the second step 387 00:22:20,440 --> 00:22:22,750 where we then actually charge the credit card 388 00:22:22,750 --> 00:22:24,450 on the client side. 389 00:22:24,450 --> 00:22:26,210 So since we're missing that, 390 00:22:26,210 --> 00:22:28,843 let's actually do it right in the next video. 29778

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.