@blocklet/payment-react 1.20.16 → 1.20.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/.aigne/doc-smith/config.yaml +7 -1
  2. package/.aigne/doc-smith/upload-cache.yaml +441 -0
  3. package/docs/components-business-auto-topup.ja.md +187 -0
  4. package/docs/components-business-auto-topup.zh-TW.md +187 -0
  5. package/docs/components-business-auto-topup.zh.md +187 -0
  6. package/docs/components-business-overdue-invoice-payment.ja.md +196 -0
  7. package/docs/components-business-overdue-invoice-payment.zh-TW.md +197 -0
  8. package/docs/components-business-overdue-invoice-payment.zh.md +197 -0
  9. package/docs/components-business-resume-subscription.ja.md +190 -0
  10. package/docs/components-business-resume-subscription.zh-TW.md +190 -0
  11. package/docs/components-business-resume-subscription.zh.md +190 -0
  12. package/docs/components-business.ja.md +21 -0
  13. package/docs/components-business.zh-TW.md +21 -0
  14. package/docs/components-business.zh.md +21 -0
  15. package/docs/components-checkout-checkout-donate.ja.md +259 -0
  16. package/docs/components-checkout-checkout-donate.zh-TW.md +259 -0
  17. package/docs/components-checkout-checkout-donate.zh.md +259 -0
  18. package/docs/components-checkout-checkout-form.ja.md +163 -0
  19. package/docs/components-checkout-checkout-form.zh-TW.md +163 -0
  20. package/docs/components-checkout-checkout-form.zh.md +163 -0
  21. package/docs/components-checkout-checkout-table.ja.md +148 -0
  22. package/docs/components-checkout-checkout-table.zh-TW.md +148 -0
  23. package/docs/components-checkout-checkout-table.zh.md +149 -0
  24. package/docs/components-checkout.ja.md +65 -0
  25. package/docs/components-checkout.zh-TW.md +65 -0
  26. package/docs/components-checkout.zh.md +65 -0
  27. package/docs/components-history-credit-grants-list.ja.md +73 -0
  28. package/docs/components-history-credit-grants-list.zh-TW.md +73 -0
  29. package/docs/components-history-credit-grants-list.zh.md +73 -0
  30. package/docs/components-history-credit-transactions-list.ja.md +106 -0
  31. package/docs/components-history-credit-transactions-list.zh-TW.md +106 -0
  32. package/docs/components-history-credit-transactions-list.zh.md +106 -0
  33. package/docs/components-history-invoice-list.ja.md +110 -0
  34. package/docs/components-history-invoice-list.zh-TW.md +110 -0
  35. package/docs/components-history-invoice-list.zh.md +110 -0
  36. package/docs/components-history-payment-list.ja.md +44 -0
  37. package/docs/components-history-payment-list.zh-TW.md +44 -0
  38. package/docs/components-history-payment-list.zh.md +44 -0
  39. package/docs/components-history.ja.md +67 -0
  40. package/docs/components-history.zh-TW.md +67 -0
  41. package/docs/components-history.zh.md +67 -0
  42. package/docs/components-ui-form-elements-address-form.ja.md +121 -0
  43. package/docs/components-ui-form-elements-address-form.zh-TW.md +121 -0
  44. package/docs/components-ui-form-elements-address-form.zh.md +121 -0
  45. package/docs/components-ui-form-elements-country-select.ja.md +126 -0
  46. package/docs/components-ui-form-elements-country-select.zh-TW.md +126 -0
  47. package/docs/components-ui-form-elements-country-select.zh.md +126 -0
  48. package/docs/components-ui-form-elements-currency-selector.ja.md +108 -0
  49. package/docs/components-ui-form-elements-currency-selector.zh-TW.md +108 -0
  50. package/docs/components-ui-form-elements-currency-selector.zh.md +108 -0
  51. package/docs/components-ui-form-elements-phone-input.ja.md +138 -0
  52. package/docs/components-ui-form-elements-phone-input.zh-TW.md +138 -0
  53. package/docs/components-ui-form-elements-phone-input.zh.md +139 -0
  54. package/docs/components-ui-form-elements.ja.md +91 -0
  55. package/docs/components-ui-form-elements.zh-TW.md +91 -0
  56. package/docs/components-ui-form-elements.zh.md +91 -0
  57. package/docs/components-ui-payment-summary.ja.md +109 -0
  58. package/docs/components-ui-payment-summary.zh-TW.md +109 -0
  59. package/docs/components-ui-payment-summary.zh.md +109 -0
  60. package/docs/components-ui-pricing-table.ja.md +140 -0
  61. package/docs/components-ui-pricing-table.zh-TW.md +140 -0
  62. package/docs/components-ui-pricing-table.zh.md +140 -0
  63. package/docs/components-ui.ja.md +71 -0
  64. package/docs/components-ui.zh-TW.md +71 -0
  65. package/docs/components-ui.zh.md +71 -0
  66. package/docs/components.ja.md +122 -0
  67. package/docs/components.zh-TW.md +122 -0
  68. package/docs/components.zh.md +122 -0
  69. package/docs/getting-started.ja.md +84 -0
  70. package/docs/getting-started.zh-TW.md +84 -0
  71. package/docs/getting-started.zh.md +84 -0
  72. package/docs/guides-theming.ja.md +213 -0
  73. package/docs/guides-theming.zh-TW.md +213 -0
  74. package/docs/guides-theming.zh.md +213 -0
  75. package/docs/guides-utilities.ja.md +197 -0
  76. package/docs/guides-utilities.zh-TW.md +197 -0
  77. package/docs/guides-utilities.zh.md +197 -0
  78. package/docs/guides.ja.md +18 -0
  79. package/docs/guides.zh-TW.md +18 -0
  80. package/docs/guides.zh.md +18 -0
  81. package/docs/hooks-use-mobile.ja.md +84 -0
  82. package/docs/hooks-use-mobile.zh-TW.md +84 -0
  83. package/docs/hooks-use-mobile.zh.md +84 -0
  84. package/docs/hooks-use-subscription.ja.md +111 -0
  85. package/docs/hooks-use-subscription.zh-TW.md +111 -0
  86. package/docs/hooks-use-subscription.zh.md +110 -0
  87. package/docs/hooks.ja.md +14 -0
  88. package/docs/hooks.zh-TW.md +14 -0
  89. package/docs/hooks.zh.md +14 -0
  90. package/docs/overview.ja.md +80 -0
  91. package/docs/overview.zh-TW.md +80 -0
  92. package/docs/overview.zh.md +80 -0
  93. package/docs/providers-donate-provider.ja.md +153 -0
  94. package/docs/providers-donate-provider.zh-TW.md +153 -0
  95. package/docs/providers-donate-provider.zh.md +153 -0
  96. package/docs/providers-payment-provider.ja.md +191 -0
  97. package/docs/providers-payment-provider.zh-TW.md +191 -0
  98. package/docs/providers-payment-provider.zh.md +191 -0
  99. package/docs/providers.ja.md +42 -0
  100. package/docs/providers.zh-TW.md +42 -0
  101. package/docs/providers.zh.md +42 -0
  102. package/package.json +3 -3
@@ -0,0 +1,163 @@
1
+ # CheckoutForm
2
+
3
+ `CheckoutForm` 组件是处理支付链接和结账会话的主要入口点。它作为一个高级封装器,根据提供的 ID 获取所有必要数据,并渲染相应的支付或捐赠界面。此组件是将完整的结账流程集成到您的应用程序中的最简单方法。
4
+
5
+ 必须用 `PaymentProvider` 包裹 `CheckoutForm` 或其任何父组件,以确保它能访问必要的上下文,例如会话信息和 API 配置。更多详情,请参阅 [PaymentProvider 文档](./providers-payment-provider.md)。
6
+
7
+ ## 工作原理
8
+
9
+ 该组件协调整个结账流程:
10
+
11
+ 1. **初始化**:它通过 `paymentLink` ID(前缀为 `plink_`)或 `checkoutSession` ID(前缀为 `cs_`)进行挂载。
12
+ 2. **数据获取**:它与支付后端通信,以检索所有必要的上下文,包括支付方式、订单项和客户详细信息。
13
+ 3. **UI 渲染**:根据 `formType` 属性,它在内部渲染标准的 `Payment` 组件或专门的 `DonationForm` 组件。
14
+ 4. **状态管理**:它处理支付的整个生命周期,包括加载状态、完成状态和错误处理。
15
+
16
+ ```d2 CheckoutForm 的基本流程 icon=lucide:workflow
17
+ direction: down
18
+ shape: sequence_diagram
19
+
20
+ User-Action: {
21
+ shape: c4-person
22
+ label: "用户"
23
+ }
24
+
25
+ Application: {
26
+ label: "你的 React 应用"
27
+
28
+ CheckoutForm-Component: {
29
+ label: "CheckoutForm"
30
+ }
31
+
32
+ Payment-Component: {
33
+ label: "Payment 组件"
34
+ }
35
+
36
+ Donation-Component: {
37
+ label: "DonationForm 组件"
38
+ }
39
+ }
40
+
41
+ Payment-API: {
42
+ label: "支付后端 API"
43
+ shape: cylinder
44
+ }
45
+
46
+ User-Action -> Application.CheckoutForm-Component: "1. 使用 'id' 属性挂载"
47
+ Application.CheckoutForm-Component -> Payment-API: "2. 获取会话数据"
48
+ Payment-API -> Application.CheckoutForm-Component: "3. 返回结账上下文"
49
+
50
+ alt "如果 formType 是 'payment'" {
51
+ Application.CheckoutForm-Component -> Application.Payment-Component: "4. 渲染支付 UI"
52
+ }
53
+
54
+ alt "如果 formType 是 'donation'" {
55
+ Application.CheckoutForm-Component -> Application.Donation-Component: "5. 渲染捐赠 UI"
56
+ }
57
+
58
+ User-Action -> Application.Payment-Component: "6. 完成支付"
59
+ User-Action -> Application.Donation-Component: "7. 完成捐赠"
60
+
61
+ ```
62
+
63
+ ## 属性
64
+
65
+ `CheckoutForm` 组件接受以下属性:
66
+
67
+ | 属性 | 类型 | 必填 | 默认值 | 描述 |
68
+ |---------------|----------------------------------------------------------------------------|----------|---------------|-------------------------------------------------------------------------------------------------------------------------|
69
+ | `id` | `string` | 是 | - | 支付链接(`plink_...`)或结账会话(`cs_...`)的唯一标识符。 |
70
+ | `mode` | `'standalone'` \| `'inline'` \| `'popup'` \| `'inline-minimal'` \| `'popup-minimal'` | 否 | `'inline'` | 定义渲染模式。`'standalone'` 用于全页视图,`'inline'` 用于嵌入容器。 |
71
+ | `formType` | `'payment'` \| `'donation'` | 否 | `'payment'` | 决定要渲染的表单类型。使用 `'donation'` 以实现专门的捐赠流程。 |
72
+ | `onPaid` | `(res: CheckoutContext) => void` | 否 | - | 支付成功后执行的回调函数。接收最终的结账上下文作为参数。 |
73
+ | `onError` | `(err: Error) => void` | 否 | `console.error` | 在流程中发生错误时执行的回调函数。 |
74
+ | `onChange` | `(data: CheckoutFormData) => void` | 否 | - | 当任何表单字段值发生变化时触发的回调函数。 |
75
+ | `goBack` | `() => void` | 否 | - | 如果提供,则渲染一个返回按钮,并在点击时调用此函数。 |
76
+ | `extraParams` | `Record<string, any>` | 否 | `{}` | 从支付链接启动会话时,在 URL 中传递的额外参数对象。 |
77
+ | `theme` | `'default'` \| `'inherit'` \| `PaymentThemeOptions` | 否 | `'default'` | 控制组件的主题。`'inherit'` 使用父主题,或者您可以传递一个自定义主题对象。 |
78
+ | `action` | `string` | 否 | `''` | 一个字符串标识符,用于自定义 UI 元素(如按钮文本)或跟踪特定流程。 |
79
+
80
+ ## 用法
81
+
82
+ ### 基本内联支付表单
83
+
84
+ 这是将支付表单直接嵌入到您的应用程序 UI 中的最常见用例。该组件在内部处理所有逻辑。
85
+
86
+ ```tsx MyStorePage.tsx icon=lucide:shopping-cart
87
+ import { PaymentProvider, CheckoutForm } from '@blocklet/payment-react';
88
+ import { useSessionContext } from './hooks/session-context'; // 您的应用的会话钩子
89
+
90
+ export default function MyStorePage() {
91
+ const { session, connectApi } = useSessionContext();
92
+
93
+ const handlePaymentSuccess = (result) => {
94
+ console.log('支付成功!', result);
95
+ alert('感谢您的购买!');
96
+ };
97
+
98
+ const handlePaymentError = (error) => {
99
+ console.error('支付失败:', error);
100
+ alert('抱歉,您的支付无法处理。');
101
+ };
102
+
103
+ return (
104
+ <PaymentProvider session={session} connectApi={connectApi}>
105
+ <div style={{ maxWidth: '960px', margin: '0 auto' }}>
106
+ <h1>结账</h1>
107
+ <CheckoutForm
108
+ id="plink_xxxxxxxxxxxxxx" // 替换为您的支付链接 ID
109
+ mode="inline"
110
+ onPaid={handlePaymentSuccess}
111
+ onError={handlePaymentError}
112
+ />
113
+ </div>
114
+ </PaymentProvider>
115
+ );
116
+ }
117
+ ```
118
+
119
+ ### 独立全页结账
120
+
121
+ 使用 `mode="standalone"` 来渲染一个专用的全页结账体验。这对于将用户重定向到单独页面以完成支付的场景非常理想。
122
+
123
+ ```tsx CheckoutPage.tsx icon=lucide:layout-template
124
+ import { PaymentProvider, CheckoutForm } from '@blocklet/payment-react';
125
+ import { useSessionContext } from './hooks/session-context';
126
+
127
+ export default function CheckoutPage() {
128
+ const { session, connectApi } = useSessionContext();
129
+ const paymentLinkId = 'plink_xxxxxxxxxxxxxx'; // 可从 URL 参数中检索
130
+
131
+ return (
132
+ <PaymentProvider session={session} connectApi={connectApi}>
133
+ <CheckoutForm id={paymentLinkId} mode="standalone" />
134
+ </PaymentProvider>
135
+ );
136
+ }
137
+ ```
138
+
139
+ ### 捐赠表单
140
+
141
+ 通过设置 `formType="donation"`,该组件会渲染一个专为捐赠活动量身定制的 UI,包括金额预设和权益显示等功能。
142
+
143
+ ```tsx DonationPage.tsx icon=lucide:gift
144
+ import { PaymentProvider, CheckoutForm } from '@blocklet/payment-react';
145
+ import { useSessionContext } from './hooks/session-context';
146
+
147
+ export default function DonationPage() {
148
+ const { session, connectApi } = useSessionContext();
149
+
150
+ return (
151
+ <PaymentProvider session={session} connectApi={connectApi}>
152
+ <div style={{ padding: '2rem' }}>
153
+ <h2>支持我们的事业</h2>
154
+ <CheckoutForm
155
+ id="plink_yyyyyyyyyyyyyy" // 替换为您的捐赠链接 ID
156
+ formType="donation"
157
+ onPaid={() => alert('感谢您的慷慨捐赠!')}
158
+ />
159
+ </div>
160
+ </PaymentProvider>
161
+ );
162
+ }
163
+ ```
@@ -0,0 +1,148 @@
1
+ # CheckoutTable
2
+
3
+ `CheckoutTable`コンポーネントは、サブスクリプションのチェックアウトのための、すぐに使える完全なソリューションを提供します。価格表を取得してレンダリングし、ユーザーがプランを選択できるようにし、その後シームレスに支払いフォームに移行して購入を完了させます。この高レベルコンポーネントは、プランベースの支払いフローをアプリケーションに統合する最も速い方法です。
4
+
5
+ 内部では、プランを表示するために[`PricingTable`](./components-ui-pricing-table.md)コンポーネントを使用し、支払いを処理するために[`CheckoutForm`](./components-checkout-checkout-form.md)コンポーネントを使用しています。
6
+
7
+ ## 仕組み
8
+
9
+ `CheckoutTable`によって管理されるチェックアウトフローは単純です。
10
+
11
+ 1. **データの取得**: コンポーネントは、提供された`id`を使用してサーバーから価格表の設定を取得します。
12
+ 2. **プランの表示**: サブスクリプションプランをレスポンシブなテーブルでレンダリングし、ユーザーが請求期間(例:月次/年次)や通貨を切り替えられるようにします。
13
+ 3. **セッションの作成**: ユーザーがプランを選択すると、コンポーネントはバックエンドと通信して安全なチェックアウトセッションを作成します。
14
+ 4. **支払いの処理**: その後、セッション詳細が事前に入力された`CheckoutForm`を表示し、ユーザーが支払い情報を入力して取引を完了できるようにします。
15
+
16
+ ```d2 CheckoutTable フロー図
17
+ direction: down
18
+
19
+ ユーザー: {
20
+ shape: c4-person
21
+ }
22
+
23
+ CheckoutTable-Component: {
24
+ label: "CheckoutTable コンポーネント"
25
+ shape: rectangle
26
+
27
+ Pricing-Table-View: {
28
+ label: "価格表ビュー"
29
+ }
30
+
31
+ Checkout-Form-View: {
32
+ label: "チェックアウトフォームビュー"
33
+ }
34
+ }
35
+
36
+ Payment-API: {
37
+ label: "支払いAPI"
38
+ shape: cylinder
39
+ }
40
+
41
+ ユーザー -> CheckoutTable-Component.Pricing-Table-View: "1. プランを閲覧"
42
+ CheckoutTable-Component.Pricing-Table-View -> ユーザー: " "
43
+ ユーザー -> CheckoutTable-Component.Pricing-Table-View: "2. プランを選択"
44
+ CheckoutTable-Component.Pricing-Table-View -> Payment-API: "3. チェックアウトセッションを作成"
45
+ Payment-API -> CheckoutTable-Component.Pricing-Table-View: "4. セッションIDを返す"
46
+ CheckoutTable-Component.Pricing-Table-View -> CheckoutTable-Component.Checkout-Form-View: "5. セッションIDで移行"
47
+ ユーザー -> CheckoutTable-Component.Checkout-Form-View: "6. 支払い詳細を入力して支払う"
48
+ CheckoutTable-Component.Checkout-Form-View -> ユーザー: ""
49
+
50
+ ```
51
+
52
+ ## Props
53
+
54
+ | Prop | Type | Required | Default | Description |
55
+ |---------------|-----------------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------|
56
+ | `id` | `string` | はい | - | 表示する価格表のID(`prctbl_`で始まる必要があります)。 |
57
+ | `mode` | `'standalone'` or `'embedded'` | いいえ | `'embedded'` | 表示モード。`'standalone'`は別のページにリダイレクトし、`'embedded'`はコンポーネント内でフローをインラインで処理します。 |
58
+ | `onPaid` | `(sessionId: string) => void` | いいえ | - | 支払いが正常に完了したときにトリガーされるコールバック関数。 |
59
+ | `onError` | `(error: Error) => void` | いいえ | - | チェックアウトプロセス中にエラーを処理するためのコールバック関数。 |
60
+ | `onChange` | `(data: any) => void` | いいえ | - | チェックアウトフォーム内の状態変更に対するコールバック。 |
61
+ | `extraParams` | `Record<string, any>` | いいえ | `{}` | チェックアウトセッションを作成する際に送信される追加パラメータのオブジェクト。ユーザーIDなどのカスタムデータを渡すのに便利です。 |
62
+ | `goBack` | `() => void` | いいえ | - | 支払いフォームからの戻るアクションを処理し、ユーザーを価格表ビューに戻すための関数。 |
63
+ | `theme` | `object` or `'inherit'` | いいえ | - | コンポーネントをスタイルするためのカスタムMaterial-UIテーマオブジェクト。詳細については、[テーマ設定ガイド](./guides-theming.md)を参照してください。 |
64
+
65
+ ## 使用方法
66
+
67
+ `CheckoutTable`コンポーネントを使用するには、`PaymentProvider`でラップする必要があります。価格表の`id`と、成功したトランザクションを処理するための`onPaid`コールバックを渡します。
68
+
69
+ ```javascript Basic CheckoutTable Example icon=logos:react
70
+ import { PaymentProvider, CheckoutTable } from '@blocklet/payment-react';
71
+ import { useSessionContext } from './path-to-your-session-context'; // ガイドラインに従ってこのコンテキストを中央集権化します
72
+
73
+ export default function MyCheckoutPage() {
74
+ const { session, connectApi } = useSessionContext();
75
+
76
+ const handlePaymentSuccess = (sessionId) => {
77
+ console.log(`セッションの支払いが成功しました: ${sessionId}`);
78
+ alert('ご購読ありがとうございます!');
79
+ };
80
+
81
+ if (!session) {
82
+ return <div>セッションを読み込んでいます...</div>;
83
+ }
84
+
85
+ return (
86
+ <PaymentProvider session={session} connectApi={connectApi}>
87
+ <div style={{ height: '700px', width: '100%' }}>
88
+ <CheckoutTable
89
+ id="prctbl_xxxxxxxxxxxxxxxx" // 実際の価格表IDに置き換えてください
90
+ onPaid={handlePaymentSuccess}
91
+ />
92
+ </div>
93
+ </PaymentProvider>
94
+ );
95
+ }
96
+ ```
97
+
98
+ ## 動作モード
99
+
100
+ ### 埋め込みモード(デフォルト)
101
+
102
+ デフォルトでは、`CheckoutTable`は`'embedded'`モードで動作します。コンポーネントはフロー全体をインラインで管理し、自身のコンテナ内で価格表ビューから支払いフォームに移行します。これは、チェックアウトをページの一部として統合したいシングルページアプリケーションに最適です。
103
+
104
+ ### スタンドアロンモード
105
+
106
+ `mode='standalone'`を設定すると、コンポーネントの動作が変わります。ユーザーがプランを選択すると、専用のホストされたチェックアウトページにリダイレクトされます。このモードは、埋め込みの支払いフォームを必要としない、よりシンプルな統合に便利です。
107
+
108
+ ```javascript Standalone Mode icon=logos:react
109
+ <CheckoutTable
110
+ id="prctbl_xxxxxxxxxxxxxxxx"
111
+ mode="standalone"
112
+ />
113
+ ```
114
+
115
+ ## 高度な使用方法
116
+
117
+ ### 戻るナビゲーションの処理
118
+
119
+ `goBack`プロパティを使用すると、ユーザーが支払いフォームから価格表に戻る際のカスタムロジックを定義できます。コンポーネントはビューの遷移を自動的に処理しますが、このコールバックはアプリケーションの状態を同期させるのに役立ちます。
120
+
121
+ ```javascript goBack Prop Example icon=logos:react
122
+ const handleGoBack = () => {
123
+ console.log('ユーザーが価格表に戻りました。');
124
+ // ここにアプリの状態を更新するなどのカスタムロジックを追加できます。
125
+ };
126
+
127
+ <CheckoutTable
128
+ id="prctbl_xxxxxxxxxxxxxxxx"
129
+ onPaid={handlePaymentSuccess}
130
+ goBack={handleGoBack}
131
+ />
132
+ ```
133
+
134
+ ### 追加パラメータの受け渡し
135
+
136
+ `extraParams`プロパティを使用して、チェックアウトセッションを作成する際に追加データを送信します。このデータは結果の支払いに関連付けることができ、バックエンドでの追跡や照合に役立ちます。
137
+
138
+ ```javascript extraParams Example icon=logos:react
139
+ <CheckoutTable
140
+ id="prctbl_xxxxxxxxxxxxxxxx"
141
+ onPaid={handlePaymentSuccess}
142
+ extraParams={{ userId: 'user_123', source: 'marketing_campaign' }}
143
+ />
144
+ ```
145
+
146
+ ## カスタマイズ
147
+
148
+ `CheckoutTable`は使いやすさを考慮して設計された高レベルコンポーネントですが、その構成要素を使用することで、よりきめ細かい制御が可能です。完全にカスタムされたUIを実現するには、[`PricingTable`](./components-ui-pricing-table.md)コンポーネントを使用してプランを表示し、手動でチェックアウトセッションをトリガーして[`CheckoutForm`](./components-checkout-checkout-form.md)にレンダリングします。
@@ -0,0 +1,148 @@
1
+ # CheckoutTable
2
+
3
+ `CheckoutTable` 元件為訂閱結帳提供了一個完整、開箱即用的解決方案。它會獲取並呈現價格表,允許使用者選擇方案,然後無縫地將他們轉換到付款表單以完成購買。這個高階元件是將基於方案的付款流程整合到您的應用程式中最快的方法。
4
+
5
+ 它在內部使用 [`PricingTable`](./components-ui-pricing-table.md) 元件來顯示方案,並使用 [`CheckoutForm`](./components-checkout-checkout-form.md) 元件來處理付款。
6
+
7
+ ## 運作方式
8
+
9
+ `CheckoutTable` 管理的結帳流程非常直接:
10
+
11
+ 1. **獲取資料**:該元件使用提供的 `id` 從伺服器獲取價格表設定。
12
+ 2. **顯示方案**:它在一個響應式表格中呈現訂閱方案,允許使用者在計費週期(例如,每月/每年)和貨幣之間切換。
13
+ 3. **建立會話**:當使用者選擇一個方案時,該元件會與後端通訊以建立一個安全的結帳會話。
14
+ 4. **處理付款**:然後它會顯示 `CheckoutForm`,預先填入會話詳細資訊,讓使用者輸入他們的付款資訊並完成交易。
15
+
16
+ ```d2 CheckoutTable 流程圖
17
+ direction: down
18
+
19
+ 使用者: {
20
+ shape: c4-person
21
+ }
22
+
23
+ CheckoutTable-Component: {
24
+ label: "CheckoutTable 元件"
25
+ shape: rectangle
26
+
27
+ Pricing-Table-View: {
28
+ label: "價格表視圖"
29
+ }
30
+
31
+ Checkout-Form-View: {
32
+ label: "結帳表單視圖"
33
+ }
34
+ }
35
+
36
+ Payment-API: {
37
+ label: "付款 API"
38
+ shape: cylinder
39
+ }
40
+
41
+ 使用者 -> CheckoutTable-Component.Pricing-Table-View: "1. 查看方案"
42
+ CheckoutTable-Component.Pricing-Table-View -> 使用者: " "
43
+ 使用者 -> CheckoutTable-Component.Pricing-Table-View: "2. 選擇方案"
44
+ CheckoutTable-Component.Pricing-Table-View -> Payment-API: "3. 建立結帳會話"
45
+ Payment-API -> CheckoutTable-Component.Pricing-Table-View: "4. 返回會話 ID"
46
+ CheckoutTable-Component.Pricing-Table-View -> CheckoutTable-Component.Checkout-Form-View: "5. 透過會話 ID 轉換"
47
+ 使用者 -> CheckoutTable-Component.Checkout-Form-View: "6. 填寫付款詳細資訊並付款"
48
+ CheckoutTable-Component.Checkout-Form-View -> 使用者: ""
49
+
50
+ ```
51
+
52
+ ## Props
53
+
54
+ | Prop | Type | Required | Default | Description |
55
+ |---|---|---|---|---|
56
+ | `id` | `string` | 是 | - | 要顯示的價格表的 ID(必須以 `prctbl_` 開頭)。 |
57
+ | `mode` | `'standalone'` 或 `'embedded'` | 否 | `'embedded'` | 顯示模式。`'standalone'` 會重新導向到一個獨立的頁面,而 `'embedded'` 會在元件內處理流程。 |
58
+ | `onPaid` | `(sessionId: string) => void` | 否 | - | 付款成功完成時觸發的回呼函式。 |
59
+ | `onError` | `(error: Error) => void` | 否 | - | 用於處理結帳過程中錯誤的回呼函式。 |
60
+ | `onChange` | `(data: any) => void` | 否 | - | 結帳表單內任何狀態變更的回呼。 |
61
+ | `extraParams` | `Record<string, any>` | 否 | `{}` | 建立結帳會話時要傳送的額外參數物件,可用於傳遞自訂資料,例如使用者 ID。 |
62
+ | `goBack` | `() => void` | 否 | - | 一個用於處理從付款表單返回動作的函式,將使用者返回到價格表視圖。 |
63
+ | `theme` | `object` 或 `'inherit'` | 否 | - | 自訂 Material-UI 主題物件,用於設定元件樣式。更多詳細資訊,請參閱 [主題指南](./guides-theming.md)。 |
64
+
65
+ ## 使用方式
66
+
67
+ 要使用 `CheckoutTable` 元件,您必須將其包裹在 `PaymentProvider` 中。傳入價格表的 `id` 和一個 `onPaid` 回呼函式來處理成功的交易。
68
+
69
+ ```javascript Basic CheckoutTable Example icon=logos:react
70
+ import { PaymentProvider, CheckoutTable } from '@blocklet/payment-react';
71
+ import { useSessionContext } from './path-to-your-session-context'; // 根據指南集中管理此上下文
72
+
73
+ export default function MyCheckoutPage() {
74
+ const { session, connectApi } = useSessionContext();
75
+
76
+ const handlePaymentSuccess = (sessionId) => {
77
+ console.log(`付款成功,會話: ${sessionId}`);
78
+ alert('感謝您的訂閱!');
79
+ };
80
+
81
+ if (!session) {
82
+ return <div>正在載入會話...</div>;
83
+ }
84
+
85
+ return (
86
+ <PaymentProvider session={session} connectApi={connectApi}>
87
+ <div style={{ height: '700px', width: '100%' }}>
88
+ <CheckoutTable
89
+ id="prctbl_xxxxxxxxxxxxxxxx" // 請替換為您實際的價格表 ID
90
+ onPaid={handlePaymentSuccess}
91
+ />
92
+ </div>
93
+ </PaymentProvider>
94
+ );
95
+ }
96
+ ```
97
+
98
+ ## 操作模式
99
+
100
+ ### 嵌入模式(預設)
101
+
102
+ 預設情況下,`CheckoutTable` 在 `'embedded'` 模式下運作。該元件在其自己的容器內管理整個流程,從價格表視圖轉換到付款表單。這對於希望結帳過程感覺像是頁面整合一部分的單頁應用程式來說非常理想。
103
+
104
+ ### 獨立模式
105
+
106
+ 透過設定 `mode='standalone'`,元件的行為會改變。當使用者選擇一個方案時,他們會被重新導向到一個專用的託管結帳頁面。這種模式對於不需要嵌入式付款表單的簡單整合非常有用。
107
+
108
+ ```javascript Standalone Mode icon=logos:react
109
+ <CheckoutTable
110
+ id="prctbl_xxxxxxxxxxxxxxxx"
111
+ mode="standalone"
112
+ />
113
+ ```
114
+
115
+ ## 進階用法
116
+
117
+ ### 處理返回導航
118
+
119
+ `goBack` prop 允許您定義當使用者從付款表單導航回價格表時的自訂邏輯。元件會自動處理視圖轉換,但這個回呼對於同步您的應用程式狀態非常有用。
120
+
121
+ ```javascript goBack Prop Example icon=logos:react
122
+ const handleGoBack = () => {
123
+ console.log('使用者已返回價格表。');
124
+ // 您可以在此處新增自訂邏輯,例如更新您的應用程式狀態。
125
+ };
126
+
127
+ <CheckoutTable
128
+ id="prctbl_xxxxxxxxxxxxxxxx"
129
+ onPaid={handlePaymentSuccess}
130
+ goBack={handleGoBack}
131
+ />
132
+ ```
133
+
134
+ ### 傳遞額外參數
135
+
136
+ 使用 `extraParams` prop 在建立結帳會話時傳送額外資料。這些資料可以與最終的付款相關聯,對於在您的後端進行追蹤和對帳非常有用。
137
+
138
+ ```javascript extraParams Example icon=logos:react
139
+ <CheckoutTable
140
+ id="prctbl_xxxxxxxxxxxxxxxx"
141
+ onPaid={handlePaymentSuccess}
142
+ extraParams={{ userId: 'user_123', source: 'marketing_campaign' }}
143
+ />
144
+ ```
145
+
146
+ ## 自訂
147
+
148
+ 雖然 `CheckoutTable` 是一個為易用性而設計的高階元件,但您可以透過使用其組成部分來實現更精細的控制。對於完全自訂的 UI,您可以使用 [`PricingTable`](./components-ui-pricing-table.md) 元件來顯示方案,然後手動觸發一個結帳會話,並在 [`CheckoutForm`](./components-checkout-checkout-form.md) 中呈現。
@@ -0,0 +1,149 @@
1
+ # CheckoutTable
2
+
3
+ `CheckoutTable` 组件为订阅结账提供了一个完整的、开箱即用的解决方案。它会获取并渲染一个价格表,允许用户选择一个方案,然后无缝地将他们过渡到支付表单以完成购买。这个高级组件是将基于方案的支付流程集成到您的应用程序中的最快方法。
4
+
5
+ 它在内部使用 [`PricingTable`](./components-ui-pricing-table.md) 组件来显示方案,并使用 [`CheckoutForm`](./components-checkout-checkout-form.md) 组件来处理支付。
6
+
7
+ ## 工作原理
8
+
9
+ `CheckoutTable` 管理的结账流程非常直接:
10
+
11
+ 1. **获取数据**:该组件使用提供的 `id` 从服务器获取价格表配置。
12
+ 2. **显示方案**:它在一个响应式表格中渲染订阅方案,允许用户在计费周期(例如,月度/年度)和货币之间切换。
13
+ 3. **创建会话**:当用户选择一个方案时,该组件会与后端通信以创建一个安全的结账会话。
14
+ 4. **处理支付**:然后它会显示 `CheckoutForm`,预先填充了会话详细信息,允许用户输入他们的支付信息并完成交易。
15
+
16
+ ```d2 CheckoutTable 流程图
17
+ direction: down
18
+
19
+ User: {
20
+ shape: c4-person
21
+ label: "用户"
22
+ }
23
+
24
+ CheckoutTable-Component: {
25
+ label: "CheckoutTable 组件"
26
+ shape: rectangle
27
+
28
+ Pricing-Table-View: {
29
+ label: "价格表视图"
30
+ }
31
+
32
+ Checkout-Form-View: {
33
+ label: "结账表单视图"
34
+ }
35
+ }
36
+
37
+ Payment-API: {
38
+ label: "支付 API"
39
+ shape: cylinder
40
+ }
41
+
42
+ User -> CheckoutTable-Component.Pricing-Table-View: "1. 查看方案"
43
+ CheckoutTable-Component.Pricing-Table-View -> User: " "
44
+ User -> CheckoutTable-Component.Pricing-Table-View: "2. 选择方案"
45
+ CheckoutTable-Component.Pricing-Table-View -> Payment-API: "3. 创建结账会话"
46
+ Payment-API -> CheckoutTable-Component.Pricing-Table-View: "4. 返回会话 ID"
47
+ CheckoutTable-Component.Pricing-Table-View -> CheckoutTable-Component.Checkout-Form-View: "5. 使用会话 ID 进行过渡"
48
+ User -> CheckoutTable-Component.Checkout-Form-View: "6. 填写支付详情并支付"
49
+ CheckoutTable-Component.Checkout-Form-View -> User: ""
50
+
51
+ ```
52
+
53
+ ## Props
54
+
55
+ | Prop | Type | Required | Default | Description |
56
+ |---------------|-----------------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------|
57
+ | `id` | `string` | 是 | - | 要显示的价格表的 ID(必须以 `prctbl_` 开头)。 |
58
+ | `mode` | `'standalone'` or `'embedded'` | 否 | `'embedded'` | 显示模式。`'standalone'` 会重定向到一个单独的页面,而 `'embedded'` 会在组件内联处理流程。 |
59
+ | `onPaid` | `(sessionId: string) => void` | 否 | - | 支付成功完成时触发的回调函数。 |
60
+ | `onError` | `(error: Error) => void` | 否 | - | 用于处理结账过程中错误的回调函数。 |
61
+ | `onChange` | `(data: any) => void` | 否 | - | 结账表单内任何状态变化的回调。 |
62
+ | `extraParams` | `Record<string, any>` | 否 | `{}` | 创建结账会话时要发送的额外参数对象,可用于传递自定义数据,如用户 ID。 |
63
+ | `goBack` | `() => void` | 否 | - | 一个用于处理从支付表单返回操作的函数,将用户返回到价格表视图。 |
64
+ | `theme` | `object` or `'inherit'` | 否 | - | 自定义 Material-UI 主题对象,用于设置组件样式。更多详情,请参阅[主题指南](./guides-theming.md)。 |
65
+
66
+ ## 用法
67
+
68
+ 要使用 `CheckoutTable` 组件,您必须将其包装在 `PaymentProvider` 中。传递价格表 `id` 和一个 `onPaid` 回调来处理成功的交易。
69
+
70
+ ```javascript Basic CheckoutTable Example icon=logos:react
71
+ import { PaymentProvider, CheckoutTable } from '@blocklet/payment-react';
72
+ import { useSessionContext } from './path-to-your-session-context'; // 根据指南集中管理此上下文
73
+
74
+ export default function MyCheckoutPage() {
75
+ const { session, connectApi } = useSessionContext();
76
+
77
+ const handlePaymentSuccess = (sessionId) => {
78
+ console.log(`支付成功的会话: ${sessionId}`);
79
+ alert('感谢您的订阅!');
80
+ };
81
+
82
+ if (!session) {
83
+ return <div>正在加载会话...</div>;
84
+ }
85
+
86
+ return (
87
+ <PaymentProvider session={session} connectApi={connectApi}>
88
+ <div style={{ height: '700px', width: '100%' }}>
89
+ <CheckoutTable
90
+ id="prctbl_xxxxxxxxxxxxxxxx" // 替换为您的实际价格表 ID
91
+ onPaid={handlePaymentSuccess}
92
+ />
93
+ </div>
94
+ </PaymentProvider>
95
+ );
96
+ }
97
+ ```
98
+
99
+ ## 操作模式
100
+
101
+ ### 嵌入模式(默认)
102
+
103
+ 默认情况下,`CheckoutTable` 在 `'embedded'` 模式下运行。该组件在自己的容器内联管理整个流程,从价格表视图过渡到支付表单。这对于希望结账流程感觉像是页面集成部分的单页应用程序非常理想。
104
+
105
+ ### 独立模式
106
+
107
+ 通过设置 `mode='standalone'`,组件的行为会发生变化。当用户选择一个方案时,他们将被重定向到一个专用的、托管的结账页面。这种模式适用于不需要嵌入式支付表单的更简单的集成。
108
+
109
+ ```javascript Standalone Mode icon=logos:react
110
+ <CheckoutTable
111
+ id="prctbl_xxxxxxxxxxxxxxxx"
112
+ mode="standalone"
113
+ />
114
+ ```
115
+
116
+ ## 高级用法
117
+
118
+ ### 处理返回导航
119
+
120
+ `goBack` prop 允许您在用户从支付表单导航回价格表时定义自定义逻辑。组件会自动处理视图转换,但此回调对于同步您的应用程序状态非常有用。
121
+
122
+ ```javascript goBack Prop Example icon=logos:react
123
+ const handleGoBack = () => {
124
+ console.log('用户已返回价格表。');
125
+ // 您可以在此处添加自定义逻辑,例如更新您的应用状态。
126
+ };
127
+
128
+ <CheckoutTable
129
+ id="prctbl_xxxxxxxxxxxxxxxx"
130
+ onPaid={handlePaymentSuccess}
131
+ goBack={handleGoBack}
132
+ />
133
+ ```
134
+
135
+ ### 传递额外参数
136
+
137
+ 使用 `extraParams` prop 在创建结账会话时发送附加数据。这些数据可以与最终的支付相关联,并且对于在您的后端进行跟踪和对账非常有用。
138
+
139
+ ```javascript extraParams Example icon=logos:react
140
+ <CheckoutTable
141
+ id="prctbl_xxxxxxxxxxxxxxxx"
142
+ onPaid={handlePaymentSuccess}
143
+ extraParams={{ userId: 'user_123', source: 'marketing_campaign' }}
144
+ />
145
+ ```
146
+
147
+ ## 自定义
148
+
149
+ 虽然 `CheckoutTable` 是一个为易用性而设计的高级组件,但您可以通过使用其组成部分来实现更精细的控制。对于完全自定义的 UI,您可以使用 [`PricingTable`](./components-ui-pricing-table.md) 组件来显示方案,然后手动触发一个结账会话,该会话在 [`CheckoutForm`](./components-checkout-checkout-form.md) 中渲染。