1
00:00:02,070 --> 00:00:04,560
So let's now start working on integrating

2
00:00:04,560 --> 00:00:06,180
this payments feature.

3
00:00:06,180 --> 00:00:08,260
Conveniently, we got this code snippet here,

4
00:00:08,260 --> 00:00:11,770
which tells us how we can start making charges.

5
00:00:11,770 --> 00:00:13,690
And here, I got the Node example,

6
00:00:13,690 --> 00:00:16,180
which already assumes that we use Express,

7
00:00:16,180 --> 00:00:17,713
which is even more convenient.

8
00:00:18,570 --> 00:00:22,700
Now, what we will have to do as a first step is in our code,

9
00:00:22,700 --> 00:00:24,527
we have to identify a place

10
00:00:24,527 --> 00:00:28,040
where this code should be added in the end.

11
00:00:28,040 --> 00:00:30,106
And the place to do that should of course,

12
00:00:30,106 --> 00:00:33,763
being the orders.controller, where we add an order.

13
00:00:34,640 --> 00:00:37,390
This is the controller action we execute

14
00:00:37,390 --> 00:00:41,350
when a user clicks on that Buy button in the cart.

15
00:00:41,350 --> 00:00:44,520
So that is where a user wants to be charged

16
00:00:44,520 --> 00:00:47,188
because he or she decided that he or she

17
00:00:47,188 --> 00:00:49,673
wants to buy the product.

18
00:00:49,673 --> 00:00:52,003
So therefore, in addOrder,

19
00:00:52,003 --> 00:00:56,120
I still wanna store the order in my own database,

20
00:00:56,120 --> 00:00:59,040
because we might still want to have that data there.

21
00:00:59,040 --> 00:01:01,660
We might still want to be able to administrated

22
00:01:01,660 --> 00:01:04,887
through that administration interface we built.

23
00:01:04,887 --> 00:01:06,390
But in addition,

24
00:01:06,390 --> 00:01:09,963
I also want to charge the user with help of Stripe.

25
00:01:11,010 --> 00:01:12,490
Therefore, what I'll do

26
00:01:12,490 --> 00:01:17,470
is after storing my order and clearing my cart,

27
00:01:17,470 --> 00:01:20,270
I wanna make that real charge.

28
00:01:20,270 --> 00:01:21,600
Now, in reality,

29
00:01:21,600 --> 00:01:23,536
we therefore also might then wanna check

30
00:01:23,536 --> 00:01:28,536
if that charge succeeded and roll back our changes

31
00:01:28,780 --> 00:01:29,910
if it fails,

32
00:01:29,910 --> 00:01:33,120
but here I will just assume that it does succeed.

33
00:01:33,120 --> 00:01:35,640
So hence, after req.session.cart,

34
00:01:35,640 --> 00:01:38,510
I wanna make that Stripe payment.

35
00:01:38,510 --> 00:01:41,490
For this, we first of all, need to include

36
00:01:41,490 --> 00:01:44,710
this Stripe package which we added to our project

37
00:01:44,710 --> 00:01:46,470
into this code file.

38
00:01:46,470 --> 00:01:49,083
And we can copy this line for this.

39
00:01:49,970 --> 00:01:54,970
And this line can be added at the top of orders.controller.

40
00:01:55,290 --> 00:01:58,020
Now, here we required a Stripe package

41
00:01:58,020 --> 00:02:00,770
and then we also do something else.

42
00:02:00,770 --> 00:02:03,089
We in the end execute the function

43
00:02:03,089 --> 00:02:06,430
that seems to be provided by this package.

44
00:02:06,430 --> 00:02:09,150
The Stripe package seems to export a function

45
00:02:09,150 --> 00:02:12,434
as its main thing, and therefore, we execute this function

46
00:02:12,434 --> 00:02:14,548
by adding parentheses here.

47
00:02:14,548 --> 00:02:17,560
Alternatively, if this is confusing,

48
00:02:17,560 --> 00:02:20,730
we could do this in a two-step process

49
00:02:20,730 --> 00:02:25,730
and have our stripeObj, let's say, by executing stripe,

50
00:02:26,900 --> 00:02:29,443
which I import here as a function.

51
00:02:30,700 --> 00:02:32,210
So both is possible.

52
00:02:32,210 --> 00:02:34,471
The important thing is that we execute the thing

53
00:02:34,471 --> 00:02:38,550
that's provided by the Stripe package as a function.

54
00:02:38,550 --> 00:02:40,653
So I'll go back to the original approach.

55
00:02:41,490 --> 00:02:44,335
Now, to this function, a string has provided as a value

56
00:02:44,335 --> 00:02:48,360
and that string includes some random looking

57
00:02:48,360 --> 00:02:50,283
combination of characters.

58
00:02:51,260 --> 00:02:54,160
This is a Stripe key and in the Stripe documentation,

59
00:02:54,160 --> 00:02:55,560
if you would be logged in

60
00:02:55,560 --> 00:02:57,810
whilst being on the documentation page,

61
00:02:57,810 --> 00:02:59,614
which I'm not in this case here,

62
00:02:59,614 --> 00:03:02,680
you should actually see your concrete key here

63
00:03:02,680 --> 00:03:04,460
in the documentation.

64
00:03:04,460 --> 00:03:08,080
Either way, you can always go to your profile,

65
00:03:08,080 --> 00:03:12,250
your account profile and there to Developers, API Keys.

66
00:03:12,250 --> 00:03:15,900
And here it's this secret key which we need.

67
00:03:15,900 --> 00:03:19,210
You should reveal that test key, that secret key,

68
00:03:19,210 --> 00:03:20,360
copy that key.

69
00:03:20,360 --> 00:03:23,470
And it's called secret key because you shouldn't share it

70
00:03:23,470 --> 00:03:24,740
with anyone else.

71
00:03:24,740 --> 00:03:27,390
I will reset it, I will delete it

72
00:03:27,390 --> 00:03:28,780
after recording this video,

73
00:03:28,780 --> 00:03:30,760
so you can't use my key.

74
00:03:30,760 --> 00:03:32,970
You should never share it with anyone else

75
00:03:32,970 --> 00:03:36,410
because this key can be used to make charges

76
00:03:36,410 --> 00:03:38,680
connected to your account.

77
00:03:38,680 --> 00:03:43,680
And it's this key, which you pass here between the quotes

78
00:03:44,200 --> 00:03:47,513
as a value as a string to this stripe function

79
00:03:47,513 --> 00:03:49,740
that we execute here.

80
00:03:49,740 --> 00:03:52,720
This will then be used internally by the Stripe package

81
00:03:52,720 --> 00:03:54,993
for sending requests to Stripe.

82
00:03:56,160 --> 00:03:58,470
Now, the next step, as we see here,

83
00:03:58,470 --> 00:04:01,030
is then to create such a checkout.session

84
00:04:01,030 --> 00:04:05,300
in the place where we wanna make that payment.

85
00:04:05,300 --> 00:04:09,713
So therefore, I'll copy this here, this code here.

86
00:04:13,127 --> 00:04:16,570
And at that here after req.session.cart.

87
00:04:17,850 --> 00:04:19,649
Here at the end, we also redirect,

88
00:04:19,649 --> 00:04:22,640
and therefore, I will not redirect myself anymore.

89
00:04:22,640 --> 00:04:25,603
I'll come back to what we do here in a second.

90
00:04:26,759 --> 00:04:29,150
So let's see the value of the code we just copied.

91
00:04:29,150 --> 00:04:30,940
What does this do here?

92
00:04:30,940 --> 00:04:32,350
We use await here.

93
00:04:32,350 --> 00:04:33,187
So of course, our function

94
00:04:33,187 --> 00:04:36,760
should be async function for that, and it is.

95
00:04:36,760 --> 00:04:40,360
And then we use this stripe object,

96
00:04:40,360 --> 00:04:42,200
which we got from the Stripe packaged

97
00:04:42,200 --> 00:04:43,870
by executing this function.

98
00:04:43,870 --> 00:04:45,360
This then yields our object.

99
00:04:45,360 --> 00:04:46,840
And we use this object,

100
00:04:46,840 --> 00:04:48,770
and then we access the checkout property

101
00:04:48,770 --> 00:04:50,450
on that stripe object.

102
00:04:50,450 --> 00:04:52,380
Now, we know that we can access this

103
00:04:52,380 --> 00:04:55,830
because we find this code in the official documentation.

104
00:04:55,830 --> 00:04:59,785
And here, we are already tapping into Stripe's API.

105
00:04:59,785 --> 00:05:02,490
We're not sending a request to Stripe yet,

106
00:05:02,490 --> 00:05:06,230
but we're tapping into the API of the Stripe package.

107
00:05:06,230 --> 00:05:09,210
So we're using the interface of that package,

108
00:05:09,210 --> 00:05:13,180
we are using a clearly defined action or in this case,

109
00:05:13,180 --> 00:05:16,180
a clearly defined property to do something

110
00:05:16,180 --> 00:05:17,690
with that package.

111
00:05:17,690 --> 00:05:21,231
And we find out which properties and methods we can use

112
00:05:21,231 --> 00:05:23,313
by looking at the official docs.

113
00:05:24,590 --> 00:05:26,830
So we use the checkout property.

114
00:05:26,830 --> 00:05:29,900
And then on that, it seems to return an object as well.

115
00:05:29,900 --> 00:05:32,190
We access the sessions property,

116
00:05:32,190 --> 00:05:35,538
and that also seems to return an object

117
00:05:35,538 --> 00:05:37,860
with a create method.

118
00:05:37,860 --> 00:05:39,150
The session here by the way,

119
00:05:39,150 --> 00:05:41,173
has nothing to do with our own session

120
00:05:41,173 --> 00:05:42,460
that we created before.

121
00:05:42,460 --> 00:05:45,610
A session instead as a more general term

122
00:05:45,610 --> 00:05:48,240
that is used for our ongoing,

123
00:05:48,240 --> 00:05:51,850
well yes, session of ongoing process you could say,

124
00:05:51,850 --> 00:05:55,040
that you established with some server.

125
00:05:55,040 --> 00:05:58,260
Here, we are about to establish an ongoing process

126
00:05:58,260 --> 00:06:01,400
or session with these Stripe's servers you could say.

127
00:06:01,400 --> 00:06:03,923
And we do establish that by calling create.

128
00:06:04,828 --> 00:06:08,620
Now, create takes an object, hence the curly braces,

129
00:06:08,620 --> 00:06:13,410
with various keys that configure this session.

130
00:06:13,410 --> 00:06:15,860
And these key names here are not up to you,

131
00:06:15,860 --> 00:06:19,940
instead these are key names Stripe is waiting for.

132
00:06:19,940 --> 00:06:22,157
So these are clearly defined key names,

133
00:06:22,157 --> 00:06:25,133
and hence, it's all part of Stripe's API.

134
00:06:26,340 --> 00:06:29,350
For example, we have to define the payment method types

135
00:06:29,350 --> 00:06:30,510
that we wanna handle.

136
00:06:30,510 --> 00:06:33,103
And here, we'll focus on credit card payments.

137
00:06:34,210 --> 00:06:36,310
Again, we see this here.

138
00:06:36,310 --> 00:06:38,440
The value here is also not up to you,

139
00:06:38,440 --> 00:06:41,210
you have to use one of the supported value types

140
00:06:41,210 --> 00:06:43,190
and card is one of them.

141
00:06:43,190 --> 00:06:46,580
You find others here by cycling through the different

142
00:06:47,420 --> 00:06:49,580
payment types of Stripe supports.

143
00:06:49,580 --> 00:06:52,310
And you see how the code changes on the right

144
00:06:52,310 --> 00:06:53,193
if you do that.

145
00:06:54,290 --> 00:06:57,710
And then you define the items that should be purchased.

146
00:06:57,710 --> 00:07:01,950
Now here, we have to set the price that we wanna charge.

147
00:07:01,950 --> 00:07:04,180
And now here we have to be careful.

148
00:07:04,180 --> 00:07:06,380
The price field in this object,

149
00:07:06,380 --> 00:07:08,400
which we add here to line items,

150
00:07:08,400 --> 00:07:12,250
actually has to be an ID as it says here.

151
00:07:12,250 --> 00:07:15,794
And it has to be an ID pointing at a price object

152
00:07:15,794 --> 00:07:19,453
defined on Stripe's servers.

153
00:07:20,300 --> 00:07:21,800
If we have a look at our account,

154
00:07:21,800 --> 00:07:24,720
we see that we can configure a lot of things there.

155
00:07:24,720 --> 00:07:27,800
And it turns out that you can actually store your product,

156
00:07:27,800 --> 00:07:30,070
not just in your own database,

157
00:07:30,070 --> 00:07:31,740
but you could also use Stripe

158
00:07:31,740 --> 00:07:34,350
to manage your products and prices.

159
00:07:34,350 --> 00:07:37,480
And if you stored prices for your products

160
00:07:37,480 --> 00:07:40,581
on Stripe's servers, which we haven't done here,

161
00:07:40,581 --> 00:07:45,130
you could point at a specific PRICE_ID to let Stripe know

162
00:07:45,130 --> 00:07:47,943
which price it should fetch from its own database.

163
00:07:48,810 --> 00:07:50,050
Now, here, in our case,

164
00:07:50,050 --> 00:07:53,420
we haven't stored any pricing data on Stripe's servers.

165
00:07:53,420 --> 00:07:56,890
And therefore, we'll choose plan B here.

166
00:07:56,890 --> 00:07:57,860
In new official docs,

167
00:07:57,860 --> 00:08:01,026
we see that we can work with the predefined PRICE_IDs,

168
00:08:01,026 --> 00:08:03,990
or we create price_data on the fly

169
00:08:03,990 --> 00:08:07,263
with that price_data thing here, on which I clicked.

170
00:08:08,170 --> 00:08:10,420
And then we learned that in the line items,

171
00:08:10,420 --> 00:08:15,050
we can optionally to price also add price_data,

172
00:08:15,050 --> 00:08:17,283
and that's what all do here, price_data.

173
00:08:18,720 --> 00:08:20,114
This then has to be an object

174
00:08:20,114 --> 00:08:22,210
where we describe the price

175
00:08:22,210 --> 00:08:25,450
just in time for this specific transaction

176
00:08:25,450 --> 00:08:29,437
without any data being stored on Stripe's servers.

177
00:08:29,437 --> 00:08:32,490
For price_data, we have to define a currency,

178
00:08:32,490 --> 00:08:36,039
it's required as you see here in the documentation.

179
00:08:36,039 --> 00:08:38,659
And it has to be a three-letter standardized code

180
00:08:38,659 --> 00:08:40,150
in lower case.

181
00:08:40,150 --> 00:08:45,053
So in my case here, I'll add currency: usd, like this.

182
00:08:46,710 --> 00:08:50,010
And then in addition, we need either a product

183
00:08:50,010 --> 00:08:53,180
pointing at a product stored on Stripe's servers,

184
00:08:53,180 --> 00:08:56,400
which we don't have, or relevant for our case,

185
00:08:56,400 --> 00:09:00,500
product_data, which again is just defined in time.

186
00:09:00,500 --> 00:09:02,630
So here, I'll then add product_data

187
00:09:02,630 --> 00:09:05,000
just as I added price_data.

188
00:09:05,000 --> 00:09:07,350
And that's another object with more details

189
00:09:07,350 --> 00:09:09,720
about the product that was ordered.

190
00:09:09,720 --> 00:09:13,850
And here we then need to define at least a name

191
00:09:13,850 --> 00:09:16,563
and we can also send more data if we want to.

192
00:09:17,810 --> 00:09:22,410
So here I'll focused on the name, and say Dummy right now,

193
00:09:22,410 --> 00:09:24,690
because we will populate that with real data

194
00:09:24,690 --> 00:09:25,803
a little bit later.

195
00:09:27,850 --> 00:09:32,450
Now we also need to go back to price_data,

196
00:09:32,450 --> 00:09:37,290
and there, we also need to provide the amount

197
00:09:37,290 --> 00:09:38,460
that we wanna charge

198
00:09:38,460 --> 00:09:43,460
as a decimal number or as a non-negative integer in cents

199
00:09:45,330 --> 00:09:49,007
Using this approach where you provide the amount in cents

200
00:09:49,007 --> 00:09:53,430
instead of as a decimal number, can avoid rounding issues

201
00:09:53,430 --> 00:09:57,520
where if a user adds 15 items to a cart,

202
00:09:57,520 --> 00:10:02,010
15 times the same item with a price that ends with .99,

203
00:10:02,010 --> 00:10:04,180
you could run into some rounding errors

204
00:10:04,180 --> 00:10:06,450
because of how JavaScript works.

205
00:10:06,450 --> 00:10:08,290
That's why you might wanna prefer a price

206
00:10:08,290 --> 00:10:12,000
sent as a integer number in cents.

207
00:10:12,000 --> 00:10:14,790
Now, for us, it sounds like maybe unit amount decimal

208
00:10:14,790 --> 00:10:17,510
is more fitting since we work with prices

209
00:10:17,510 --> 00:10:20,410
that are expressed as decimal numbers.

210
00:10:20,410 --> 00:10:23,440
We do have decimal places in our prices.

211
00:10:23,440 --> 00:10:26,000
And therefore, we'll start using that

212
00:10:26,000 --> 00:10:27,970
and see whether it works.

213
00:10:27,970 --> 00:10:29,190
It actually won't work,

214
00:10:29,190 --> 00:10:31,640
but I'll still start with that because I wanna show you

215
00:10:31,640 --> 00:10:34,850
why it won't work before we then fix it later.

216
00:10:34,850 --> 00:10:36,610
Unit amount is the one we need,

217
00:10:36,610 --> 00:10:39,090
but we'll have to transform our prices for that.

218
00:10:39,090 --> 00:10:42,910
And therefore, we'll start with unit amount decimal instead.

219
00:10:42,910 --> 00:10:46,050
And hence, in price_data after the product_data,

220
00:10:46,050 --> 00:10:49,960
I add unit amount decimal, and this will then be the price,

221
00:10:49,960 --> 00:10:53,070
which we of course also have to populate with real data

222
00:10:53,070 --> 00:10:54,453
in a couple of seconds.

223
00:10:55,810 --> 00:10:58,150
But that's how we generally configured the items

224
00:10:58,150 --> 00:11:00,520
that should be sent to Stripe,

225
00:11:00,520 --> 00:11:03,193
so that a payment is made for these items.

226
00:11:04,950 --> 00:11:07,460
Now, the mode should be payment.

227
00:11:07,460 --> 00:11:12,220
And success and cancel URLs will be important now.

228
00:11:12,220 --> 00:11:15,650
Because the Stripe API actually works such

229
00:11:15,650 --> 00:11:20,484
that the user is redirected to Stripe's own sites

230
00:11:20,484 --> 00:11:23,250
so that the charge can be made there

231
00:11:23,250 --> 00:11:26,950
and Stripe will then redirect the user back to your site

232
00:11:26,950 --> 00:11:28,870
once status finished.

233
00:11:28,870 --> 00:11:33,030
That's why we have these success and cancel redirect URLs.

234
00:11:33,030 --> 00:11:35,845
And that's why we redirect the user like this down here

235
00:11:35,845 --> 00:11:39,169
after we configure this Stripe session.

236
00:11:39,169 --> 00:11:42,006
We redirect the user to Stripe's website here,

237
00:11:42,006 --> 00:11:43,424
so that on that website,

238
00:11:43,424 --> 00:11:46,690
the payment can be made in a secure environment

239
00:11:46,690 --> 00:11:50,020
and we don't have to worry about any details of that.

240
00:11:50,020 --> 00:11:52,100
And then once the payment completed,

241
00:11:52,100 --> 00:11:55,200
Stripe will redirect user back to our site

242
00:11:55,200 --> 00:11:59,223
and they're either to success.html or cancel.html.

243
00:12:00,397 --> 00:12:05,230
And here, I'll redirect to localhost:3000/success,

244
00:12:05,230 --> 00:12:08,423
and localhost:3000/cancel.html.

245
00:12:09,400 --> 00:12:13,400
Or not cancel and success.html, just success and cancel.

246
00:12:13,400 --> 00:12:15,870
And now we will have to define these two routes

247
00:12:15,870 --> 00:12:17,690
and the views for these routes

248
00:12:17,690 --> 00:12:19,120
before we then in the next step,

249
00:12:19,120 --> 00:12:22,060
of course, also populate the payment data

250
00:12:22,060 --> 00:12:23,253
with the real data.

251
00:12:24,820 --> 00:12:27,820
So let's quickly add the success and cancel views

252
00:12:27,820 --> 00:12:30,833
so that Stripe will be able to redirect to us.

253
00:12:31,720 --> 00:12:35,140
And for this, I'll go to views, customer,

254
00:12:35,140 --> 00:12:38,020
because this clearly affects the customer.

255
00:12:38,020 --> 00:12:41,140
And there orders sounds like a good place.

256
00:12:41,140 --> 00:12:43,670
And there, I'll add a success.ejs file

257
00:12:43,670 --> 00:12:48,670
and error or failure.ejs file.

258
00:12:50,110 --> 00:12:52,750
And I'll grab the code from all-orders.ejs

259
00:12:52,750 --> 00:12:54,230
and paste it in there.

260
00:12:54,230 --> 00:12:57,843
Remove the orders.css import though,

261
00:12:58,840 --> 00:13:00,220
and replace the title.

262
00:13:00,220 --> 00:13:02,720
And then here, I'll keep it very simple.

263
00:13:02,720 --> 00:13:06,963
I'll remove that list here, I'll just say Order failed,

264
00:13:08,870 --> 00:13:13,870
Please contact the shop owner for more details,

265
00:13:18,190 --> 00:13:19,700
something like this.

266
00:13:19,700 --> 00:13:22,800
And then I'll copy it again into success.ejs

267
00:13:22,800 --> 00:13:25,123
where I say success in a title,

268
00:13:26,150 --> 00:13:30,763
and then say Order was successful here in the h1 tag.

269
00:13:31,770 --> 00:13:36,173
And here, I'll say You can visit, /orders,

270
00:13:38,430 --> 00:13:43,430
the orders page for more details, something like this.

271
00:13:45,380 --> 00:13:47,540
These are my two templates.

272
00:13:47,540 --> 00:13:49,550
Now we need routes for these templates.

273
00:13:49,550 --> 00:13:51,043
And for that, I'll go to the order,

274
00:13:51,043 --> 00:13:53,480
that orders.routes.js file.

275
00:13:53,480 --> 00:13:56,220
And here, I wanna handle requests to get /success

276
00:13:59,550 --> 00:14:04,343
and to get /failure.

277
00:14:05,860 --> 00:14:09,130
And we now need to add the appropriate controller actions

278
00:14:09,130 --> 00:14:11,420
in the orders.controller.

279
00:14:11,420 --> 00:14:13,430
So there maybe at the bottom,

280
00:14:13,430 --> 00:14:16,257
I'll add a very simple function getSuccess

281
00:14:17,770 --> 00:14:21,180
where I just get the request and response object.

282
00:14:21,180 --> 00:14:22,540
And where in the response,

283
00:14:22,540 --> 00:14:27,540
we just render customer/orders/success.

284
00:14:28,060 --> 00:14:31,460
In this case, we don't need to pass any data to that

285
00:14:31,460 --> 00:14:32,633
so that's all we need.

286
00:14:33,590 --> 00:14:38,340
And then I also copy that to have my getFailure function,

287
00:14:38,340 --> 00:14:42,883
where I render customer/orders/failure.

288
00:14:44,640 --> 00:14:48,230
Now these two new functions need to be exposed of course,

289
00:14:48,230 --> 00:14:50,900
so that we can use them in our files

290
00:14:50,900 --> 00:14:52,713
as we did it before in the course.

291
00:14:54,310 --> 00:14:58,070
And then we can go back to the orders.routes.js file.

292
00:14:58,070 --> 00:14:59,730
And here, for the success route,

293
00:14:59,730 --> 00:15:04,720
I'll point at ordersController.getSuccess, like this.

294
00:15:04,720 --> 00:15:09,547
And for failure, I'll point at ordersController.getFailure.

295
00:15:12,746 --> 00:15:15,550
Now, if we go back to the orders.controller,

296
00:15:15,550 --> 00:15:17,470
and there to our Stripe payment,

297
00:15:17,470 --> 00:15:21,000
of course, I wanna tweak those success and cancel URLs

298
00:15:21,000 --> 00:15:24,120
since I just set up routes in the orders.routes file.

299
00:15:24,120 --> 00:15:26,970
These routes here, these URLs

300
00:15:26,970 --> 00:15:29,440
should of course be localhost:3000.

301
00:15:29,440 --> 00:15:34,047
So our domain /orders/success,

302
00:15:35,770 --> 00:15:39,500
and here it should be /orders/failure

303
00:15:39,500 --> 00:15:41,200
because that's the route I set up.

304
00:15:42,450 --> 00:15:45,550
And with that Stripe should redirect to these pages

305
00:15:45,550 --> 00:15:47,383
once an order was made.

306
00:15:48,420 --> 00:15:49,910
Now, of course we have to ensure

307
00:15:49,910 --> 00:15:52,363
that we're sending correct data to Stripe.

