1 | type Stripe = { |
2 | token: string; |
3 | }; |
4 | |
5 | * Post payment intents intent |
6 | * Updates properties on a PaymentIntent object without confirming. |
7 |
|
8 | Depending on which properties you update, you might need to confirm the |
9 | PaymentIntent again. For example, updating the payment_method |
10 | always requires you to confirm the PaymentIntent again. If you prefer to |
11 | update and confirm at the same time, we recommend updating properties through |
12 | the confirm API instead. |
13 | */ |
14 | export async function main( |
15 | auth: Stripe, |
16 | intent: string, |
17 | body: { |
18 | amount?: number; |
19 | application_fee_amount?: number | ""; |
20 | capture_method?: "automatic" | "automatic_async" | "manual"; |
21 | currency?: string; |
22 | customer?: string; |
23 | description?: string; |
24 | expand?: string[]; |
25 | metadata?: { [k: string]: string } | ""; |
26 | payment_method?: string; |
27 | payment_method_configuration?: string; |
28 | payment_method_data?: { |
29 | acss_debit?: { |
30 | account_number: string; |
31 | institution_number: string; |
32 | transit_number: string; |
33 | [k: string]: unknown; |
34 | }; |
35 | affirm?: { [k: string]: unknown }; |
36 | afterpay_clearpay?: { [k: string]: unknown }; |
37 | alipay?: { [k: string]: unknown }; |
38 | au_becs_debit?: { |
39 | account_number: string; |
40 | bsb_number: string; |
41 | [k: string]: unknown; |
42 | }; |
43 | bacs_debit?: { |
44 | account_number?: string; |
45 | sort_code?: string; |
46 | [k: string]: unknown; |
47 | }; |
48 | bancontact?: { [k: string]: unknown }; |
49 | billing_details?: { |
50 | address?: |
51 | | { |
52 | city?: string; |
53 | country?: string; |
54 | line1?: string; |
55 | line2?: string; |
56 | postal_code?: string; |
57 | state?: string; |
58 | [k: string]: unknown; |
59 | } |
60 | | ""; |
61 | email?: string | ""; |
62 | name?: string | ""; |
63 | phone?: string | ""; |
64 | [k: string]: unknown; |
65 | }; |
66 | blik?: { [k: string]: unknown }; |
67 | boleto?: { tax_id: string; [k: string]: unknown }; |
68 | cashapp?: { [k: string]: unknown }; |
69 | customer_balance?: { [k: string]: unknown }; |
70 | eps?: { |
71 | bank?: |
72 | | "arzte_und_apotheker_bank" |
73 | | "austrian_anadi_bank_ag" |
74 | | "bank_austria" |
75 | | "bankhaus_carl_spangler" |
76 | | "bankhaus_schelhammer_und_schattera_ag" |
77 | | "bawag_psk_ag" |
78 | | "bks_bank_ag" |
79 | | "brull_kallmus_bank_ag" |
80 | | "btv_vier_lander_bank" |
81 | | "capital_bank_grawe_gruppe_ag" |
82 | | "deutsche_bank_ag" |
83 | | "dolomitenbank" |
84 | | "easybank_ag" |
85 | | "erste_bank_und_sparkassen" |
86 | | "hypo_alpeadriabank_international_ag" |
87 | | "hypo_bank_burgenland_aktiengesellschaft" |
88 | | "hypo_noe_lb_fur_niederosterreich_u_wien" |
89 | | "hypo_oberosterreich_salzburg_steiermark" |
90 | | "hypo_tirol_bank_ag" |
91 | | "hypo_vorarlberg_bank_ag" |
92 | | "marchfelder_bank" |
93 | | "oberbank_ag" |
94 | | "raiffeisen_bankengruppe_osterreich" |
95 | | "schoellerbank_ag" |
96 | | "sparda_bank_wien" |
97 | | "volksbank_gruppe" |
98 | | "volkskreditbank_ag" |
99 | | "vr_bank_braunau"; |
100 | [k: string]: unknown; |
101 | }; |
102 | fpx?: { |
103 | bank: |
104 | | "affin_bank" |
105 | | "agrobank" |
106 | | "alliance_bank" |
107 | | "ambank" |
108 | | "bank_islam" |
109 | | "bank_muamalat" |
110 | | "bank_of_china" |
111 | | "bank_rakyat" |
112 | | "bsn" |
113 | | "cimb" |
114 | | "deutsche_bank" |
115 | | "hong_leong_bank" |
116 | | "hsbc" |
117 | | "kfh" |
118 | | "maybank2e" |
119 | | "maybank2u" |
120 | | "ocbc" |
121 | | "pb_enterprise" |
122 | | "public_bank" |
123 | | "rhb" |
124 | | "standard_chartered" |
125 | | "uob"; |
126 | [k: string]: unknown; |
127 | }; |
128 | giropay?: { [k: string]: unknown }; |
129 | grabpay?: { [k: string]: unknown }; |
130 | ideal?: { |
131 | bank?: |
132 | | "abn_amro" |
133 | | "asn_bank" |
134 | | "bunq" |
135 | | "handelsbanken" |
136 | | "ing" |
137 | | "knab" |
138 | | "moneyou" |
139 | | "n26" |
140 | | "nn" |
141 | | "rabobank" |
142 | | "regiobank" |
143 | | "revolut" |
144 | | "sns_bank" |
145 | | "triodos_bank" |
146 | | "van_lanschot" |
147 | | "yoursafe"; |
148 | [k: string]: unknown; |
149 | }; |
150 | interac_present?: { [k: string]: unknown }; |
151 | klarna?: { |
152 | dob?: { |
153 | day: number; |
154 | month: number; |
155 | year: number; |
156 | [k: string]: unknown; |
157 | }; |
158 | [k: string]: unknown; |
159 | }; |
160 | konbini?: { [k: string]: unknown }; |
161 | link?: { [k: string]: unknown }; |
162 | metadata?: { [k: string]: string }; |
163 | oxxo?: { [k: string]: unknown }; |
164 | p24?: { |
165 | bank?: |
166 | | "alior_bank" |
167 | | "bank_millennium" |
168 | | "bank_nowy_bfg_sa" |
169 | | "bank_pekao_sa" |
170 | | "banki_spbdzielcze" |
171 | | "blik" |
172 | | "bnp_paribas" |
173 | | "boz" |
174 | | "citi_handlowy" |
175 | | "credit_agricole" |
176 | | "envelobank" |
177 | | "etransfer_pocztowy24" |
178 | | "getin_bank" |
179 | | "ideabank" |
180 | | "ing" |
181 | | "inteligo" |
182 | | "mbank_mtransfer" |
183 | | "nest_przelew" |
184 | | "noble_pay" |
185 | | "pbac_z_ipko" |
186 | | "plus_bank" |
187 | | "santander_przelew24" |
188 | | "tmobile_usbugi_bankowe" |
189 | | "toyota_bank" |
190 | | "velobank" |
191 | | "volkswagen_bank"; |
192 | [k: string]: unknown; |
193 | }; |
194 | paynow?: { [k: string]: unknown }; |
195 | paypal?: { [k: string]: unknown }; |
196 | pix?: { [k: string]: unknown }; |
197 | promptpay?: { [k: string]: unknown }; |
198 | radar_options?: { session?: string; [k: string]: unknown }; |
199 | revolut_pay?: { [k: string]: unknown }; |
200 | sepa_debit?: { iban: string; [k: string]: unknown }; |
201 | sofort?: { |
202 | country: "AT" | "BE" | "DE" | "ES" | "IT" | "NL"; |
203 | [k: string]: unknown; |
204 | }; |
205 | swish?: { [k: string]: unknown }; |
206 | type: |
207 | | "acss_debit" |
208 | | "affirm" |
209 | | "afterpay_clearpay" |
210 | | "alipay" |
211 | | "au_becs_debit" |
212 | | "bacs_debit" |
213 | | "bancontact" |
214 | | "blik" |
215 | | "boleto" |
216 | | "cashapp" |
217 | | "customer_balance" |
218 | | "eps" |
219 | | "fpx" |
220 | | "giropay" |
221 | | "grabpay" |
222 | | "ideal" |
223 | | "klarna" |
224 | | "konbini" |
225 | | "link" |
226 | | "oxxo" |
227 | | "p24" |
228 | | "paynow" |
229 | | "paypal" |
230 | | "pix" |
231 | | "promptpay" |
232 | | "revolut_pay" |
233 | | "sepa_debit" |
234 | | "sofort" |
235 | | "swish" |
236 | | "us_bank_account" |
237 | | "wechat_pay" |
238 | | "zip"; |
239 | us_bank_account?: { |
240 | account_holder_type?: "company" | "individual"; |
241 | account_number?: string; |
242 | account_type?: "checking" | "savings"; |
243 | financial_connections_account?: string; |
244 | routing_number?: string; |
245 | [k: string]: unknown; |
246 | }; |
247 | wechat_pay?: { [k: string]: unknown }; |
248 | zip?: { [k: string]: unknown }; |
249 | [k: string]: unknown; |
250 | }; |
251 | payment_method_options?: { |
252 | acss_debit?: |
253 | | { |
254 | mandate_options?: { |
255 | custom_mandate_url?: string | ""; |
256 | interval_description?: string; |
257 | payment_schedule?: "combined" | "interval" | "sporadic"; |
258 | transaction_type?: "business" | "personal"; |
259 | [k: string]: unknown; |
260 | }; |
261 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
262 | verification_method?: "automatic" | "instant" | "microdeposits"; |
263 | [k: string]: unknown; |
264 | } |
265 | | ""; |
266 | affirm?: |
267 | | { |
268 | capture_method?: "" | "manual"; |
269 | preferred_locale?: string; |
270 | setup_future_usage?: "none"; |
271 | [k: string]: unknown; |
272 | } |
273 | | ""; |
274 | afterpay_clearpay?: |
275 | | { |
276 | capture_method?: "" | "manual"; |
277 | reference?: string; |
278 | setup_future_usage?: "none"; |
279 | [k: string]: unknown; |
280 | } |
281 | | ""; |
282 | alipay?: |
283 | | { |
284 | setup_future_usage?: "" | "none" | "off_session"; |
285 | [k: string]: unknown; |
286 | } |
287 | | ""; |
288 | au_becs_debit?: |
289 | | { |
290 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
291 | [k: string]: unknown; |
292 | } |
293 | | ""; |
294 | bacs_debit?: |
295 | | { |
296 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
297 | [k: string]: unknown; |
298 | } |
299 | | ""; |
300 | bancontact?: |
301 | | { |
302 | preferred_language?: "de" | "en" | "fr" | "nl"; |
303 | setup_future_usage?: "" | "none" | "off_session"; |
304 | [k: string]: unknown; |
305 | } |
306 | | ""; |
307 | blik?: |
308 | | { |
309 | code?: string; |
310 | setup_future_usage?: "" | "none"; |
311 | [k: string]: unknown; |
312 | } |
313 | | ""; |
314 | boleto?: |
315 | | { |
316 | expires_after_days?: number; |
317 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
318 | [k: string]: unknown; |
319 | } |
320 | | ""; |
321 | card?: |
322 | | { |
323 | capture_method?: "" | "manual"; |
324 | cvc_token?: string; |
325 | installments?: { |
326 | enabled?: boolean; |
327 | plan?: |
328 | | { |
329 | count: number; |
330 | interval: "month"; |
331 | type: "fixed_count"; |
332 | [k: string]: unknown; |
333 | } |
334 | | ""; |
335 | [k: string]: unknown; |
336 | }; |
337 | mandate_options?: { |
338 | amount: number; |
339 | amount_type: "fixed" | "maximum"; |
340 | description?: string; |
341 | end_date?: number; |
342 | interval: "day" | "month" | "sporadic" | "week" | "year"; |
343 | interval_count?: number; |
344 | reference: string; |
345 | start_date: number; |
346 | supported_types?: "india"[]; |
347 | [k: string]: unknown; |
348 | }; |
349 | network?: |
350 | | "amex" |
351 | | "cartes_bancaires" |
352 | | "diners" |
353 | | "discover" |
354 | | "eftpos_au" |
355 | | "interac" |
356 | | "jcb" |
357 | | "mastercard" |
358 | | "unionpay" |
359 | | "unknown" |
360 | | "visa"; |
361 | request_extended_authorization?: "if_available" | "never"; |
362 | request_incremental_authorization?: "if_available" | "never"; |
363 | request_multicapture?: "if_available" | "never"; |
364 | request_overcapture?: "if_available" | "never"; |
365 | request_three_d_secure?: "any" | "automatic" | "challenge"; |
366 | require_cvc_recollection?: boolean; |
367 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
368 | statement_descriptor_suffix_kana?: string | ""; |
369 | statement_descriptor_suffix_kanji?: string | ""; |
370 | three_d_secure?: { |
371 | ares_trans_status?: "A" | "C" | "I" | "N" | "R" | "U" | "Y"; |
372 | cryptogram: string; |
373 | electronic_commerce_indicator?: "01" | "02" | "05" | "06" | "07"; |
374 | exemption_indicator?: "low_risk" | "none"; |
375 | network_options?: { |
376 | cartes_bancaires?: { |
377 | cb_avalgo: "0" | "1" | "2" | "3" | "4" | "A"; |
378 | cb_exemption?: string; |
379 | cb_score?: number; |
380 | [k: string]: unknown; |
381 | }; |
382 | [k: string]: unknown; |
383 | }; |
384 | requestor_challenge_indicator?: string; |
385 | transaction_id: string; |
386 | version: "1.0.2" | "2.1.0" | "2.2.0"; |
387 | [k: string]: unknown; |
388 | }; |
389 | [k: string]: unknown; |
390 | } |
391 | | ""; |
392 | card_present?: |
393 | | { |
394 | request_extended_authorization?: boolean; |
395 | request_incremental_authorization_support?: boolean; |
396 | [k: string]: unknown; |
397 | } |
398 | | ""; |
399 | cashapp?: |
400 | | { |
401 | capture_method?: "" | "manual"; |
402 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
403 | [k: string]: unknown; |
404 | } |
405 | | ""; |
406 | customer_balance?: |
407 | | { |
408 | bank_transfer?: { |
409 | eu_bank_transfer?: { country: string; [k: string]: unknown }; |
410 | requested_address_types?: ( |
411 | | "aba" |
412 | | "iban" |
413 | | "sepa" |
414 | | "sort_code" |
415 | | "spei" |
416 | | "swift" |
417 | | "zengin" |
418 | )[]; |
419 | type: |
420 | | "eu_bank_transfer" |
421 | | "gb_bank_transfer" |
422 | | "jp_bank_transfer" |
423 | | "mx_bank_transfer" |
424 | | "us_bank_transfer"; |
425 | [k: string]: unknown; |
426 | }; |
427 | funding_type?: "bank_transfer"; |
428 | setup_future_usage?: "none"; |
429 | [k: string]: unknown; |
430 | } |
431 | | ""; |
432 | eps?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
433 | fpx?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
434 | giropay?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
435 | grabpay?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
436 | ideal?: |
437 | | { |
438 | setup_future_usage?: "" | "none" | "off_session"; |
439 | [k: string]: unknown; |
440 | } |
441 | | ""; |
442 | interac_present?: { [k: string]: unknown } | ""; |
443 | klarna?: |
444 | | { |
445 | capture_method?: "" | "manual"; |
446 | preferred_locale?: |
447 | | "cs-CZ" |
448 | | "da-DK" |
449 | | "de-AT" |
450 | | "de-CH" |
451 | | "de-DE" |
452 | | "el-GR" |
453 | | "en-AT" |
454 | | "en-AU" |
455 | | "en-BE" |
456 | | "en-CA" |
457 | | "en-CH" |
458 | | "en-CZ" |
459 | | "en-DE" |
460 | | "en-DK" |
461 | | "en-ES" |
462 | | "en-FI" |
463 | | "en-FR" |
464 | | "en-GB" |
465 | | "en-GR" |
466 | | "en-IE" |
467 | | "en-IT" |
468 | | "en-NL" |
469 | | "en-NO" |
470 | | "en-NZ" |
471 | | "en-PL" |
472 | | "en-PT" |
473 | | "en-SE" |
474 | | "en-US" |
475 | | "es-ES" |
476 | | "es-US" |
477 | | "fi-FI" |
478 | | "fr-BE" |
479 | | "fr-CA" |
480 | | "fr-CH" |
481 | | "fr-FR" |
482 | | "it-CH" |
483 | | "it-IT" |
484 | | "nb-NO" |
485 | | "nl-BE" |
486 | | "nl-NL" |
487 | | "pl-PL" |
488 | | "pt-PT" |
489 | | "sv-FI" |
490 | | "sv-SE"; |
491 | setup_future_usage?: "none"; |
492 | [k: string]: unknown; |
493 | } |
494 | | ""; |
495 | konbini?: |
496 | | { |
497 | confirmation_number?: string | ""; |
498 | expires_after_days?: number | ""; |
499 | expires_at?: number | ""; |
500 | product_description?: string | ""; |
501 | setup_future_usage?: "none"; |
502 | [k: string]: unknown; |
503 | } |
504 | | ""; |
505 | link?: |
506 | | { |
507 | capture_method?: "" | "manual"; |
508 | setup_future_usage?: "" | "none" | "off_session"; |
509 | [k: string]: unknown; |
510 | } |
511 | | ""; |
512 | oxxo?: |
513 | | { |
514 | expires_after_days?: number; |
515 | setup_future_usage?: "none"; |
516 | [k: string]: unknown; |
517 | } |
518 | | ""; |
519 | p24?: |
520 | | { |
521 | setup_future_usage?: "none"; |
522 | tos_shown_and_accepted?: boolean; |
523 | [k: string]: unknown; |
524 | } |
525 | | ""; |
526 | paynow?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
527 | paypal?: |
528 | | { |
529 | capture_method?: "" | "manual"; |
530 | preferred_locale?: |
531 | | "cs-CZ" |
532 | | "da-DK" |
533 | | "de-AT" |
534 | | "de-DE" |
535 | | "de-LU" |
536 | | "el-GR" |
537 | | "en-GB" |
538 | | "en-US" |
539 | | "es-ES" |
540 | | "fi-FI" |
541 | | "fr-BE" |
542 | | "fr-FR" |
543 | | "fr-LU" |
544 | | "hu-HU" |
545 | | "it-IT" |
546 | | "nl-BE" |
547 | | "nl-NL" |
548 | | "pl-PL" |
549 | | "pt-PT" |
550 | | "sk-SK" |
551 | | "sv-SE"; |
552 | reference?: string; |
553 | risk_correlation_id?: string; |
554 | setup_future_usage?: "" | "none" | "off_session"; |
555 | [k: string]: unknown; |
556 | } |
557 | | ""; |
558 | pix?: |
559 | | { |
560 | expires_after_seconds?: number; |
561 | expires_at?: number; |
562 | setup_future_usage?: "none"; |
563 | [k: string]: unknown; |
564 | } |
565 | | ""; |
566 | promptpay?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
567 | revolut_pay?: |
568 | | { |
569 | setup_future_usage?: "" | "none" | "off_session"; |
570 | [k: string]: unknown; |
571 | } |
572 | | ""; |
573 | sepa_debit?: |
574 | | { |
575 | mandate_options?: { [k: string]: unknown }; |
576 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
577 | [k: string]: unknown; |
578 | } |
579 | | ""; |
580 | sofort?: |
581 | | { |
582 | preferred_language?: |
583 | | "" |
584 | | "de" |
585 | | "en" |
586 | | "es" |
587 | | "fr" |
588 | | "it" |
589 | | "nl" |
590 | | "pl"; |
591 | setup_future_usage?: "" | "none" | "off_session"; |
592 | [k: string]: unknown; |
593 | } |
594 | | ""; |
595 | swish?: |
596 | | { |
597 | reference?: string | ""; |
598 | setup_future_usage?: "none"; |
599 | [k: string]: unknown; |
600 | } |
601 | | ""; |
602 | us_bank_account?: |
603 | | { |
604 | financial_connections?: { |
605 | permissions?: ( |
606 | | "balances" |
607 | | "ownership" |
608 | | "payment_method" |
609 | | "transactions" |
610 | )[]; |
611 | prefetch?: ("balances" | "transactions")[]; |
612 | return_url?: string; |
613 | [k: string]: unknown; |
614 | }; |
615 | mandate_options?: { |
616 | collection_method?: "" | "paper"; |
617 | [k: string]: unknown; |
618 | }; |
619 | networks?: { |
620 | requested?: ("ach" | "us_domestic_wire")[]; |
621 | [k: string]: unknown; |
622 | }; |
623 | preferred_settlement_speed?: "" | "fastest" | "standard"; |
624 | setup_future_usage?: "" | "none" | "off_session" | "on_session"; |
625 | verification_method?: "automatic" | "instant" | "microdeposits"; |
626 | [k: string]: unknown; |
627 | } |
628 | | ""; |
629 | wechat_pay?: |
630 | | { |
631 | app_id?: string; |
632 | client: "android" | "ios" | "web"; |
633 | setup_future_usage?: "none"; |
634 | [k: string]: unknown; |
635 | } |
636 | | ""; |
637 | zip?: { setup_future_usage?: "none"; [k: string]: unknown } | ""; |
638 | [k: string]: unknown; |
639 | }; |
640 | payment_method_types?: string[]; |
641 | receipt_email?: string | ""; |
642 | setup_future_usage?: "" | "off_session" | "on_session"; |
643 | shipping?: |
644 | | { |
645 | address: { |
646 | city?: string; |
647 | country?: string; |
648 | line1?: string; |
649 | line2?: string; |
650 | postal_code?: string; |
651 | state?: string; |
652 | [k: string]: unknown; |
653 | }; |
654 | carrier?: string; |
655 | name: string; |
656 | phone?: string; |
657 | tracking_number?: string; |
658 | [k: string]: unknown; |
659 | } |
660 | | ""; |
661 | statement_descriptor?: string; |
662 | statement_descriptor_suffix?: string; |
663 | transfer_data?: { amount?: number; [k: string]: unknown }; |
664 | transfer_group?: string; |
665 | } |
666 | ) { |
667 | const url = new URL(`https://api.stripe.com/v1/payment_intents/${intent}`); |
668 |
|
669 | const response = await fetch(url, { |
670 | method: "POST", |
671 | headers: { |
672 | "Content-Type": "application/x-www-form-urlencoded", |
673 | Authorization: "Bearer " + auth.token, |
674 | }, |
675 | body: encodeParams(body), |
676 | }); |
677 | if (!response.ok) { |
678 | const text = await response.text(); |
679 | throw new Error(`${response.status} ${text}`); |
680 | } |
681 | return await response.json(); |
682 | } |
683 |
|
684 | function encodeParams(o: any) { |
685 | function iter(o: any, path: string) { |
686 | if (Array.isArray(o)) { |
687 | o.forEach(function (a) { |
688 | iter(a, path + "[]"); |
689 | }); |
690 | return; |
691 | } |
692 | if (o !== null && typeof o === "object") { |
693 | Object.keys(o).forEach(function (k) { |
694 | iter(o[k], path + "[" + k + "]"); |
695 | }); |
696 | return; |
697 | } |
698 | data.push(path + "=" + o); |
699 | } |
700 | const data: string[] = []; |
701 | Object.keys(o).forEach(function (k) { |
702 | if (o[k] !== undefined) { |
703 | iter(o[k], k); |
704 | } |
705 | }); |
706 | return new URLSearchParams(data.join("&")); |
707 | } |
708 |
|