0

Update plan

by
Published Apr 8, 2025

Updates a plan with the `CREATED` or `ACTIVE` status. For an `INACTIVE` plan, you can make only status updates.You can patch these attributes and objects:Attribute or objectOperationsdescriptionreplacepayment_preferences.auto_bill_outstandingreplacetaxes.percentagereplacepayment_preferences.payment_failure_thresholdreplacepayment_preferences.setup_feereplacepayment_preferences.setup_fee_failure_actionreplacenamereplace

Script paypal Verified

The script

Submitted by hugo697 Bun
Verified 428 days ago
1
//native
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
 * Update plan
27
 * Updates a plan with the `CREATED` or `ACTIVE` status. For an `INACTIVE` plan, you can make only status updates.You can patch these attributes and objects:Attribute or objectOperationsdescriptionreplacepayment_preferences.auto_bill_outstandingreplacetaxes.percentagereplacepayment_preferences.payment_failure_thresholdreplacepayment_preferences.setup_feereplacepayment_preferences.setup_fee_failure_actionreplacenamereplace
28
 */
29
export async function main(
30
  auth: Paypal,
31
  id: string,
32
  body: {
33
    op: "add" | "remove" | "replace" | "move" | "copy" | "test";
34
    path?: string;
35
    value?: {};
36
    from?: string;
37
  }[],
38
) {
39
  const token = await getToken(auth);
40
  const url = new URL(`https://api-m.paypal.com/v1/billing/plans/${id}`);
41

42
  const response = await fetch(url, {
43
    method: "PATCH",
44
    headers: {
45
      "Content-Type": "application/json",
46
      Authorization: "Bearer " + token,
47
    },
48
    body: JSON.stringify(body),
49
  });
50
  if (!response.ok) {
51
    const text = await response.text();
52
    throw new Error(`${response.status} ${text}`);
53
  }
54
  return await response.json();
55
}
56