Post setup intents

Creates a SetupIntent object. After you create the SetupIntent, attach a payment method and confirm it to collect any required permissions to charge the payment method later.

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 setup intents
6
 * Creates a SetupIntent object.
7

8
After you create the SetupIntent, attach a payment method and confirm
9
it to collect any required permissions to charge the payment method later.
10
 */
11
export async function main(
12
  auth: Stripe,
13
  body: {
14
    attach_to_self?: boolean;
15
    automatic_payment_methods?: {
16
      allow_redirects?: "always" | "never";
17
      enabled: boolean;
18
      [k: string]: unknown;
19
    };
20
    confirm?: boolean;
21
    customer?: string;
22
    description?: string;
23
    expand?: string[];
24
    flow_directions?: ("inbound" | "outbound")[];
25
    mandate_data?:
26
      | {
27
          customer_acceptance: {
28
            accepted_at?: number;
29
            offline?: { [k: string]: unknown };
30
            online?: {
31
              ip_address: string;
32
              user_agent: string;
33
              [k: string]: unknown;
34
            };
35
            type: "offline" | "online";
36
            [k: string]: unknown;
37
          };
38
          [k: string]: unknown;
39
        }
40
      | "";
41
    metadata?: { [k: string]: string };
42
    on_behalf_of?: string;
43
    payment_method?: string;
44
    payment_method_configuration?: string;
45
    payment_method_data?: {
46
      acss_debit?: {
47
        account_number: string;
48
        institution_number: string;
49
        transit_number: string;
50
        [k: string]: unknown;
51
      };
52
      affirm?: { [k: string]: unknown };
53
      afterpay_clearpay?: { [k: string]: unknown };
54
      alipay?: { [k: string]: unknown };
55
      au_becs_debit?: {
56
        account_number: string;
57
        bsb_number: string;
58
        [k: string]: unknown;
59
      };
60
      bacs_debit?: {
61
        account_number?: string;
62
        sort_code?: string;
63
        [k: string]: unknown;
64
      };
65
      bancontact?: { [k: string]: unknown };
66
      billing_details?: {
67
        address?:
68
          | {
69
              city?: string;
70
              country?: string;
71
              line1?: string;
72
              line2?: string;
73
              postal_code?: string;
74
              state?: string;
75
              [k: string]: unknown;
76
            }
77
          | "";
78
        email?: string | "";
79
        name?: string | "";
80
        phone?: string | "";
81
        [k: string]: unknown;
82
      };
83
      blik?: { [k: string]: unknown };
84
      boleto?: { tax_id: string; [k: string]: unknown };
85
      cashapp?: { [k: string]: unknown };
86
      customer_balance?: { [k: string]: unknown };
87
      eps?: {
88
        bank?:
89
          | "arzte_und_apotheker_bank"
90
          | "austrian_anadi_bank_ag"
91
          | "bank_austria"
92
          | "bankhaus_carl_spangler"
93
          | "bankhaus_schelhammer_und_schattera_ag"
94
          | "bawag_psk_ag"
95
          | "bks_bank_ag"
96
          | "brull_kallmus_bank_ag"
97
          | "btv_vier_lander_bank"
98
          | "capital_bank_grawe_gruppe_ag"
99
          | "deutsche_bank_ag"
100
          | "dolomitenbank"
101
          | "easybank_ag"
102
          | "erste_bank_und_sparkassen"
103
          | "hypo_alpeadriabank_international_ag"
104
          | "hypo_bank_burgenland_aktiengesellschaft"
105
          | "hypo_noe_lb_fur_niederosterreich_u_wien"
106
          | "hypo_oberosterreich_salzburg_steiermark"
107
          | "hypo_tirol_bank_ag"
108
          | "hypo_vorarlberg_bank_ag"
109
          | "marchfelder_bank"
110
          | "oberbank_ag"
111
          | "raiffeisen_bankengruppe_osterreich"
112
          | "schoellerbank_ag"
113
          | "sparda_bank_wien"
114
          | "volksbank_gruppe"
115
          | "volkskreditbank_ag"
116
          | "vr_bank_braunau";
117
        [k: string]: unknown;
118
      };
119
      fpx?: {
120
        bank:
121
          | "affin_bank"
122
          | "agrobank"
123
          | "alliance_bank"
124
          | "ambank"
125
          | "bank_islam"
126
          | "bank_muamalat"
127
          | "bank_of_china"
128
          | "bank_rakyat"
129
          | "bsn"
130
          | "cimb"
131
          | "deutsche_bank"
132
          | "hong_leong_bank"
133
          | "hsbc"
134
          | "kfh"
135
          | "maybank2e"
136
          | "maybank2u"
137
          | "ocbc"
138
          | "pb_enterprise"
139
          | "public_bank"
140
          | "rhb"
141
          | "standard_chartered"
142
          | "uob";
143
        [k: string]: unknown;
144
      };
145
      giropay?: { [k: string]: unknown };
146
      grabpay?: { [k: string]: unknown };
147
      ideal?: {
148
        bank?:
149
          | "abn_amro"
150
          | "asn_bank"
151
          | "bunq"
152
          | "handelsbanken"
153
          | "ing"
154
          | "knab"
155
          | "moneyou"
156
          | "n26"
157
          | "nn"
158
          | "rabobank"
159
          | "regiobank"
160
          | "revolut"
161
          | "sns_bank"
162
          | "triodos_bank"
163
          | "van_lanschot"
164
          | "yoursafe";
165
        [k: string]: unknown;
166
      };
167
      interac_present?: { [k: string]: unknown };
168
      klarna?: {
169
        dob?: {
170
          day: number;
171
          month: number;
172
          year: number;
173
          [k: string]: unknown;
174
        };
175
        [k: string]: unknown;
176
      };
177
      konbini?: { [k: string]: unknown };
178
      link?: { [k: string]: unknown };
179
      metadata?: { [k: string]: string };
180
      oxxo?: { [k: string]: unknown };
181
      p24?: {
182
        bank?:
183
          | "alior_bank"
184
          | "bank_millennium"
185
          | "bank_nowy_bfg_sa"
186
          | "bank_pekao_sa"
187
          | "banki_spbdzielcze"
188
          | "blik"
189
          | "bnp_paribas"
190
          | "boz"
191
          | "citi_handlowy"
192
          | "credit_agricole"
193
          | "envelobank"
194
          | "etransfer_pocztowy24"
195
          | "getin_bank"
196
          | "ideabank"
197
          | "ing"
198
          | "inteligo"
199
          | "mbank_mtransfer"
200
          | "nest_przelew"
201
          | "noble_pay"
202
          | "pbac_z_ipko"
203
          | "plus_bank"
204
          | "santander_przelew24"
205
          | "tmobile_usbugi_bankowe"
206
          | "toyota_bank"
207
          | "velobank"
208
          | "volkswagen_bank";
209
        [k: string]: unknown;
210
      };
211
      paynow?: { [k: string]: unknown };
212
      paypal?: { [k: string]: unknown };
213
      pix?: { [k: string]: unknown };
214
      promptpay?: { [k: string]: unknown };
215
      radar_options?: { session?: string; [k: string]: unknown };
216
      revolut_pay?: { [k: string]: unknown };
217
      sepa_debit?: { iban: string; [k: string]: unknown };
218
      sofort?: {
219
        country: "AT" | "BE" | "DE" | "ES" | "IT" | "NL";
220
        [k: string]: unknown;
221
      };
222
      swish?: { [k: string]: unknown };
223
      type:
224
        | "acss_debit"
225
        | "affirm"
226
        | "afterpay_clearpay"
227
        | "alipay"
228
        | "au_becs_debit"
229
        | "bacs_debit"
230
        | "bancontact"
231
        | "blik"
232
        | "boleto"
233
        | "cashapp"
234
        | "customer_balance"
235
        | "eps"
236
        | "fpx"
237
        | "giropay"
238
        | "grabpay"
239
        | "ideal"
240
        | "klarna"
241
        | "konbini"
242
        | "link"
243
        | "oxxo"
244
        | "p24"
245
        | "paynow"
246
        | "paypal"
247
        | "pix"
248
        | "promptpay"
249
        | "revolut_pay"
250
        | "sepa_debit"
251
        | "sofort"
252
        | "swish"
253
        | "us_bank_account"
254
        | "wechat_pay"
255
        | "zip";
256
      us_bank_account?: {
257
        account_holder_type?: "company" | "individual";
258
        account_number?: string;
259
        account_type?: "checking" | "savings";
260
        financial_connections_account?: string;
261
        routing_number?: string;
262
        [k: string]: unknown;
263
      };
264
      wechat_pay?: { [k: string]: unknown };
265
      zip?: { [k: string]: unknown };
266
      [k: string]: unknown;
267
    };
268
    payment_method_options?: {
269
      acss_debit?: {
270
        currency?: "cad" | "usd";
271
        mandate_options?: {
272
          custom_mandate_url?: string | "";
273
          default_for?: ("invoice" | "subscription")[];
274
          interval_description?: string;
275
          payment_schedule?: "combined" | "interval" | "sporadic";
276
          transaction_type?: "business" | "personal";
277
          [k: string]: unknown;
278
        };
279
        verification_method?: "automatic" | "instant" | "microdeposits";
280
        [k: string]: unknown;
281
      };
282
      card?: {
283
        mandate_options?: {
284
          amount: number;
285
          amount_type: "fixed" | "maximum";
286
          currency: string;
287
          description?: string;
288
          end_date?: number;
289
          interval: "day" | "month" | "sporadic" | "week" | "year";
290
          interval_count?: number;
291
          reference: string;
292
          start_date: number;
293
          supported_types?: "india"[];
294
          [k: string]: unknown;
295
        };
296
        network?:
297
          | "amex"
298
          | "cartes_bancaires"
299
          | "diners"
300
          | "discover"
301
          | "eftpos_au"
302
          | "interac"
303
          | "jcb"
304
          | "mastercard"
305
          | "unionpay"
306
          | "unknown"
307
          | "visa";
308
        request_three_d_secure?: "any" | "automatic" | "challenge";
309
        three_d_secure?: {
310
          ares_trans_status?: "A" | "C" | "I" | "N" | "R" | "U" | "Y";
311
          cryptogram?: string;
312
          electronic_commerce_indicator?: "01" | "02" | "05" | "06" | "07";
313
          network_options?: {
314
            cartes_bancaires?: {
315
              cb_avalgo: "0" | "1" | "2" | "3" | "4" | "A";
316
              cb_exemption?: string;
317
              cb_score?: number;
318
              [k: string]: unknown;
319
            };
320
            [k: string]: unknown;
321
          };
322
          requestor_challenge_indicator?: string;
323
          transaction_id?: string;
324
          version?: "1.0.2" | "2.1.0" | "2.2.0";
325
          [k: string]: unknown;
326
        };
327
        [k: string]: unknown;
328
      };
329
      link?: { [k: string]: unknown };
330
      paypal?: { billing_agreement_id?: string; [k: string]: unknown };
331
      sepa_debit?: {
332
        mandate_options?: { [k: string]: unknown };
333
        [k: string]: unknown;
334
      };
335
      us_bank_account?: {
336
        financial_connections?: {
337
          permissions?: (
338
            | "balances"
339
            | "ownership"
340
            | "payment_method"
341
            | "transactions"
342
          )[];
343
          prefetch?: ("balances" | "transactions")[];
344
          return_url?: string;
345
          [k: string]: unknown;
346
        };
347
        mandate_options?: {
348
          collection_method?: "" | "paper";
349
          [k: string]: unknown;
350
        };
351
        networks?: {
352
          requested?: ("ach" | "us_domestic_wire")[];
353
          [k: string]: unknown;
354
        };
355
        verification_method?: "automatic" | "instant" | "microdeposits";
356
        [k: string]: unknown;
357
      };
358
      [k: string]: unknown;
359
    };
360
    payment_method_types?: string[];
361
    return_url?: string;
362
    single_use?: { amount: number; currency: string; [k: string]: unknown };
363
    usage?: "off_session" | "on_session";
364
    use_stripe_sdk?: boolean;
365
  }
366
) {
367
  const url = new URL(`https://api.stripe.com/v1/setup_intents`);
368

369
  const response = await fetch(url, {
370
    method: "POST",
371
    headers: {
372
      "Content-Type": "application/x-www-form-urlencoded",
373
      Authorization: "Bearer " + auth.token,
374
    },
375
    body: encodeParams(body),
376
  });
377
  if (!response.ok) {
378
    const text = await response.text();
379
    throw new Error(`${response.status} ${text}`);
380
  }
381
  return await response.json();
382
}
383

384
function encodeParams(o: any) {
385
  function iter(o: any, path: string) {
386
    if (Array.isArray(o)) {
387
      o.forEach(function (a) {
388
        iter(a, path + "[]");
389
      });
390
      return;
391
    }
392
    if (o !== null && typeof o === "object") {
393
      Object.keys(o).forEach(function (k) {
394
        iter(o[k], path + "[" + k + "]");
395
      });
396
      return;
397
    }
398
    data.push(path + "=" + o);
399
  }
400
  const data: string[] = [];
401
  Object.keys(o).forEach(function (k) {
402
    if (o[k] !== undefined) {
403
      iter(o[k], k);
404
    }
405
  });
406
  return new URLSearchParams(data.join("&"));
407
}
408