跳到主要内容

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'; // 你的会话上下文钩子

// 用于演示的模拟数据
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 回调。

移动端响应式设计

在移动设备上,产品列表默认是可折叠的以节省空间,特别是对于包含许多商品的订单。用户可以点击以展开或折叠列表,从而在较小的屏幕上提供更清晰、更友好的用户体验。