0

Update Payment Intent

by
Published Oct 30, 2023

Update a PaymentIntent that is not yet confirmed. Changing the amount or payment method may require confirming it again. Empty fields are left unchanged. `extra_params` passes any other documented field through as-is.

Script stripe Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 2 hours ago
1
//native
2

3
/**
4
 * Update Payment Intent
5
 * Update a PaymentIntent that is not yet confirmed. Changing the amount or payment method may require confirming it again. Empty fields are left unchanged. `extra_params` passes any other documented field through as-is.
6
 */
7
export async function main(
8
  auth: RT.Stripe,
9
  payment_intent_id: string,
10
  amount: number | undefined,
11
  currency: string | undefined,
12
  customer: string | undefined,
13
  description: string | undefined,
14
  payment_method: string | undefined,
15
  receipt_email: string | undefined,
16
  metadata: { [key: string]: string } | undefined,
17
  extra_params: { [key: string]: any } | undefined
18
) {
19
  const response = await fetch(
20
    `https://api.stripe.com/v1/payment_intents/${payment_intent_id}`,
21
    {
22
      method: "POST",
23
      headers: {
24
        Authorization: `Bearer ${auth.token}`,
25
        "Content-Type": "application/x-www-form-urlencoded",
26
        Accept: "application/json",
27
        "Stripe-Version": "2025-03-31.basil",
28
      },
29
      body: toForm({
30
        amount,
31
        currency,
32
        customer,
33
        description,
34
        payment_method,
35
        receipt_email,
36
        metadata,
37
        ...extra_params,
38
      }),
39
    }
40
  )
41

42
  if (!response.ok) {
43
    throw new Error(`${response.status} ${await response.text()}`)
44
  }
45

46
  return await response.json()
47
}
48

49
// Stripe takes form-encoded params with bracketed nesting: metadata[key]=v, items[0][price]=p
50
function toForm(
51
  params: { [key: string]: any },
52
  prefix = "",
53
  out = new URLSearchParams()
54
) {
55
  for (const [key, value] of Object.entries(params)) {
56
    if (value == null || value === "") continue
57
    const name = prefix ? `${prefix}[${key}]` : key
58
    if (typeof value === "object") toForm(value, name, out)
59
    else out.append(name, String(value))
60
  }
61
  return out
62
}
63

Other submissions
  • Submitted by hugo697 Typescript (fetch-only)
    Created 528 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