跳到主要內容

PaymentSummary

PaymentSummary 元件是任何結帳流程中至關重要的 UI 元素。它提供了訂單的詳細明細,包括所有訂單項目、試用期資訊、質押要求以及最終總金額。它的設計具有響應性,並能適應行動裝置的佈局。

這個元件與 ProductItemProductDonation 協同工作,以呈現購物車中的每個項目,並處理使用者互動,例如應用交叉銷售或更改數量。

Props

PaymentSummary 元件接受以下 props 以自訂其行為和顯示:

PropTypeRequiredDescription
itemsTLineItemExpanded[]要在摘要中顯示的訂單項目陣列。
currencyTPaymentCurrency用於格式化金額的貨幣物件。
trialInDaysnumber循環訂閱的試用天數。
billingThresholdnumber帳單門檻金額。如果適用,用於質押計算。
trialEndnumber試用結束時的 Unix 時間戳。會覆寫 trialInDays
showStakingboolean若為 true,則顯示質押詳細資訊。預設為 false
onUpsell(from: string, to: string) => void當使用者接受追加銷售優惠時的回呼函式。
onDownsell(from: string) => void當使用者還原追加銷售優惠時的回呼函式。
onQuantityChange(itemId: string, quantity: number) => void當項目數量變更時的回呼函式。
onChangeAmount(itemId: string, amount: string) => void用於更改自訂金額項目(如捐贈)金額的回呼。
onApplyCrossSell(crossSellId: string) => void當使用者新增交叉銷售項目時的回呼函式。
onCancelCrossSell() => void當使用者移除交叉銷售項目時的回呼函式。
checkoutSessionIdstring結帳會話的 ID,用於獲取潛在的交叉銷售項目。
crossSellBehaviorstring定義交叉銷售項目的行為(例如:'required')。
donationSettingsDonationSettings捐贈項目的設定。
actionstring摘要區塊的自訂標題,取代「訂單摘要」。
completedboolean若為 true,則停用數量調整等互動元素。預設為 false

用法

PaymentSummary 元件應放置在 PaymentProvider 內,通常作為更大型結帳表單的一部分使用。您需要為其提供訂單項目和貨幣資訊。

這是一個如何整合 PaymentSummary 元件的基本範例。

PaymentSummary Example

tsx
import React from 'react';
import { PaymentProvider, PaymentSummary } from '@blocklet/payment-react';
import { useSessionContext } from '../hooks/session-context'; // 您的 session context hook

// 用於示範的模擬資料
const mockCurrency = {
  id: 'usd_4573516104843264',
  symbol: '$',
  name: 'USD',
  decimal: 2,
  isDefault: true,
};

const mockItems = [
  {
    id: 'li_1',
    price_id: 'price_1',
    quantity: 1,
    adjustable_quantity: { enabled: true, minimum: 1, maximum: 10 },
    price: {
      id: 'price_1',
      type: 'recurring',
      recurring: { interval: 'month', interval_count: 1, usage_type: 'licensed' },
      unit_amount: '2000',
      product: {
        name: 'Pro Plan',
        images: [],
      },
    },
  },
];

export default function MyCheckoutPage() {
  const { session, connectApi } = useSessionContext();

  const handleQuantityChange = (itemId, newQuantity) => {
    console.log(`Item ${itemId} quantity changed to ${newQuantity}`);
    // 在這裡您通常會更新您的狀態並重新獲取結帳資訊
  };

  return (
    <PaymentProvider session={session} connectApi={connectApi}>
      <PaymentSummary
        items={mockItems}
        currency={mockCurrency}
        trialInDays={14}
        billingThreshold={0}
        showStaking={true}
        onQuantityChange={handleQuantityChange}
      />
    </PaymentProvider>
  );
}

顯示質押與總計

如果 showStaking 設定為 true,該元件將計算並顯示循環項目所需的質押金額。它會將立即支付的金額與質押所需的金額分開,為使用者提供清晰的財務摘要。最終總額是這些金額的總和。

處理試用期

該元件會向使用者清楚地傳達試用期資訊。透過傳遞 trialInDaystrialEnd,總額下方將顯示類似「之後每月 $20.00」的訊息,告知使用者試用結束後的循環收費。

互動功能

  • 數量調整:如果某個項目的 adjustable_quantity.enabled 設定為 truePaymentSummary(透過其子元件 ProductItem)將呈現增加或減少數量的控制項。修改時會觸發 onQuantityChange 回呼。
  • 追加銷售/降級銷售:對於具有追加銷售設定的產品,會呈現一個開關,讓使用者升級其方案。onUpsellonDownsell 回呼會處理這些操作。
  • 交叉銷售:如果提供了 checkoutSessionId,該元件可以獲取並顯示建議的交叉銷售項目。新增或移除這些項目的按鈕會觸發 onApplyCrossSellonCancelCrossSell 回呼。

行動裝置響應式設計

在行動裝置上,產品列表預設是可折疊的,以節省空間,特別是對於包含許多項目的訂單。使用者可以點擊以展開或折疊列表,在較小的螢幕上提供更簡潔、更友善的使用者體驗。