0

Create Payment Intent

by
Published Oct 30, 2023

Create a PaymentIntent. `amount` is in the currency's smallest unit (1000 = 10.00 USD); `currency` is a lowercase ISO code. Without `payment_method_types`, the payment methods enabled in the Dashboard apply. `confirm` confirms it immediately (needs `payment_method`). Set `idempotency_key` to make retries safe: Stripe returns the first result for a repeated key within 24 hours. `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
 * Create Payment Intent
5
 * Create a PaymentIntent. `amount` is in the currency's smallest unit (1000 = 10.00 USD); `currency` is a lowercase ISO code. Without `payment_method_types`, the payment methods enabled in the Dashboard apply. `confirm` confirms it immediately (needs `payment_method`). Set `idempotency_key` to make retries safe: Stripe returns the first result for a repeated key within 24 hours. `extra_params` passes any other documented field through as-is.
6
 */
7
export async function main(
8
  auth: RT.Stripe,
9
  amount: number,
10
  currency: string,
11
  customer: string | undefined,
12
  description: string | undefined,
13
  payment_method: string | undefined,
14
  payment_method_types: string[] | undefined,
15
  receipt_email: string | undefined,
16
  statement_descriptor_suffix: string | undefined,
17
  confirm: boolean | undefined,
18
  metadata: { [key: string]: string } | undefined,
19
  idempotency_key: string | undefined,
20
  extra_params: { [key: string]: any } | undefined
21
) {
22
  const response = await fetch(`https://api.stripe.com/v1/payment_intents`, {
23
    method: "POST",
24
    headers: {
25
      Authorization: `Bearer ${auth.token}`,
26
      "Content-Type": "application/x-www-form-urlencoded",
27
      Accept: "application/json",
28
      "Stripe-Version": "2025-03-31.basil",
29
      ...(idempotency_key ? { "Idempotency-Key": idempotency_key } : {}),
30
    },
31
    body: toForm({
32
      amount,
33
      currency,
34
      customer,
35
      description,
36
      payment_method,
37
      payment_method_types,
38
      receipt_email,
39
      statement_descriptor_suffix,
40
      confirm: confirm || undefined,
41
      metadata,
42
      ...extra_params,
43
    }),
44
  })
45

46
  if (!response.ok) {
47
    throw new Error(`${response.status} ${await response.text()}`)
48
  }
49

50
  return await response.json()
51
}
52

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

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