0

Retrieve Checkout Session Line Items

by
Published Oct 30, 2023

List the line items of a Checkout Session. Returns one page (`limit` 1-100, default 10); pass the last object's id as `starting_after` for the next page while `has_more` is true.

Script stripe Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 2 hours ago
1
//native
2

3
/**
4
 * Retrieve Checkout Session Line Items
5
 * List the line items of a Checkout Session. Returns one page (`limit` 1-100, default 10); pass the last object's id as `starting_after` for the next page while `has_more` is true.
6
 */
7
export async function main(
8
  auth: RT.Stripe,
9
  session_id: string,
10
  limit: number | undefined,
11
  starting_after: string | undefined,
12
  ending_before: string | undefined
13
) {
14
  const url = new URL(
15
    `https://api.stripe.com/v1/checkout/sessions/${session_id}/line_items`
16
  )
17
  url.search = toForm({ limit, starting_after, ending_before }).toString()
18

19
  const response = await fetch(url, {
20
    headers: {
21
      Authorization: `Bearer ${auth.token}`,
22
      Accept: "application/json",
23
      "Stripe-Version": "2025-03-31.basil",
24
    },
25
  })
26

27
  if (!response.ok) {
28
    throw new Error(`${response.status} ${await response.text()}`)
29
  }
30

31
  return await response.json()
32
}
33

34
// Stripe takes form-encoded params with bracketed nesting: metadata[key]=v, items[0][price]=p
35
function toForm(
36
  params: { [key: string]: any },
37
  prefix = "",
38
  out = new URLSearchParams()
39
) {
40
  for (const [key, value] of Object.entries(params)) {
41
    if (value == null || value === "") continue
42
    const name = prefix ? `${prefix}[${key}]` : key
43
    if (typeof value === "object") toForm(value, name, out)
44
    else out.append(name, String(value))
45
  }
46
  return out
47
}
48

Other submissions
  • Submitted by hugo697 Typescript (fetch-only)
    Created 528 days ago
    1
    type Stripe = {
    2
      token: string;
    3
    };
    4
    /**
    5
     * Get checkout sessions session line items
    6
     * When retrieving a Checkout Session, there is an includable line_items property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items.
    7
     */
    8
    export async function main(
    9
      auth: Stripe,
    10
      session: string,
    11
      ending_before: string | undefined,
    12
      expand: any,
    13
      limit: string | undefined,
    14
      starting_after: string | undefined
    15
    ) {
    16
      const url = new URL(
    17
        `https://api.stripe.com/v1/checkout/sessions/${session}/line_items`
    18
      );
    19
      for (const [k, v] of [
    20
        ["ending_before", ending_before],
    21
        ["limit", limit],
    22
        ["starting_after", starting_after],
    23
      ]) {
    24
        if (v !== undefined && v !== "") {
    25
          url.searchParams.append(k, v);
    26
        }
    27
      }
    28
      encodeParams({ expand }).forEach((v, k) => {
    29
        if (v !== undefined && v !== "") {
    30
          url.searchParams.append(k, v);
    31
        }
    32
      });
    33
      const response = await fetch(url, {
    34
        method: "GET",
    35
        headers: {
    36
          "Content-Type": "application/x-www-form-urlencoded",
    37
          Authorization: "Bearer " + auth.token,
    38
        },
    39
        body: undefined,
    40
      });
    41
      if (!response.ok) {
    42
        const text = await response.text();
    43
        throw new Error(`${response.status} ${text}`);
    44
      }
    45
      return await response.json();
    46
    }
    47
    
    
    48
    function encodeParams(o: any) {
    49
      function iter(o: any, path: string) {
    50
        if (Array.isArray(o)) {
    51
          o.forEach(function (a) {
    52
            iter(a, path + "[]");
    53
          });
    54
          return;
    55
        }
    56
        if (o !== null && typeof o === "object") {
    57
          Object.keys(o).forEach(function (k) {
    58
            iter(o[k], path + "[" + k + "]");
    59
          });
    60
          return;
    61
        }
    62
        data.push(path + "=" + o);
    63
      }
    64
      const data: string[] = [];
    65
      Object.keys(o).forEach(function (k) {
    66
        if (o[k] !== undefined) {
    67
          iter(o[k], k);
    68
        }
    69
      });
    70
      return new URLSearchParams(data.join("&"));
    71
    }
    72