Skip to Content
SDKJavaScript / ブラウザ

JavaScript / ブラウザ SDK

@lartech/infraio-checkout-js は現在公開している唯一の SDK です。 ブラウザで動作し、ホスト型チェックアウトを開きます。バックエンド SDK (Node、Go、Python) はロードマップ上にあります; それまでの間は ゲートウェイに直接通信してください — HMAC 署名ヘルパーは クイックスタート を参照してください。

  • 現在のバージョン: 0.1.1-beta.17 (1.0 未満; マイナーな破壊的変更があり得ます)
  • フォーマット: ESM (index.js)、CJS (index.cjs)、IIFE (index.global.js)
  • 型定義同梱 (index.d.ts)
  • ランタイム依存ゼロ — React、jQuery などの依存なし

サーバーサイドエントリは存在しません。 Webhook の署名検証ヘルパーは 同梱されていません — crypto を使って自前で実装してください (署名検証ページ に 4 言語の コピペ可能なコードがあります)。

インストール

npm install @lartech/infraio-checkout-js

loadInfraIo(publicKey, options?)

Promise<InfraIoInstance> を返します。

import { loadInfraIo } from "@lartech/infraio-checkout-js"; const sdk = await loadInfraIo("pk_live_yourkeyhere", { // 任意。本番以外の環境を指す場合のみ上書きしてください。 checkoutUrl: "https://checkout-dev.infraio.xyz", });
パラメータ必須備考
publicKeystringpk_(live|test)_… に一致する必要があります
options.checkoutUrlstringチェックアウトのベース URL を上書き。デフォルト: https://checkout.infraio.xyz。対応するゲートウェイ URL はチェックアウトページがランタイムで判定します — 各 checkout(-dev).infraio.xyz デプロイはコンパイル時の NEXT_PUBLIC_API_URL を保持しているため、ここで正しいホスト名を選べば自動的に正しいバックエンドが選ばれます。gatewayUrl という別オプションはありません。

sdk.checkout({ … })

ホスト型チェックアウトを開きます。void を返します (状態はコールバックで取得)。

フィールド必須備考
sessionIdstringPOST /b2b/v1/checkout-sessions/quick が返す session_key
checkoutUrlstring同じエンドポイントが返す完全な URL。省略された場合、SDK は loadInfraIo()checkoutUrl (またはデフォルト) + sessionId から構築します
mode"popup" | "redirect" | "embed"デフォルト "popup"
containerstring | HTMLElementembed のみiframe をマウントする CSS セレクタまたは DOM 要素
widthnumberpopup のみ。デフォルト 560[320, 1280] の範囲にクランプ
heightnumberpopup のみ。デフォルト 780[400, 1000] の範囲にクランプ
timeoutMsnumberpopup のみ。iframe ロードタイムアウト。デフォルト 300000 を渡すと無効化
localestringBCP-47 タグ。?locale= としてチェックアウトページに転送 (enjazh-CNzh-TW)
hideSummaryboolean注文サマリー列を非表示。デフォルト false
hideHeaderbooleanInfraIO ヘッダーと組み込みのウォレット接続ボタンを非表示。デフォルト false。完全なホワイトラベル化には walletAddress と組み合わせてください
walletAddressstringバイヤーのウォレットを事前接続。onSignRequest が必要
walletChainIdnumber事前接続したウォレットの EVM チェーン ID
onReady() => voidiframe がインタラクティブになったときに発火。popup/embed のみ
onSignRequest(req: { method: string; params: unknown[] }) => Promise<string>walletAddress 設定時SDK はウォレット RPC をこのハンドラにプロキシします; 署名済み hex を返してください
onSuccess({ sessionId }) => void決済成功時に発火。信頼できる情報源ではありません — Webhook が信頼源です
onCancel() => voidバイヤーが支払いをせずに popup/embed を閉じたときに発火
onError(err: InfraIoError) => voidiframe ロード失敗時に発火 (popup + embed モード)。不正な引数は同期的に throw され、ここには 渡されません。redirect モードにはランタイムエラーサーフェスがありません — 失敗はリダイレクト先のページで観測されます。

onSuccess信頼できる ものではありません。Webhook 側で 支払いが失敗と判定された場合でも発火する可能性があります (テストネットの reorg、バイヤー側のタイミングなど)。UX 用途のみで使ってください (「ありがとうございます!」表示、リダイレクト)。フルフィル前には 必ず Webhook で確認してください。

sdk.close()

開いている popup または embed をプログラムから閉じます。redirect モードでは何もしません。

sdk.checkout({ sessionId, mode: "popup", /* … */ }); // 後で、たとえばユーザーがページ遷移するときに sdk.close();

sdk.openRefundRequest({ … })

バックエンドが POST /b2b/v1/merchants/{merchant_id}/refund-requests で発行したワンタイムトークン向けに、ホスト型の 返金リクエスト フォーム を開きます。バイヤーは弊社のページで返金先アドレス + 理由 + (任意の) メタデータを入力します; あなたのページは開閉のライフサイクルを 扱うだけです。close() 関数 を返します — 呼び出すと popup を プログラムから閉じる、または embed iframe をデタッチします。redirect モードでは返される関数は何もしません。

フォームは https://checkout.infraio.xyz/refund-request/:token に あります。このメソッドはその URL を popup / redirect / embed で ラップするだけなので、バイヤーはあなたのドメインを離れない (popup / embed)、または自動的に戻ります (redirect)。トークンを発行する ためにバックエンドが叩くエンドポイントは POST /b2b/v1/merchants/{merchant_id}/refund-requests — シークレット キーで HMAC 署名し、B2B サーフェスのほかの呼び出しと同じ認証を使います。 コンセプト → 返金 を参照。

import { loadInfraIo } from "@lartech/infraio-checkout-js"; const sdk = await loadInfraIo("pk_live_yourkeyhere"); // トークンをサーバー側で発行し、ブラウザの SDK に渡します。 const { token } = await fetch("/api/mint-refund-token", { method: "POST" }).then(r => r.json()); const close = sdk.openRefundRequest({ token, mode: "popup", onSuccess: ({ linkToken, refundId }) => { // バイヤーがフォームを送信しました。 // linkToken → /r/:linkToken ステータスページ (バイヤーと共有)。 // refundId → B2B API で承認 / 拒否に使用。 window.location.href = `/r/${linkToken}`; }, onCancel: () => { /* バイヤーが送信せずに閉じた */ }, }); // 必要に応じて後で popup をプログラムから閉じる: // close();
フィールド必須備考
tokenstringPOST /b2b/v1/merchants/{merchant_id}/refund-requests が返す rfqt_… トークン
mode"popup" | "redirect" | "embed"デフォルト "popup"sdk.checkout() と同じサーフェスセマンティクス — モードの注意点 を参照
containerstring | HTMLElementembed のみiframe をマウントする CSS セレクタまたは DOM 要素
localestringBCP-47 タグ。?locale= として転送 (enjazh-CNzh-TW)
hideHeaderbooleaniframe 内の InfraIO ヘッダーを非表示。popup/embed では SDK が独自のモーダルクロームを描画するため、ページヘッダーは通常ノイズです。デフォルト false
hideSummaryboolean注文サマリー列を非表示にし、返金フォームのみを表示します。デフォルト false
walletAddressstring送信先ウォレットフィールドに事前入力 (?wallet_address=)。バイヤーのウォレットがすでに分かっているマーチャントが、手動の再入力を省略できます
onSuccess(data: { linkToken: string; refundId: string }) => voidバイヤーがフォームを送信した後に発火。linkToken/r/:linkToken ステータスページ (バイヤーと共有)。refundId → B2B API で承認 / 拒否に使用
onCancel() => voidバイヤーが送信せずに popup/embed を閉じたときに発火
onError(err: InfraIoError) => voidiframe ロード失敗または不正な引数で発火。トークンの期限切れ / キャンセルはホスト側のページが処理するため onError 経由ではありません

onError で表面化するトークン状態

バイヤーが古いトークンを開いた場合、ページ自体が表示を処理し (「期限切れ — 新しいリンクをリクエスト」のプロンプトなど)、SDK は そのケースで onError発火しません — バイヤーはフォームフロー内に おり、あなたのコードは反応する必要がありません。onError は、あなたの コードが対処できることだけに発火します (不正な引数、iframe を読み込む ネットワーク障害)。

openRefundRequest は返金の意図を記録するだけで、資金を移動しませんonSuccess の後、返金行は PENDING 状態 (またはマーチャント設定で カスタマー返金が自動承認される場合は APPROVED) です。あなたは依然として マーチャントウォレットからオンチェーン送金に署名・ブロードキャストし、 その後 tx ハッシュを POST /b2b/v1/refunds/:id/submit-tx に ポストする必要があります。ライフサイクル全体については コンセプト → 返金 を参照してください。

エラークラス

import { InfraIoError } from "@lartech/infraio-checkout-js"; sdk.checkout({ sessionId, onError: (err: InfraIoError) => { switch (err.code) { case "invalid_request_error": /* 不正な sessionId / 引数 */ break; case "iframe_load_error": /* iframe ロード失敗 */ break; case "iframe_timeout_error": /* timeoutMs を超過 */ break; case "already_open_error": /* 別のチェックアウトが既に開いている */ break; case "network_error": /* チェックアウト origin との通信での一時的なネットワーク障害 */ break; case "api_error": /* SDK が発行した呼び出しに対しバックエンドが non-2xx を返した */ break; } }, });

sdk.openRefundRequest()invalid_request_error (トークン / 引数の 欠落または不正) のみを同期的に throw します。iframe_load_error (返金リクエスト iframe のロード失敗) は onError 経由で非同期に 配信され、throw はされません。iframe_timeout_erroralready_open_error発火しません — 返金リクエストの popup には ロードタイムアウトはなく、複数の popup を同時に開けます。

モードの注意点

  • 中央寄せのオーバーレイ、半透明の暗い背景
  • z-index: 2147483647 (int32 最大値) — 他のすべての上に乗ります
  • 開いている間は body のスクロールがロックされ、閉じると復元されます
  • 閉じるボタンが初期フォーカスを取得; Tab は popup 内にトラップ
  • 閉じる手段: 閉じるボタン、Escape、外側クリック、sdk.close()。 これらすべてが onCancel を呼び出します
  • チェックアウトページは postMessage でリサイズを要求できます — SDK は width/height の制限内にクランプします

Redirect

  • window.location.href によるハードナビゲーション
  • 自動的に ?return_url=<current-page> を付加するので、バイヤーが 来た場所に戻れます。セッションの success_url / cancel_url が 既にこれをカバーしている場合、往復は return_url を無視します

Embed

  • allow="payment; clipboard-write" (HTML5 Feature Policy ディレクティブ — sandbox 属性ではありません) の iframe。iframe はチェックアウトの origin から配信されるため、ウォレット popup とクリップボード書き込みは バイヤー側からそれ以上のオプトインなしに動作します。
  • コンテナ幅は 100%、高さは INFRAIO_RESIZE postMessage で自動サイズ調整、 [200, 2000]px にクランプ
  • iframe 境界を越える CSS の分離はありません — 親ページのスタイルが 入り込むことはありません
  • チェックアウトがインタラクティブになったときに自前のローディング状態を 隠せるよう、必ず onReady を結線してください

TypeScript

すべての型は同梱されています。よく使うエクスポート:

import type { CheckoutOptions, RefundRequestOptions, LoadOptions, InfraIoInstance, InfraIoErrorCode, } from "@lartech/infraio-checkout-js"; import { loadInfraIo, InfraIoError, VERSION } from "@lartech/infraio-checkout-js";

VERSION は SDK 自身のバージョン文字列です — バグレポートに便利です。

次に

  • React / Vue フレームワークラッパー — パイロットマーチャント間で バニラ JS サーフェスが安定したら、ローンチ後のイテレーションで予定。 バニラ SDK は React 内でも問題なく動作します; ラッパーは手動の useRef + ライフサイクル配線を省略するだけです。
  • タブ間セッション再開 — タブ A でチェックアウトを開き、タブ B で 完了。バイヤーが流れの途中でマジックリンクをフォローしたときに便利です。 次のマイナーリリースで追跡中。
  • CSS 変数によるテーマ設定 — iframe に小さなデザイントークン群 (半径、アクセントカラー) を公開し、マーチャントがページをフォークせずに ブランドに合わせられるようにします。
  • サーバーサイドヘルパー — 小さな @lartech/infraio-server パッケージで verifyWebhook() + signedRequest() を公開し、バックエンドコードが HMAC の儀式をコピーする必要をなくします。出荷までの間は 署名検証ページ に TypeScript、 Go、Python、Ruby のドロップイン実装があります。