Post payment methods

Creates a PaymentMethod object. Read the Stripe.js reference to learn how to create PaymentMethods via Stripe.js. Instead of creating a PaymentMethod directly, we recommend using the PaymentIntents API to accept a payment immediately or the SetupIntent API to collect payment method details ahead of a future payment.

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 methods
6
 * Creates a PaymentMethod object. Read the Stripe.js reference to learn how to create PaymentMethods via Stripe.js.
7

8
Instead of creating a PaymentMethod directly, we recommend using the PaymentIntents API to accept a payment immediately or the SetupIntent API to collect payment method details ahead of a future payment.
9
 */
10
export async function main(
11
  auth: Stripe,
12
  body: {
13
    acss_debit?: {
14
      account_number: string;
15
      institution_number: string;
16
      transit_number: string;
17
      [k: string]: unknown;
18
    };
19
    affirm?: { [k: string]: unknown };
20
    afterpay_clearpay?: { [k: string]: unknown };
21
    alipay?: { [k: string]: unknown };
22
    au_becs_debit?: {
23
      account_number: string;
24
      bsb_number: string;
25
      [k: string]: unknown;
26
    };
27
    bacs_debit?: {
28
      account_number?: string;
29
      sort_code?: string;
30
      [k: string]: unknown;
31
    };
32
    bancontact?: { [k: string]: unknown };
33
    billing_details?: {
34
      address?:
35
        | {
36
            city?: string;
37
            country?: string;
38
            line1?: string;
39
            line2?: string;
40
            postal_code?: string;
41
            state?: string;
42
            [k: string]: unknown;
43
          }
44
        | "";
45
      email?: string | "";
46
      name?: string | "";
47
      phone?: string | "";
48
      [k: string]: unknown;
49
    };
50
    blik?: { [k: string]: unknown };
51
    boleto?: { tax_id: string; [k: string]: unknown };
52
    card?:
53
      | {
54
          cvc?: string;
55
          exp_month: number;
56
          exp_year: number;
57
          networks?: {
58
            preferred?: "cartes_bancaires" | "mastercard" | "visa";
59
            [k: string]: unknown;
60
          };
61
          number: string;
62
          [k: string]: unknown;
63
        }
64
      | { token: string; [k: string]: unknown };
65
    cashapp?: { [k: string]: unknown };
66
    customer?: string;
67
    customer_balance?: { [k: string]: unknown };
68
    eps?: {
69
      bank?:
70
        | "arzte_und_apotheker_bank"
71
        | "austrian_anadi_bank_ag"
72
        | "bank_austria"
73
        | "bankhaus_carl_spangler"
74
        | "bankhaus_schelhammer_und_schattera_ag"
75
        | "bawag_psk_ag"
76
        | "bks_bank_ag"
77
        | "brull_kallmus_bank_ag"
78
        | "btv_vier_lander_bank"
79
        | "capital_bank_grawe_gruppe_ag"
80
        | "deutsche_bank_ag"
81
        | "dolomitenbank"
82
        | "easybank_ag"
83
        | "erste_bank_und_sparkassen"
84
        | "hypo_alpeadriabank_international_ag"
85
        | "hypo_bank_burgenland_aktiengesellschaft"
86
        | "hypo_noe_lb_fur_niederosterreich_u_wien"
87
        | "hypo_oberosterreich_salzburg_steiermark"
88
        | "hypo_tirol_bank_ag"
89
        | "hypo_vorarlberg_bank_ag"
90
        | "marchfelder_bank"
91
        | "oberbank_ag"
92
        | "raiffeisen_bankengruppe_osterreich"
93
        | "schoellerbank_ag"
94
        | "sparda_bank_wien"
95
        | "volksbank_gruppe"
96
        | "volkskreditbank_ag"
97
        | "vr_bank_braunau";
98
      [k: string]: unknown;
99
    };
100
    expand?: string[];
101
    fpx?: {
102
      bank:
103
        | "affin_bank"
104
        | "agrobank"
105
        | "alliance_bank"
106
        | "ambank"
107
        | "bank_islam"
108
        | "bank_muamalat"
109
        | "bank_of_china"
110
        | "bank_rakyat"
111
        | "bsn"
112
        | "cimb"
113
        | "deutsche_bank"
114
        | "hong_leong_bank"
115
        | "hsbc"
116
        | "kfh"
117
        | "maybank2e"
118
        | "maybank2u"
119
        | "ocbc"
120
        | "pb_enterprise"
121
        | "public_bank"
122
        | "rhb"
123
        | "standard_chartered"
124
        | "uob";
125
      [k: string]: unknown;
126
    };
127
    giropay?: { [k: string]: unknown };
128
    grabpay?: { [k: string]: unknown };
129
    ideal?: {
130
      bank?:
131
        | "abn_amro"
132
        | "asn_bank"
133
        | "bunq"
134
        | "handelsbanken"
135
        | "ing"
136
        | "knab"
137
        | "moneyou"
138
        | "n26"
139
        | "nn"
140
        | "rabobank"
141
        | "regiobank"
142
        | "revolut"
143
        | "sns_bank"
144
        | "triodos_bank"
145
        | "van_lanschot"
146
        | "yoursafe";
147
      [k: string]: unknown;
148
    };
149
    interac_present?: { [k: string]: unknown };
150
    klarna?: {
151
      dob?: { day: number; month: number; year: number; [k: string]: unknown };
152
      [k: string]: unknown;
153
    };
154
    konbini?: { [k: string]: unknown };
155
    link?: { [k: string]: unknown };
156
    metadata?: { [k: string]: string };
157
    oxxo?: { [k: string]: unknown };
158
    p24?: {
159
      bank?:
160
        | "alior_bank"
161
        | "bank_millennium"
162
        | "bank_nowy_bfg_sa"
163
        | "bank_pekao_sa"
164
        | "banki_spbdzielcze"
165
        | "blik"
166
        | "bnp_paribas"
167
        | "boz"
168
        | "citi_handlowy"
169
        | "credit_agricole"
170
        | "envelobank"
171
        | "etransfer_pocztowy24"
172
        | "getin_bank"
173
        | "ideabank"
174
        | "ing"
175
        | "inteligo"
176
        | "mbank_mtransfer"
177
        | "nest_przelew"
178
        | "noble_pay"
179
        | "pbac_z_ipko"
180
        | "plus_bank"
181
        | "santander_przelew24"
182
        | "tmobile_usbugi_bankowe"
183
        | "toyota_bank"
184
        | "velobank"
185
        | "volkswagen_bank";
186
      [k: string]: unknown;
187
    };
188
    payment_method?: string;
189
    paynow?: { [k: string]: unknown };
190
    paypal?: { [k: string]: unknown };
191
    pix?: { [k: string]: unknown };
192
    promptpay?: { [k: string]: unknown };
193
    radar_options?: { session?: string; [k: string]: unknown };
194
    revolut_pay?: { [k: string]: unknown };
195
    sepa_debit?: { iban: string; [k: string]: unknown };
196
    sofort?: {
197
      country: "AT" | "BE" | "DE" | "ES" | "IT" | "NL";
198
      [k: string]: unknown;
199
    };
200
    swish?: { [k: string]: unknown };
201
    type?:
202
      | "acss_debit"
203
      | "affirm"
204
      | "afterpay_clearpay"
205
      | "alipay"
206
      | "au_becs_debit"
207
      | "bacs_debit"
208
      | "bancontact"
209
      | "blik"
210
      | "boleto"
211
      | "card"
212
      | "cashapp"
213
      | "customer_balance"
214
      | "eps"
215
      | "fpx"
216
      | "giropay"
217
      | "grabpay"
218
      | "ideal"
219
      | "klarna"
220
      | "konbini"
221
      | "link"
222
      | "oxxo"
223
      | "p24"
224
      | "paynow"
225
      | "paypal"
226
      | "pix"
227
      | "promptpay"
228
      | "revolut_pay"
229
      | "sepa_debit"
230
      | "sofort"
231
      | "swish"
232
      | "us_bank_account"
233
      | "wechat_pay"
234
      | "zip";
235
    us_bank_account?: {
236
      account_holder_type?: "company" | "individual";
237
      account_number?: string;
238
      account_type?: "checking" | "savings";
239
      financial_connections_account?: string;
240
      routing_number?: string;
241
      [k: string]: unknown;
242
    };
243
    wechat_pay?: { [k: string]: unknown };
244
    zip?: { [k: string]: unknown };
245
  }
246
) {
247
  const url = new URL(`https://api.stripe.com/v1/payment_methods`);
248

249
  const response = await fetch(url, {
250
    method: "POST",
251
    headers: {
252
      "Content-Type": "application/x-www-form-urlencoded",
253
      Authorization: "Bearer " + auth.token,
254
    },
255
    body: encodeParams(body),
256
  });
257
  if (!response.ok) {
258
    const text = await response.text();
259
    throw new Error(`${response.status} ${text}`);
260
  }
261
  return await response.json();
262
}
263

264
function encodeParams(o: any) {
265
  function iter(o: any, path: string) {
266
    if (Array.isArray(o)) {
267
      o.forEach(function (a) {
268
        iter(a, path + "[]");
269
      });
270
      return;
271
    }
272
    if (o !== null && typeof o === "object") {
273
      Object.keys(o).forEach(function (k) {
274
        iter(o[k], path + "[" + k + "]");
275
      });
276
      return;
277
    }
278
    data.push(path + "=" + o);
279
  }
280
  const data: string[] = [];
281
  Object.keys(o).forEach(function (k) {
282
    if (o[k] !== undefined) {
283
      iter(o[k], k);
284
    }
285
  });
286
  return new URLSearchParams(data.join("&"));
287
}
288