跳到主要內容

訂閱項目

訂閱項目代表客戶訂閱的特定產品和價格。它們是訂閱的組成部分,對於管理週期性計費至關重要,尤其是對於計量用量的方案。

訂閱項目代表客戶訂閱的特定產品和價格。它們是訂閱的組成部分,對於管理週期性計費至關重要,尤其是對於計量用量的方案。

此 API 允許您建立、擷取、更新和刪除訂閱項目。關鍵的是,它還提供了回報計量計費用量的方法。

訂閱項目物件

訂閱項目物件包含訂閱中特定項目的詳細資訊。

TSubscriptionItemExpanded 物件

typescript
interface TSubscriptionItemExpanded {
  id: string; // 訂閱項目的唯一識別碼
  subscription_id: string; // 此項目所屬訂閱的 ID
  price_id: string; // 與此項目關聯的價格 ID
  quantity: number; // 價格的數量
  billing_thresholds: object | null; // 基於用量的計費閾值
  metadata: object | null; // 一組用於附加資訊的鍵值對
  created_at: number; // 建立時間戳
  updated_at: number; // 最後更新時間戳
  price: TPrice; // 展開的 Price 物件
}

建立訂閱項目

將新項目(產品和價格)新增至現有訂閱中。

建立訂閱項目

javascript
const subscriptionItem = await payment.subscriptionItems.create({
  subscription_id: 'sub_xxxxxxxxxxxxxx',
  price_id: 'price_xxxxxxxxxxxxxx',
  quantity: 1,
});

參數

NameTypeDescription
subscription_idstring必填。 要新增此項目的訂閱 ID。
price_idstring必填。 客戶要訂閱的價格 ID。
quantitynumber價格的數量。預設為 1
billing_thresholdsobject此項目的基於用量的計費閾值。
metadataobject一組您可以附加到物件上的鍵值對。這對於以結構化格式儲存有關物件的附加資訊很有用。

傳回值

傳回新建立的 TSubscriptionItem 物件。

擷取訂閱項目

擷取現有訂閱項目的詳細資訊。

擷取訂閱項目

javascript
const subscriptionItem = await payment.subscriptionItems.retrieve(
  'si_xxxxxxxxxxxxxx' // 訂閱項目 ID
);

參數

NameTypeDescription
idstring必填。 要擷取的訂閱項目的唯一識別碼。

傳回值

如果提供了有效的 ID,則傳回 TSubscriptionItemExpanded 物件。

更新訂閱項目

更新訂閱項目的屬性。您可以更新 price_idquantitymetadata

更新訂閱項目

javascript
const subscriptionItem = await payment.subscriptionItems.update(
  'si_xxxxxxxxxxxxxx', // 訂閱項目 ID
  {
    quantity: 2,
  }
);

參數

NameTypeDescription
idstring必填。 要更新的訂閱項目 ID。
updatesobject包含要更新欄位的物件。

可更新欄位

NameTypeDescription
price_idstring此項目的新價格 ID。
quantitynumber此項目的新數量。
billing_thresholdsobject此項目的基於用量的計費閾值。
metadataobject要更新的一組鍵值對。

傳回值

傳回更新後的 TSubscriptionItem 物件。

列出訂閱項目

傳回指定訂閱的訂閱項目列表。

列出訂閱項目

javascript
const subscriptionItems = await payment.subscriptionItems.list({
  subscription_id: 'sub_xxxxxxxxxxxxxx',
});

參數

NameTypeDescription
subscription_idstring必填。 您要列出其項目的訂閱 ID。
pagenumber分頁的頁碼。預設為 1
pageSizenumber每頁傳回的項目數。預設為 20

傳回值

TSubscriptionItemExpanded 物件的分頁列表。

刪除訂閱項目

從訂閱中刪除一個項目。此為永久性操作。

刪除訂閱項目

javascript
const deletedItem = await payment.subscriptionItems.del(
  'si_xxxxxxxxxxxxxx', // 訂閱項目 ID
  {
    clear_usage: true, // 可選
  }
);

參數

NameTypeDescription
idstring必填。 要刪除的訂閱項目 ID。
body.clear_usageboolean如果為 true,計量價格的所有用量記錄將被清除。預設為 false

傳回值

傳回已刪除的 TSubscriptionItem 物件。

建立用量記錄

對於 metered(計量)價格,您必須回報用量才能正確地向客戶收費。此方法會為指定的訂閱項目建立一筆用量記錄。

建立用量記錄

javascript
const usageRecord = await payment.subscriptionItems.createUsageRecord({
  subscription_item_id: 'si_xxxxxxxxxxxxxx',
  quantity: 100,
  action: 'increment',
  timestamp: Math.floor(Date.now() / 1000),
});

參數

NameTypeDescription
subscription_item_idstring必填。 要回報用量的訂閱項目 ID。
quantitynumber必填。 要回報的用量數量。必須為正整數。
actionstring決定如何應用回報的 quantity。可以是 increment(增加到現有用量)或 set(在指定時間戳覆寫用量)。預設為 increment
timestampnumber用量事件的 UNIX 時間戳。必須在當前計費週期內。預設為當前時間。

傳回值

傳回已建立的 TUsageRecord 物件。

列出用量記錄摘要

對於指定的訂閱項目,傳回按計費週期(發票)匯總的用量記錄摘要列表。

列出用量記錄摘要

javascript
const summaries = await payment.subscriptionItems.listUsageRecordSummaries({
  subscription_item_id: 'si_xxxxxxxxxxxxxx',
});

參數

NameTypeDescription
subscription_item_idstring必填。 訂閱項目的 ID。
pagenumber分頁的頁碼。預設為 1
pageSizenumber每頁傳回的項目數。預設為 20

傳回值

TUsageRecordSummary 物件的分頁列表。

TUsageRecordSummary 物件

typescript
interface TUsageRecordSummary {
  invoice_id: string; // 此週期的發票 ID
  subscription_item_id: string;
  total_usage: number; // 此週期的總用量
  period: {
    start: number; // 計費週期開始時間(UNIX 時間戳)
    end: number; // 計費週期結束時間(UNIX 時間戳)
  };
}

列出用量記錄

擷取訂閱項目的個別用量記錄列表。這提供了所有已回報用量的詳細、非匯總視圖。

列出用量記錄

javascript
const records = await payment.subscriptionItems.listUsageRecords({
  subscription_item_id: 'si_xxxxxxxxxxxxxx',
});

參數

NameTypeDescription
subscription_item_idstring必填。 訂閱項目的 ID。
startnumber用於篩選此時間之後用量記錄的 UNIX 時間戳。
endnumber用於篩選此時間之前或此時間點用量記錄的 UNIX 時間戳。
pagenumber分頁的頁碼。預設為 1
pageSizenumber每頁傳回的項目數。預設為 20

傳回值

TUsageRecord 物件的分頁列表。

TUsageRecord 物件

typescript
interface TUsageRecord {
  id: string;
  subscription_item_id: string;
  quantity: number;
  timestamp: number; // 記錄的 UNIX 時間戳
  billed: boolean; // 此用量是否已計費
}