メインコンテンツへスキップ

PaymentProvider

PaymentProviderは、@blocklet/payment-reactライブラリの基盤です。これはコンテキストプロバイダーとして機能し、アプリケーションまたは関連する支払いコンポーネントをラップする必要があります。重要な設定の取得、アプリケーションの状態管理、ヘルパー関数とAPIクライアン

PaymentProviderは、@blocklet/payment-reactライブラリの基盤です。これはコンテキストプロバイダーとして機能し、アプリケーションまたは関連する支払いコンポーネントをラップする必要があります。重要な設定の取得、アプリケーションの状態管理、ヘルパー関数とAPIクライアントのすべての子コンポーネントへの提供を担当します。

このライブラリのほぼすべてのコンポーネントとフックは、正しく機能するためにPaymentProvider内にネストされている必要があります。

仕組み

このプロバイダーは、マウント時にPayment Kitのバックエンドから設定データを初期化して取得します。このデータは、ユーザーのセッションやその他のユーティリティとともに、usePaymentContextフックを介してすべての子孫コンポーネントで利用可能になります。このパターンにより、支払いコンポーネントはプロップのバケツリレー(prop drilling)なしで、常に必要なコンテキストにアクセスできるようになります。

PaymentProvider

セットアップと使用法

PaymentProviderを使用するには、アプリケーションの認証コンテキストからsessionconnectオブジェクトを提供する必要があります。このドキュメントでは、アプリの認証ロジックを表すためにカスタムフックuseSessionContextを使用します。以下は、このようなフックの典型的な実装例です。

SessionContext.tsx

typescript
import React, { createContext, useContext } from 'react';
import { SessionProvider, useSessionContext as useDidSessionContext } from '@arcblock/did-connect-react';

// 独自のコンテキストを作成するか、既存のコンテキストを使用できます
const AppContext = createContext({});

export function AppProvider({ children }) {
  return (
    <SessionProvider>
      <AppContext.Provider value={{}}>
        {children}
      </AppContext.Provider>
    </SessionProvider>
  );
}

// このカスタムフックは、sessionとconnectApiをPaymentProviderに提供します
export function useSessionContext() {
  const { session, connect } = useDidSessionContext();
  return { session, connectApi: connect };
}

セッション管理を実装したら、メインのアプリケーションコンポーネントをPaymentProviderでラップします。

App.tsx

tsx
import { PaymentProvider } from '@blocklet/payment-react';
import { useSessionContext } from './SessionContext'; // あなたのセッションコンテキストフック
import MyPaymentPage from './MyPaymentPage';

function App() {
  const { session, connectApi } = useSessionContext();

  return (
    <PaymentProvider session={session} connect={connectApi}>
      <MyPaymentPage />
    </PaymentProvider>
  );
}

export default App;

Props

PaymentProviderコンポーネントは、次のpropsを受け入れます。

PropTypeRequiredDescription
sessionSessionはい認証コンテキストからのユーザーセッションオブジェクト(例:@arcblock/did-connect-react)。
connectConnectはいDID Connect操作に使用される、認証コンテキストからの connect API関数。
childrenReact.ReactNodeはい支払いコンテキストにアクセスできるようになる子コンポーネント。
baseUrlstringいいえPayment Kit blockletのベースURL。異なるオリジン(クロスオリジン)から支払いコンポーネントを統合する場合にのみ必要です。
authTokenstringいいえAPIリクエスト用の特定の認証トークン。提供された場合、セッションベースの認証の代わりに使用されます。

コンテキストの値

PaymentProvider内のコンポーネントは、usePaymentContextフックを使用して次の値にアクセスできます。

MyComponent.tsx

typescript
import { usePaymentContext } from '@blocklet/payment-react';

function MyComponent() {
  const { settings, livemode, setLivemode } = usePaymentContext();

  return (
    <div>
      <p>Base Currency: {settings.baseCurrency?.name}</p>
      <p>Mode: {livemode ? 'Live' : 'Test'}</p>
      <button onClick={() => setLivemode(!livemode)}>Toggle Mode</button>
    </div>
  );
}

利用可能なコンテキスト値の完全なリストは次のとおりです。

KeyTypeDescription
sessionobject認証済みユーザーのセッション。ユーザー詳細を含みます。
connectfunctionDID Walletとの対話を開始するための connect 関数。
livemodebooleanコンテキストがライブモード(true)かテストモード(false)かを示します。
setLivemode(livemode: boolean) => voidライブモードとテストモードを切り替えるための関数。これにより、設定の再取得がトリガーされます。
settingsSettingsバックエンドから取得した paymentMethodsbaseCurrency の設定を含むオブジェクト。
refresh(forceRefresh?: boolean) => void設定データを手動で再取得するための関数。
getCurrency(id: string) => TPaymentCurrencyIDによって特定の通貨の詳細を取得するためのヘルパー関数。
getMethod(id: string) => TPaymentMethodExpandedIDによって特定の支払い方法の詳細を取得するためのヘルパー関数。
apiAxiosInstancePayment Kitバックエンドに対して認証済みAPIコールを行うための、事前設定済みのAxiosインスタンス。
prefixstringblockletのURLプレフィックス。
payableboolean支払いアクションの可用性を制御するために使用できる状態。
setPayable(status: boolean) => voidpayable ステータスを更新するための関数。

高度なシナリオ

クロスオリジン統合

アプリケーションとPayment Kit blockletが異なるドメインでホストされている場合は、baseUrl propを使用する必要があります。これにより、PaymentProviderはPayment Kit APIを正しく特定し、通信できるようになります。

CrossOriginApp.tsx

tsx
import { PaymentProvider } from '@blocklet/payment-react';
import { useSessionContext } from './SessionContext';

function CrossOriginApp() {
  const { session, connectApi } = useSessionContext();

  return (
    <PaymentProvider
      session={session}
      connect={connectApi}
      baseUrl="https://payment-kit.another-domain.com"
    >
      {/* あなたの支払いコンポーネント */}
    </PaymentProvider>
  );
}

カスタム認証トークン

デフォルトのセッションベース認証の代わりに特定のAPIトークンを使用する必要があるシナリオ(例:サーバー間通信や特定のアクセス権の付与)では、authToken propを渡すことができます。

TokenAuthApp.tsx

tsx
import { PaymentProvider } from '@blocklet/payment-react';
import { useSessionContext } from './SessionContext';

function TokenAuthApp() {
  const { session, connectApi } = useSessionContext();
  const myCustomAuthToken = 'sk_xxxxxx'; // あなたの秘密トークン

  return (
    <PaymentProvider
      session={session}
      connect={connectApi}
      authToken={myCustomAuthToken}
    >
      {/* コンポーネントはAPIコールに提供されたauthTokenを使用します */}
    </PaymentProvider>
  );
}

PaymentProviderのセットアップが完了したら、支払いコンポーネントをアプリケーションに統合する準備が整いました。次のステップとして、CheckoutFormコンポーネントを使用して支払いフローを作成する方法を確認することをお勧めします。