1 | |
2 | type Paypal = { |
3 | clientId: string; |
4 | clientSecret: string; |
5 | }; |
6 |
|
7 | async function getToken(auth: Paypal): Promise<string> { |
8 | const url = new URL(`https://api-m.paypal.com/v1/oauth2/token`); |
9 | const response = await fetch(url, { |
10 | method: "POST", |
11 | headers: { |
12 | Authorization: `Basic ${btoa(`${auth.clientId}:${auth.clientSecret}`)}`, |
13 | }, |
14 | body: new URLSearchParams({ |
15 | grant_type: "client_credentials", |
16 | }), |
17 | }); |
18 | if (!response.ok) { |
19 | const text = await response.text(); |
20 | throw new Error(`Could not get token: ${response.status} ${text}`); |
21 | } |
22 | const json = await response.json(); |
23 | return json.access_token; |
24 | } |
25 | |
26 | * Create order |
27 | * Creates an order. Merchants and partners can add Level 2 and 3 data to payments to reduce risk and payment processing costs. For more information about processing payments, see checkout or multiparty checkout.Note: For error handling and troubleshooting, see Orders v2 errors. |
28 | */ |
29 | export async function main( |
30 | auth: Paypal, |
31 | PayPal_Request_Id: string, |
32 | PayPal_Partner_Attribution_Id: string, |
33 | PayPal_Client_Metadata_Id: string, |
34 | Prefer: string, |
35 | body: { |
36 | intent: "CAPTURE" | "AUTHORIZE"; |
37 | payer?: { email_address?: string; payer_id?: string } & { |
38 | name?: { |
39 | prefix?: string; |
40 | given_name?: string; |
41 | surname?: string; |
42 | middle_name?: string; |
43 | suffix?: string; |
44 | alternate_full_name?: string; |
45 | full_name?: string; |
46 | }; |
47 | phone?: { |
48 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
49 | phone_number: { |
50 | country_code: string; |
51 | national_number: string; |
52 | extension_number?: string; |
53 | }; |
54 | }; |
55 | birth_date?: string; |
56 | tax_info?: { tax_id: string; tax_id_type: "BR_CPF" | "BR_CNPJ" }; |
57 | address?: { |
58 | address_line_1?: string; |
59 | address_line_2?: string; |
60 | address_line_3?: string; |
61 | admin_area_4?: string; |
62 | admin_area_3?: string; |
63 | admin_area_2?: string; |
64 | admin_area_1?: string; |
65 | postal_code?: string; |
66 | country_code: string; |
67 | address_details?: { |
68 | street_number?: string; |
69 | street_name?: string; |
70 | street_type?: string; |
71 | delivery_service?: string; |
72 | building_name?: string; |
73 | sub_building?: string; |
74 | }; |
75 | }; |
76 | }; |
77 | purchase_units: { |
78 | reference_id?: string; |
79 | amount: { currency_code: string; value: string } & { |
80 | breakdown?: { |
81 | item_total?: { currency_code: string; value: string }; |
82 | shipping?: { currency_code: string; value: string }; |
83 | handling?: { currency_code: string; value: string }; |
84 | tax_total?: { currency_code: string; value: string }; |
85 | insurance?: { currency_code: string; value: string }; |
86 | shipping_discount?: { currency_code: string; value: string }; |
87 | discount?: { currency_code: string; value: string }; |
88 | }; |
89 | }; |
90 | payee?: { email_address?: string; merchant_id?: string } & {}; |
91 | payment_instruction?: { |
92 | platform_fees?: { |
93 | amount: { currency_code: string; value: string }; |
94 | payee?: { email_address?: string; merchant_id?: string }; |
95 | }[]; |
96 | disbursement_mode?: "INSTANT" | "DELAYED"; |
97 | payee_pricing_tier_id?: string; |
98 | payee_receivable_fx_rate_id?: string; |
99 | }; |
100 | description?: string; |
101 | custom_id?: string; |
102 | invoice_id?: string; |
103 | soft_descriptor?: string; |
104 | items?: { |
105 | name: string; |
106 | unit_amount: { currency_code: string; value: string }; |
107 | tax?: { currency_code: string; value: string }; |
108 | quantity: string; |
109 | description?: string; |
110 | sku?: string; |
111 | category?: "DIGITAL_GOODS" | "PHYSICAL_GOODS" | "DONATION"; |
112 | }[]; |
113 | shipping?: { |
114 | name?: { |
115 | prefix?: string; |
116 | given_name?: string; |
117 | surname?: string; |
118 | middle_name?: string; |
119 | suffix?: string; |
120 | alternate_full_name?: string; |
121 | full_name?: string; |
122 | }; |
123 | type?: |
124 | | "SHIPPING" |
125 | | "PICKUP_IN_PERSON" |
126 | | "PICKUP_IN_STORE" |
127 | | "PICKUP_FROM_PERSON"; |
128 | options?: { |
129 | id: string; |
130 | label: string; |
131 | type?: |
132 | | "SHIPPING" |
133 | | "PICKUP_IN_STORE" |
134 | | "PICKUP_FROM_PERSON" |
135 | | "PICKUP"; |
136 | amount?: { currency_code: string; value: string }; |
137 | selected: false | true; |
138 | }[]; |
139 | address?: { |
140 | address_line_1?: string; |
141 | address_line_2?: string; |
142 | address_line_3?: string; |
143 | admin_area_4?: string; |
144 | admin_area_3?: string; |
145 | admin_area_2?: string; |
146 | admin_area_1?: string; |
147 | postal_code?: string; |
148 | country_code: string; |
149 | address_details?: { |
150 | street_number?: string; |
151 | street_name?: string; |
152 | street_type?: string; |
153 | delivery_service?: string; |
154 | building_name?: string; |
155 | sub_building?: string; |
156 | }; |
157 | }; |
158 | }; |
159 | supplementary_data?: { |
160 | card?: { |
161 | level_2?: { |
162 | invoice_id?: string; |
163 | tax_total?: { currency_code: string; value: string }; |
164 | }; |
165 | level_3?: { |
166 | shipping_amount?: { currency_code: string; value: string }; |
167 | duty_amount?: { currency_code: string; value: string }; |
168 | discount_amount?: { currency_code: string; value: string }; |
169 | shipping_address?: { |
170 | address_line_1?: string; |
171 | address_line_2?: string; |
172 | address_line_3?: string; |
173 | admin_area_4?: string; |
174 | admin_area_3?: string; |
175 | admin_area_2?: string; |
176 | admin_area_1?: string; |
177 | postal_code?: string; |
178 | country_code: string; |
179 | address_details?: { |
180 | street_number?: string; |
181 | street_name?: string; |
182 | street_type?: string; |
183 | delivery_service?: string; |
184 | building_name?: string; |
185 | sub_building?: string; |
186 | }; |
187 | }; |
188 | ships_from_postal_code?: string; |
189 | line_items?: { |
190 | name: string; |
191 | unit_amount: { currency_code: string; value: string }; |
192 | tax?: { currency_code: string; value: string }; |
193 | quantity: string; |
194 | description?: string; |
195 | sku?: string; |
196 | category?: "DIGITAL_GOODS" | "PHYSICAL_GOODS" | "DONATION"; |
197 | } & { |
198 | commodity_code?: string; |
199 | discount_amount?: { currency_code: string; value: string }; |
200 | total_amount?: { currency_code: string; value: string }; |
201 | unit_of_measure?: string; |
202 | }[]; |
203 | }; |
204 | }; |
205 | }; |
206 | }[]; |
207 | payment_source?: { |
208 | card?: { |
209 | id?: string; |
210 | name?: string; |
211 | number?: string; |
212 | expiry?: string; |
213 | security_code?: string; |
214 | last_digits?: string; |
215 | card_type?: |
216 | | "VISA" |
217 | | "MASTERCARD" |
218 | | "DISCOVER" |
219 | | "AMEX" |
220 | | "SOLO" |
221 | | "JCB" |
222 | | "STAR" |
223 | | "DELTA" |
224 | | "SWITCH" |
225 | | "MAESTRO" |
226 | | "CB_NATIONALE" |
227 | | "CONFIGOGA" |
228 | | "CONFIDIS" |
229 | | "ELECTRON" |
230 | | "CETELEM" |
231 | | "CHINA_UNION_PAY"; |
232 | type?: "CREDIT" | "DEBIT" | "PREPAID" | "STORE" | "UNKNOWN"; |
233 | brand?: |
234 | | "VISA" |
235 | | "MASTERCARD" |
236 | | "DISCOVER" |
237 | | "AMEX" |
238 | | "SOLO" |
239 | | "JCB" |
240 | | "STAR" |
241 | | "DELTA" |
242 | | "SWITCH" |
243 | | "MAESTRO" |
244 | | "CB_NATIONALE" |
245 | | "CONFIGOGA" |
246 | | "CONFIDIS" |
247 | | "ELECTRON" |
248 | | "CETELEM" |
249 | | "CHINA_UNION_PAY"; |
250 | billing_address?: { |
251 | address_line_1?: string; |
252 | address_line_2?: string; |
253 | address_line_3?: string; |
254 | admin_area_4?: string; |
255 | admin_area_3?: string; |
256 | admin_area_2?: string; |
257 | admin_area_1?: string; |
258 | postal_code?: string; |
259 | country_code: string; |
260 | address_details?: { |
261 | street_number?: string; |
262 | street_name?: string; |
263 | street_type?: string; |
264 | delivery_service?: string; |
265 | building_name?: string; |
266 | sub_building?: string; |
267 | }; |
268 | }; |
269 | attributes?: { |
270 | customer?: { |
271 | id?: string; |
272 | email_address?: string; |
273 | phone?: { |
274 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
275 | phone_number: { |
276 | country_code: string; |
277 | national_number: string; |
278 | extension_number?: string; |
279 | }; |
280 | }; |
281 | }; |
282 | vault?: { store_in_vault?: "ON_SUCCESS" }; |
283 | }; |
284 | } & { |
285 | vault_id?: string; |
286 | stored_credential?: { |
287 | payment_initiator: "CUSTOMER" | "MERCHANT"; |
288 | payment_type: "ONE_TIME" | "RECURRING" | "UNSCHEDULED"; |
289 | usage?: "FIRST" | "SUBSEQUENT" | "DERIVED"; |
290 | previous_network_transaction_reference?: { |
291 | id: string; |
292 | date?: string; |
293 | network?: |
294 | | "VISA" |
295 | | "MASTERCARD" |
296 | | "DISCOVER" |
297 | | "AMEX" |
298 | | "SOLO" |
299 | | "JCB" |
300 | | "STAR" |
301 | | "DELTA" |
302 | | "SWITCH" |
303 | | "MAESTRO" |
304 | | "CB_NATIONALE" |
305 | | "CONFIGOGA" |
306 | | "CONFIDIS" |
307 | | "ELECTRON" |
308 | | "CETELEM" |
309 | | "CHINA_UNION_PAY"; |
310 | acquirer_reference_number?: string; |
311 | }; |
312 | }; |
313 | network_token?: { |
314 | number: string; |
315 | expiry: string; |
316 | cryptogram?: string; |
317 | eci_flag?: |
318 | | "MASTERCARD_NON_3D_SECURE_TRANSACTION" |
319 | | "MASTERCARD_ATTEMPTED_AUTHENTICATION_TRANSACTION" |
320 | | "MASTERCARD_FULLY_AUTHENTICATED_TRANSACTION" |
321 | | "FULLY_AUTHENTICATED_TRANSACTION" |
322 | | "ATTEMPTED_AUTHENTICATION_TRANSACTION" |
323 | | "NON_3D_SECURE_TRANSACTION"; |
324 | token_requestor_id?: string; |
325 | }; |
326 | experience_context?: { return_url?: string; cancel_url?: string }; |
327 | }; |
328 | token?: { id: string; type: "BILLING_AGREEMENT" }; |
329 | paypal?: { |
330 | vault_id?: string; |
331 | email_address?: string; |
332 | name?: { |
333 | prefix?: string; |
334 | given_name?: string; |
335 | surname?: string; |
336 | middle_name?: string; |
337 | suffix?: string; |
338 | full_name?: string; |
339 | }; |
340 | phone?: { |
341 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
342 | phone_number: { |
343 | country_code: string; |
344 | national_number: string; |
345 | extension_number?: string; |
346 | }; |
347 | }; |
348 | birth_date?: string; |
349 | tax_info?: { tax_id: string; tax_id_type: "BR_CPF" | "BR_CNPJ" }; |
350 | address?: { |
351 | address_line_1?: string; |
352 | address_line_2?: string; |
353 | address_line_3?: string; |
354 | admin_area_4?: string; |
355 | admin_area_3?: string; |
356 | admin_area_2?: string; |
357 | admin_area_1?: string; |
358 | postal_code?: string; |
359 | country_code: string; |
360 | address_details?: { |
361 | street_number?: string; |
362 | street_name?: string; |
363 | street_type?: string; |
364 | delivery_service?: string; |
365 | building_name?: string; |
366 | sub_building?: string; |
367 | }; |
368 | }; |
369 | attributes?: { |
370 | customer?: { |
371 | id?: string; |
372 | email_address?: string; |
373 | phone?: { |
374 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
375 | phone_number: { |
376 | country_code: string; |
377 | national_number: string; |
378 | extension_number?: string; |
379 | }; |
380 | }; |
381 | } & {}; |
382 | vault?: { store_in_vault?: "ON_SUCCESS" } & { |
383 | description?: string; |
384 | usage_pattern?: |
385 | | "IMMEDIATE" |
386 | | "DEFERRED" |
387 | | "RECURRING_PREPAID" |
388 | | "RECURRING_POSTPAID" |
389 | | "THRESHOLD_PREPAID" |
390 | | "THRESHOLD_POSTPAID"; |
391 | shipping?: { |
392 | name?: { |
393 | prefix?: string; |
394 | given_name?: string; |
395 | surname?: string; |
396 | middle_name?: string; |
397 | suffix?: string; |
398 | alternate_full_name?: string; |
399 | full_name?: string; |
400 | }; |
401 | type?: |
402 | | "SHIPPING" |
403 | | "PICKUP_IN_PERSON" |
404 | | "PICKUP_IN_STORE" |
405 | | "PICKUP_FROM_PERSON"; |
406 | options?: { |
407 | id: string; |
408 | label: string; |
409 | type?: |
410 | | "SHIPPING" |
411 | | "PICKUP_IN_STORE" |
412 | | "PICKUP_FROM_PERSON" |
413 | | "PICKUP"; |
414 | amount?: { currency_code: string; value: string }; |
415 | selected: false | true; |
416 | }[]; |
417 | address?: { |
418 | address_line_1?: string; |
419 | address_line_2?: string; |
420 | address_line_3?: string; |
421 | admin_area_4?: string; |
422 | admin_area_3?: string; |
423 | admin_area_2?: string; |
424 | admin_area_1?: string; |
425 | postal_code?: string; |
426 | country_code: string; |
427 | address_details?: { |
428 | street_number?: string; |
429 | street_name?: string; |
430 | street_type?: string; |
431 | delivery_service?: string; |
432 | building_name?: string; |
433 | sub_building?: string; |
434 | }; |
435 | }; |
436 | }; |
437 | usage_type?: "MERCHANT" | "PLATFORM"; |
438 | owner_id?: unknown; |
439 | customer_type?: "CONSUMER" | "BUSINESS"; |
440 | permit_multiple_payment_tokens?: false | true; |
441 | }; |
442 | }; |
443 | experience_context?: { |
444 | brand_name?: string; |
445 | locale?: string; |
446 | shipping_preference?: |
447 | | "GET_FROM_FILE" |
448 | | "NO_SHIPPING" |
449 | | "SET_PROVIDED_ADDRESS"; |
450 | return_url?: string; |
451 | cancel_url?: string; |
452 | landing_page?: "LOGIN" | "GUEST_CHECKOUT" | "NO_PREFERENCE"; |
453 | user_action?: "CONTINUE" | "PAY_NOW"; |
454 | payment_method_preference?: |
455 | | "UNRESTRICTED" |
456 | | "IMMEDIATE_PAYMENT_REQUIRED"; |
457 | }; |
458 | billing_agreement_id?: string; |
459 | }; |
460 | bancontact?: { |
461 | name: string; |
462 | country_code: string; |
463 | experience_context?: { |
464 | brand_name?: string; |
465 | locale?: string; |
466 | shipping_preference?: |
467 | | "GET_FROM_FILE" |
468 | | "NO_SHIPPING" |
469 | | "SET_PROVIDED_ADDRESS"; |
470 | return_url?: string; |
471 | cancel_url?: string; |
472 | }; |
473 | attributes?: {}; |
474 | }; |
475 | blik?: { |
476 | name: string; |
477 | country_code: string; |
478 | email?: string; |
479 | experience_context?: { |
480 | brand_name?: string; |
481 | locale?: string; |
482 | shipping_preference?: |
483 | | "GET_FROM_FILE" |
484 | | "NO_SHIPPING" |
485 | | "SET_PROVIDED_ADDRESS"; |
486 | return_url?: string; |
487 | cancel_url?: string; |
488 | } & { consumer_ip?: string; consumer_user_agent?: string }; |
489 | level_0?: { auth_code: string }; |
490 | one_click?: { |
491 | auth_code?: string; |
492 | consumer_reference: string; |
493 | alias_label?: string; |
494 | alias_key?: string; |
495 | }; |
496 | }; |
497 | eps?: { |
498 | name: string; |
499 | country_code: string; |
500 | experience_context?: { |
501 | brand_name?: string; |
502 | locale?: string; |
503 | shipping_preference?: |
504 | | "GET_FROM_FILE" |
505 | | "NO_SHIPPING" |
506 | | "SET_PROVIDED_ADDRESS"; |
507 | return_url?: string; |
508 | cancel_url?: string; |
509 | }; |
510 | }; |
511 | giropay?: { |
512 | name: string; |
513 | country_code: string; |
514 | experience_context?: { |
515 | brand_name?: string; |
516 | locale?: string; |
517 | shipping_preference?: |
518 | | "GET_FROM_FILE" |
519 | | "NO_SHIPPING" |
520 | | "SET_PROVIDED_ADDRESS"; |
521 | return_url?: string; |
522 | cancel_url?: string; |
523 | }; |
524 | }; |
525 | ideal?: { |
526 | name: string; |
527 | country_code: string; |
528 | bic?: string; |
529 | experience_context?: { |
530 | brand_name?: string; |
531 | locale?: string; |
532 | shipping_preference?: |
533 | | "GET_FROM_FILE" |
534 | | "NO_SHIPPING" |
535 | | "SET_PROVIDED_ADDRESS"; |
536 | return_url?: string; |
537 | cancel_url?: string; |
538 | }; |
539 | attributes?: {}; |
540 | }; |
541 | mybank?: { |
542 | name: string; |
543 | country_code: string; |
544 | experience_context?: { |
545 | brand_name?: string; |
546 | locale?: string; |
547 | shipping_preference?: |
548 | | "GET_FROM_FILE" |
549 | | "NO_SHIPPING" |
550 | | "SET_PROVIDED_ADDRESS"; |
551 | return_url?: string; |
552 | cancel_url?: string; |
553 | }; |
554 | }; |
555 | p24?: { |
556 | name: string; |
557 | email: string; |
558 | country_code: string; |
559 | experience_context?: { |
560 | brand_name?: string; |
561 | locale?: string; |
562 | shipping_preference?: |
563 | | "GET_FROM_FILE" |
564 | | "NO_SHIPPING" |
565 | | "SET_PROVIDED_ADDRESS"; |
566 | return_url?: string; |
567 | cancel_url?: string; |
568 | }; |
569 | }; |
570 | sofort?: { |
571 | name: string; |
572 | country_code: string; |
573 | experience_context?: { |
574 | brand_name?: string; |
575 | locale?: string; |
576 | shipping_preference?: |
577 | | "GET_FROM_FILE" |
578 | | "NO_SHIPPING" |
579 | | "SET_PROVIDED_ADDRESS"; |
580 | return_url?: string; |
581 | cancel_url?: string; |
582 | }; |
583 | }; |
584 | trustly?: { |
585 | name: string; |
586 | country_code: string; |
587 | experience_context?: { |
588 | brand_name?: string; |
589 | locale?: string; |
590 | shipping_preference?: |
591 | | "GET_FROM_FILE" |
592 | | "NO_SHIPPING" |
593 | | "SET_PROVIDED_ADDRESS"; |
594 | return_url?: string; |
595 | cancel_url?: string; |
596 | }; |
597 | }; |
598 | apple_pay?: { |
599 | id?: string; |
600 | name?: string; |
601 | email_address?: string; |
602 | phone_number?: { |
603 | country_code: string; |
604 | national_number: string; |
605 | extension_number?: string; |
606 | }; |
607 | decrypted_token?: { |
608 | transaction_amount?: { currency_code: string; value: string }; |
609 | tokenized_card: { |
610 | id?: string; |
611 | name?: string; |
612 | number?: string; |
613 | expiry?: string; |
614 | security_code?: string; |
615 | last_digits?: string; |
616 | card_type?: |
617 | | "VISA" |
618 | | "MASTERCARD" |
619 | | "DISCOVER" |
620 | | "AMEX" |
621 | | "SOLO" |
622 | | "JCB" |
623 | | "STAR" |
624 | | "DELTA" |
625 | | "SWITCH" |
626 | | "MAESTRO" |
627 | | "CB_NATIONALE" |
628 | | "CONFIGOGA" |
629 | | "CONFIDIS" |
630 | | "ELECTRON" |
631 | | "CETELEM" |
632 | | "CHINA_UNION_PAY"; |
633 | type?: "CREDIT" | "DEBIT" | "PREPAID" | "STORE" | "UNKNOWN"; |
634 | brand?: |
635 | | "VISA" |
636 | | "MASTERCARD" |
637 | | "DISCOVER" |
638 | | "AMEX" |
639 | | "SOLO" |
640 | | "JCB" |
641 | | "STAR" |
642 | | "DELTA" |
643 | | "SWITCH" |
644 | | "MAESTRO" |
645 | | "CB_NATIONALE" |
646 | | "CONFIGOGA" |
647 | | "CONFIDIS" |
648 | | "ELECTRON" |
649 | | "CETELEM" |
650 | | "CHINA_UNION_PAY"; |
651 | billing_address?: { |
652 | address_line_1?: string; |
653 | address_line_2?: string; |
654 | address_line_3?: string; |
655 | admin_area_4?: string; |
656 | admin_area_3?: string; |
657 | admin_area_2?: string; |
658 | admin_area_1?: string; |
659 | postal_code?: string; |
660 | country_code: string; |
661 | address_details?: { |
662 | street_number?: string; |
663 | street_name?: string; |
664 | street_type?: string; |
665 | delivery_service?: string; |
666 | building_name?: string; |
667 | sub_building?: string; |
668 | }; |
669 | }; |
670 | attributes?: { |
671 | customer?: { |
672 | id?: string; |
673 | email_address?: string; |
674 | phone?: { |
675 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
676 | phone_number: { |
677 | country_code: string; |
678 | national_number: string; |
679 | extension_number?: string; |
680 | }; |
681 | }; |
682 | }; |
683 | vault?: { store_in_vault?: "ON_SUCCESS" }; |
684 | }; |
685 | }; |
686 | device_manufacturer_id?: string; |
687 | payment_data_type?: "3DSECURE" | "EMV"; |
688 | payment_data?: { |
689 | cryptogram?: string; |
690 | eci_indicator?: string; |
691 | emv_data?: string; |
692 | pin?: string; |
693 | }; |
694 | }; |
695 | stored_credential?: { |
696 | payment_initiator: "CUSTOMER" | "MERCHANT"; |
697 | payment_type: "ONE_TIME" | "RECURRING" | "UNSCHEDULED"; |
698 | usage?: "FIRST" | "SUBSEQUENT" | "DERIVED"; |
699 | previous_network_transaction_reference?: { |
700 | id: string; |
701 | date?: string; |
702 | network?: |
703 | | "VISA" |
704 | | "MASTERCARD" |
705 | | "DISCOVER" |
706 | | "AMEX" |
707 | | "SOLO" |
708 | | "JCB" |
709 | | "STAR" |
710 | | "DELTA" |
711 | | "SWITCH" |
712 | | "MAESTRO" |
713 | | "CB_NATIONALE" |
714 | | "CONFIGOGA" |
715 | | "CONFIDIS" |
716 | | "ELECTRON" |
717 | | "CETELEM" |
718 | | "CHINA_UNION_PAY"; |
719 | acquirer_reference_number?: string; |
720 | }; |
721 | }; |
722 | vault_id?: string; |
723 | attributes?: unknown; |
724 | }; |
725 | google_pay?: {}; |
726 | venmo?: { |
727 | vault_id?: string; |
728 | email_address?: string; |
729 | experience_context?: { |
730 | brand_name?: string; |
731 | shipping_preference?: |
732 | | "GET_FROM_FILE" |
733 | | "NO_SHIPPING" |
734 | | "SET_PROVIDED_ADDRESS"; |
735 | }; |
736 | attributes?: { |
737 | customer?: { |
738 | id?: string; |
739 | email_address?: string; |
740 | phone?: { |
741 | phone_type?: "FAX" | "HOME" | "MOBILE" | "OTHER" | "PAGER"; |
742 | phone_number: { |
743 | country_code: string; |
744 | national_number: string; |
745 | extension_number?: string; |
746 | }; |
747 | }; |
748 | }; |
749 | vault?: { store_in_vault: "ON_SUCCESS" } & { |
750 | description?: string; |
751 | usage_pattern?: |
752 | | "IMMEDIATE" |
753 | | "DEFERRED" |
754 | | "RECURRING_PREPAID" |
755 | | "RECURRING_POSTPAID" |
756 | | "THRESHOLD_PREPAID" |
757 | | "THRESHOLD_POSTPAID"; |
758 | usage_type?: "MERCHANT" | "PLATFORM"; |
759 | customer_type?: "CONSUMER" | "BUSINESS"; |
760 | permit_multiple_payment_tokens?: false | true; |
761 | }; |
762 | }; |
763 | }; |
764 | }; |
765 | application_context?: { |
766 | brand_name?: string; |
767 | locale?: string; |
768 | landing_page?: "LOGIN" | "NO_PREFERENCE" | "BILLING"; |
769 | shipping_preference?: |
770 | | "GET_FROM_FILE" |
771 | | "NO_SHIPPING" |
772 | | "SET_PROVIDED_ADDRESS"; |
773 | user_action?: "CONTINUE" | "PAY_NOW"; |
774 | payment_method?: { |
775 | payee_preferred?: "UNRESTRICTED" | "IMMEDIATE_PAYMENT_REQUIRED"; |
776 | standard_entry_class_code?: "TEL" | "WEB" | "CCD" | "PPD"; |
777 | }; |
778 | return_url?: string; |
779 | cancel_url?: string; |
780 | stored_payment_source?: { |
781 | payment_initiator: "CUSTOMER" | "MERCHANT"; |
782 | payment_type: "ONE_TIME" | "RECURRING" | "UNSCHEDULED"; |
783 | usage?: "FIRST" | "SUBSEQUENT" | "DERIVED"; |
784 | previous_network_transaction_reference?: { |
785 | id: string; |
786 | date?: string; |
787 | network?: |
788 | | "VISA" |
789 | | "MASTERCARD" |
790 | | "DISCOVER" |
791 | | "AMEX" |
792 | | "SOLO" |
793 | | "JCB" |
794 | | "STAR" |
795 | | "DELTA" |
796 | | "SWITCH" |
797 | | "MAESTRO" |
798 | | "CB_NATIONALE" |
799 | | "CONFIGOGA" |
800 | | "CONFIDIS" |
801 | | "ELECTRON" |
802 | | "CETELEM" |
803 | | "CHINA_UNION_PAY"; |
804 | acquirer_reference_number?: string; |
805 | }; |
806 | }; |
807 | }; |
808 | }, |
809 | ) { |
810 | const token = await getToken(auth); |
811 | const url = new URL(`https://api-m.paypal.com/v2/checkout/orders`); |
812 |
|
813 | const response = await fetch(url, { |
814 | method: "POST", |
815 | headers: { |
816 | "PayPal-Request-Id": PayPal_Request_Id, |
817 | "PayPal-Partner-Attribution-Id": PayPal_Partner_Attribution_Id, |
818 | "PayPal-Client-Metadata-Id": PayPal_Client_Metadata_Id, |
819 | Prefer: Prefer, |
820 | "Content-Type": "application/json", |
821 | Authorization: "Bearer " + token, |
822 | }, |
823 | body: JSON.stringify(body), |
824 | }); |
825 | if (!response.ok) { |
826 | const text = await response.text(); |
827 | throw new Error(`${response.status} ${text}`); |
828 | } |
829 | return await response.json(); |
830 | } |
831 |
|