Post payment links payment link

Updates a payment link.

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 links payment link
6
 * Updates a payment link.
7
 */
8
export async function main(
9
  auth: Stripe,
10
  payment_link: string,
11
  body: {
12
    active?: boolean;
13
    after_completion?: {
14
      hosted_confirmation?: { custom_message?: string; [k: string]: unknown };
15
      redirect?: { url: string; [k: string]: unknown };
16
      type: "hosted_confirmation" | "redirect";
17
      [k: string]: unknown;
18
    };
19
    allow_promotion_codes?: boolean;
20
    automatic_tax?: {
21
      enabled: boolean;
22
      liability?: {
23
        account?: string;
24
        type: "account" | "self";
25
        [k: string]: unknown;
26
      };
27
      [k: string]: unknown;
28
    };
29
    billing_address_collection?: "auto" | "required";
30
    custom_fields?:
31
      | {
32
          dropdown?: {
33
            options: { label: string; value: string; [k: string]: unknown }[];
34
            [k: string]: unknown;
35
          };
36
          key: string;
37
          label: { custom: string; type: "custom"; [k: string]: unknown };
38
          numeric?: {
39
            maximum_length?: number;
40
            minimum_length?: number;
41
            [k: string]: unknown;
42
          };
43
          optional?: boolean;
44
          text?: {
45
            maximum_length?: number;
46
            minimum_length?: number;
47
            [k: string]: unknown;
48
          };
49
          type: "dropdown" | "numeric" | "text";
50
          [k: string]: unknown;
51
        }[]
52
      | "";
53
    custom_text?: {
54
      after_submit?: { message: string; [k: string]: unknown } | "";
55
      shipping_address?: { message: string; [k: string]: unknown } | "";
56
      submit?: { message: string; [k: string]: unknown } | "";
57
      terms_of_service_acceptance?:
58
        | { message: string; [k: string]: unknown }
59
        | "";
60
      [k: string]: unknown;
61
    };
62
    customer_creation?: "always" | "if_required";
63
    expand?: string[];
64
    inactive_message?: string | "";
65
    invoice_creation?: {
66
      enabled: boolean;
67
      invoice_data?: {
68
        account_tax_ids?: string[] | "";
69
        custom_fields?:
70
          | { name: string; value: string; [k: string]: unknown }[]
71
          | "";
72
        description?: string;
73
        footer?: string;
74
        issuer?: {
75
          account?: string;
76
          type: "account" | "self";
77
          [k: string]: unknown;
78
        };
79
        metadata?: { [k: string]: string } | "";
80
        rendering_options?:
81
          | {
82
              amount_tax_display?: "" | "exclude_tax" | "include_inclusive_tax";
83
              [k: string]: unknown;
84
            }
85
          | "";
86
        [k: string]: unknown;
87
      };
88
      [k: string]: unknown;
89
    };
90
    line_items?: {
91
      adjustable_quantity?: {
92
        enabled: boolean;
93
        maximum?: number;
94
        minimum?: number;
95
        [k: string]: unknown;
96
      };
97
      id: string;
98
      quantity?: number;
99
      [k: string]: unknown;
100
    }[];
101
    metadata?: { [k: string]: string };
102
    payment_intent_data?: {
103
      description?: string | "";
104
      metadata?: { [k: string]: string } | "";
105
      statement_descriptor?: string | "";
106
      statement_descriptor_suffix?: string | "";
107
      transfer_group?: string | "";
108
      [k: string]: unknown;
109
    };
110
    payment_method_collection?: "always" | "if_required";
111
    payment_method_types?:
112
      | (
113
          | "affirm"
114
          | "afterpay_clearpay"
115
          | "alipay"
116
          | "au_becs_debit"
117
          | "bacs_debit"
118
          | "bancontact"
119
          | "blik"
120
          | "boleto"
121
          | "card"
122
          | "cashapp"
123
          | "eps"
124
          | "fpx"
125
          | "giropay"
126
          | "grabpay"
127
          | "ideal"
128
          | "klarna"
129
          | "konbini"
130
          | "link"
131
          | "oxxo"
132
          | "p24"
133
          | "paynow"
134
          | "paypal"
135
          | "pix"
136
          | "promptpay"
137
          | "sepa_debit"
138
          | "sofort"
139
          | "swish"
140
          | "us_bank_account"
141
          | "wechat_pay"
142
        )[]
143
      | "";
144
    restrictions?:
145
      | {
146
          completed_sessions: { limit: number; [k: string]: unknown };
147
          [k: string]: unknown;
148
        }
149
      | "";
150
    shipping_address_collection?:
151
      | {
152
          allowed_countries: (
153
            | "AC"
154
            | "AD"
155
            | "AE"
156
            | "AF"
157
            | "AG"
158
            | "AI"
159
            | "AL"
160
            | "AM"
161
            | "AO"
162
            | "AQ"
163
            | "AR"
164
            | "AT"
165
            | "AU"
166
            | "AW"
167
            | "AX"
168
            | "AZ"
169
            | "BA"
170
            | "BB"
171
            | "BD"
172
            | "BE"
173
            | "BF"
174
            | "BG"
175
            | "BH"
176
            | "BI"
177
            | "BJ"
178
            | "BL"
179
            | "BM"
180
            | "BN"
181
            | "BO"
182
            | "BQ"
183
            | "BR"
184
            | "BS"
185
            | "BT"
186
            | "BV"
187
            | "BW"
188
            | "BY"
189
            | "BZ"
190
            | "CA"
191
            | "CD"
192
            | "CF"
193
            | "CG"
194
            | "CH"
195
            | "CI"
196
            | "CK"
197
            | "CL"
198
            | "CM"
199
            | "CN"
200
            | "CO"
201
            | "CR"
202
            | "CV"
203
            | "CW"
204
            | "CY"
205
            | "CZ"
206
            | "DE"
207
            | "DJ"
208
            | "DK"
209
            | "DM"
210
            | "DO"
211
            | "DZ"
212
            | "EC"
213
            | "EE"
214
            | "EG"
215
            | "EH"
216
            | "ER"
217
            | "ES"
218
            | "ET"
219
            | "FI"
220
            | "FJ"
221
            | "FK"
222
            | "FO"
223
            | "FR"
224
            | "GA"
225
            | "GB"
226
            | "GD"
227
            | "GE"
228
            | "GF"
229
            | "GG"
230
            | "GH"
231
            | "GI"
232
            | "GL"
233
            | "GM"
234
            | "GN"
235
            | "GP"
236
            | "GQ"
237
            | "GR"
238
            | "GS"
239
            | "GT"
240
            | "GU"
241
            | "GW"
242
            | "GY"
243
            | "HK"
244
            | "HN"
245
            | "HR"
246
            | "HT"
247
            | "HU"
248
            | "ID"
249
            | "IE"
250
            | "IL"
251
            | "IM"
252
            | "IN"
253
            | "IO"
254
            | "IQ"
255
            | "IS"
256
            | "IT"
257
            | "JE"
258
            | "JM"
259
            | "JO"
260
            | "JP"
261
            | "KE"
262
            | "KG"
263
            | "KH"
264
            | "KI"
265
            | "KM"
266
            | "KN"
267
            | "KR"
268
            | "KW"
269
            | "KY"
270
            | "KZ"
271
            | "LA"
272
            | "LB"
273
            | "LC"
274
            | "LI"
275
            | "LK"
276
            | "LR"
277
            | "LS"
278
            | "LT"
279
            | "LU"
280
            | "LV"
281
            | "LY"
282
            | "MA"
283
            | "MC"
284
            | "MD"
285
            | "ME"
286
            | "MF"
287
            | "MG"
288
            | "MK"
289
            | "ML"
290
            | "MM"
291
            | "MN"
292
            | "MO"
293
            | "MQ"
294
            | "MR"
295
            | "MS"
296
            | "MT"
297
            | "MU"
298
            | "MV"
299
            | "MW"
300
            | "MX"
301
            | "MY"
302
            | "MZ"
303
            | "NA"
304
            | "NC"
305
            | "NE"
306
            | "NG"
307
            | "NI"
308
            | "NL"
309
            | "NO"
310
            | "NP"
311
            | "NR"
312
            | "NU"
313
            | "NZ"
314
            | "OM"
315
            | "PA"
316
            | "PE"
317
            | "PF"
318
            | "PG"
319
            | "PH"
320
            | "PK"
321
            | "PL"
322
            | "PM"
323
            | "PN"
324
            | "PR"
325
            | "PS"
326
            | "PT"
327
            | "PY"
328
            | "QA"
329
            | "RE"
330
            | "RO"
331
            | "RS"
332
            | "RU"
333
            | "RW"
334
            | "SA"
335
            | "SB"
336
            | "SC"
337
            | "SE"
338
            | "SG"
339
            | "SH"
340
            | "SI"
341
            | "SJ"
342
            | "SK"
343
            | "SL"
344
            | "SM"
345
            | "SN"
346
            | "SO"
347
            | "SR"
348
            | "SS"
349
            | "ST"
350
            | "SV"
351
            | "SX"
352
            | "SZ"
353
            | "TA"
354
            | "TC"
355
            | "TD"
356
            | "TF"
357
            | "TG"
358
            | "TH"
359
            | "TJ"
360
            | "TK"
361
            | "TL"
362
            | "TM"
363
            | "TN"
364
            | "TO"
365
            | "TR"
366
            | "TT"
367
            | "TV"
368
            | "TW"
369
            | "TZ"
370
            | "UA"
371
            | "UG"
372
            | "US"
373
            | "UY"
374
            | "UZ"
375
            | "VA"
376
            | "VC"
377
            | "VE"
378
            | "VG"
379
            | "VN"
380
            | "VU"
381
            | "WF"
382
            | "WS"
383
            | "XK"
384
            | "YE"
385
            | "YT"
386
            | "ZA"
387
            | "ZM"
388
            | "ZW"
389
            | "ZZ"
390
          )[];
391
          [k: string]: unknown;
392
        }
393
      | "";
394
    subscription_data?: {
395
      invoice_settings?: {
396
        issuer?: {
397
          account?: string;
398
          type: "account" | "self";
399
          [k: string]: unknown;
400
        };
401
        [k: string]: unknown;
402
      };
403
      metadata?: { [k: string]: string } | "";
404
      trial_settings?:
405
        | {
406
            end_behavior: {
407
              missing_payment_method: "cancel" | "create_invoice" | "pause";
408
              [k: string]: unknown;
409
            };
410
            [k: string]: unknown;
411
          }
412
        | "";
413
      [k: string]: unknown;
414
    };
415
  }
416
) {
417
  const url = new URL(
418
    `https://api.stripe.com/v1/payment_links/${payment_link}`
419
  );
420

421
  const response = await fetch(url, {
422
    method: "POST",
423
    headers: {
424
      "Content-Type": "application/x-www-form-urlencoded",
425
      Authorization: "Bearer " + auth.token,
426
    },
427
    body: encodeParams(body),
428
  });
429
  if (!response.ok) {
430
    const text = await response.text();
431
    throw new Error(`${response.status} ${text}`);
432
  }
433
  return await response.json();
434
}
435

436
function encodeParams(o: any) {
437
  function iter(o: any, path: string) {
438
    if (Array.isArray(o)) {
439
      o.forEach(function (a) {
440
        iter(a, path + "[]");
441
      });
442
      return;
443
    }
444
    if (o !== null && typeof o === "object") {
445
      Object.keys(o).forEach(function (k) {
446
        iter(o[k], path + "[" + k + "]");
447
      });
448
      return;
449
    }
450
    data.push(path + "=" + o);
451
  }
452
  const data: string[] = [];
453
  Object.keys(o).forEach(function (k) {
454
    if (o[k] !== undefined) {
455
      iter(o[k], k);
456
    }
457
  });
458
  return new URLSearchParams(data.join("&"));
459
}
460