Post payment intents intent

Updates properties on a PaymentIntent object without confirming. Depending on which properties you update, you might need to confirm the PaymentIntent again. For example, updating the payment_method always requires you to confirm the PaymentIntent again. If you prefer to update and confirm at the same time, we recommend updating properties through the confirm API instead.

Script stripe Verified

by hugo697 ยท 10/30/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 368 days ago
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