UNPKG

@blocklet/payment-react

Version:

Reusable react components for payment kit v2

109 lines (87 loc) 5.43 kB
# PaymentSummary `PaymentSummary` 组件是任何结账流程中至关重要的 UI 元素。它提供了订单的详细分类,包括所有订单项、试用期信息、质押要求和最终总金额。它的设计是响应式的,可以为移动设备调整其布局。 该组件与 `ProductItem``ProductDonation` 协同工作,以渲染购物车中的每个商品,并处理用户交互,如应用交叉销售或更改数量。 ## Props `PaymentSummary` 组件接受以下 props 以自定义其行为和显示: | Prop | Type | Required | Description | | --- | --- | --- | --- | | `items` | `TLineItemExpanded[]` | 是 | 要在摘要中显示的订单项数组。 | | `currency` | `TPaymentCurrency` | 是 | 用于格式化金额的货币对象。 | | `trialInDays` | `number` | 是 | 周期性订阅的试用天数。 | | `billingThreshold` | `number` | 是 | 计费阈值金额。如果适用,用于质押计算。 | | `trialEnd` | `number` | 否 | 试用结束的 Unix 时间戳。会覆盖 `trialInDays`。 | | `showStaking` | `boolean` | 否 | 如果为 `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` | 否 | 用户移除交叉销售商品时的回调函数。 | | `checkoutSessionId` | `string` | 否 | 结账会话的 ID,用于获取潜在的交叉销售商品。 | | `crossSellBehavior` | `string` | 否 | 定义交叉销售商品的行为(例如,`'required'`)。 | | `donationSettings` | `DonationSettings` | 否 | 捐赠项目的配置。 | | `action` | `string` | 否 | 摘要部分的自定义标题,替换“订单摘要”。 | | `completed` | `boolean` | 否 | 如果为 `true`,则禁用数量调整等交互式元素。默认为 `false`。 | ## 用法 `PaymentSummary` 组件应放置在 `PaymentProvider` 中,并且通常用作更复杂的结账表单的一部分。你需要为其提供订单项和货币信息。 以下是如何集成 `PaymentSummary` 组件的基本示例。 ```tsx PaymentSummary Example icon=lucide:shopping-cart 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`,该组件将计算并显示周期性项目所需的质押金额。它将立即支付的金额与质押所需的金额分开,为用户提供清晰的财务摘要。最终总额是这些金额的总和。 ### 处理试用期 该组件向用户清晰地传达试用期信息。通过传递 `trialInDays``trialEnd`,总额下方将显示类似“然后 $20.00 / 月”的消息,告知用户试用期结束后的周期性费用。 ### 交互功能 - **数量调整**:如果一个项目的 `adjustable_quantity.enabled` 设置为 `true``PaymentSummary`(通过其子组件 `ProductItem`)将渲染用于增加或减少数量的控件。修改时会触发 `onQuantityChange` 回调。 - **增销/减销**:对于具有增销配置的产品,会渲染一个开关,允许用户升级他们的计划。`onUpsell``onDownsell` 回调处理这些操作。 - **交叉销售**:如果提供了 `checkoutSessionId`,该组件可以获取并显示建议的交叉销售商品。添加或移除这些商品的按钮会触发 `onApplyCrossSell``onCancelCrossSell` 回调。 ### 移动端响应式设计 在移动设备上,产品列表默认是可折叠的以节省空间,特别是对于包含许多商品的订单。用户可以点击以展开或折叠列表,从而在较小的屏幕上提供更清晰、更友好的用户体验。