メインコンテンツへスキップ
既存の checkout session からワンタイム購入注文を作成し、ホスト型 PSP 決済 URL を返します。
POST /v1/actions/onetime-order/create-order
認証: Session Token — Customer Endpoints を参照(customer または shopper ロール)

チェックアウトフロー

  1. マーチャントがまず Checkout Session の作成 を呼び出して製品バージョン、価格、通貨をロックし、sessionId を取得
  2. 買い手はホスト型チェックアウトページ(または独自 UI)で請求情報を確認
  3. このエンドポイントを呼び出して注文を確定 — サーバが価格をスナップショットし、billingDetail を基に税額を計算、注文を書き込み、PSP checkout を作成
  4. 買い手は返された checkoutUrl にリダイレクトされ決済を完了
  • 価格スナップショット:注文作成時に価格を固定。以降の製品価格変更はこの注文に影響しません
  • 税額計算billingDetail(国、US/CA の州、EU の事業者 VAT)から税額を計算
  • PSP フォールトトレランス:PSP 呼び出しが失敗した場合、注文は自動的にロールバックされ、安全にリトライできます
  • メール正規化:サーバは税額計算、注文保存、Session 書き戻し、PSP 呼び出しの前に buyerEmailtrim().toLowerCase() で正規化。Foo@Bar.COMfoo@bar.com は同一買い手として扱います

リクエストボディ

フィールド必須説明
checkoutSessionIdstringYesCheckout Session 作成で返された session ID
billingDetailobject条件付き買い手の請求情報(下記参照)。Session に事前入力がない場合は必須
buyerEmailstring条件付き買い手のメールアドレス。Session に事前入力がない場合は必須。Session token が買い手の身元を保持する場合は無視されます
buyerIpstringNo買い手の IP アドレス(税額計算の精度向上に使用)
successUrlstringNoSession に設定された成功時リダイレクト URL を上書き
storeIdproductIdcurrency は checkout session にロック済みです。ボディで渡しても無視されます。

Billing Detail オブジェクト

フィールド必須説明
countrystringYesISO 3166-1 alpha-2 国コード
isBusinessbooleanYes事業者購入かどうか
postcodestringNo郵便番号
statestring条件付きUS および CA の場合は必須
businessNamestring条件付きisBusinesstrue の場合は必須
taxIdstring条件付きEU 国 + isBusinesstrue の場合は必須(VAT 番号)

リクエスト例

import { WaffoPancake } from "@waffo/pancake-ts";

const client = new WaffoPancake({
  sessionToken: window.WAFFO_SESSION_TOKEN, // マーチャントのポータルから注入
  environment: "prod",
});

const result = await client.orders.createOnetime({
  checkoutSessionId: "cs_550e8400-e29b-41d4-a716-446655440000",
  buyerEmail: "customer@example.com",
  billingDetail: {
    country: "US",
    isBusiness: false,
    state: "CA",
  },
  successUrl: "https://example.com/thank-you",
});

console.log(result.checkoutUrl); // "https://checkout.stripe.com/c/pay/cs_xxx"

成功レスポンス (200)

{
  "data": {
    "checkoutUrl": "https://checkout.stripe.com/c/pay/cs_xxx"
  }
}

レスポンスフィールド

フィールド説明
checkoutUrlstringホスト型 PSP 決済 URL — 買い手をここにリダイレクトして決済を完了

エラー

リトライポリシー:4xx は一切リトライしない — リクエストを修正してから再送信。5xx は指数バックオフでリトライ(5s 開始、最大 3 回)。
ステータスerrors[0].message意味推奨処理
400Invalid JSON bodyリクエストボディが有効な JSON ではないボディを修正してから再送信
400Missing required field: checkoutSessionIdcheckoutSessionId が提供されていないボディを修正してから再送信
400Session product type mismatch: expected onetimeSession がサブスクリプション製品で作成されている新しいワンタイム session を作成してリトライ
400Environment mismatch between request and sessionX-Environment が session の環境と一致しない一致する環境を使用して再送信
400Missing billingDetail: provide in request body or pre-fill in checkout sessionリクエストにも session にも billingDetail がないbillingDetail を提供してから再送信
400State is required for US/CAbillingDetail バリデーション失敗billingDetail を修正してから再送信
400Missing buyerEmail: provide in request body or pre-fill in checkout sessionリクエストにも session にも買い手メールがないbuyerEmail を提供してから再送信
401Authentication failedSession token が無効、期限切れ、または不正な形式Issue Session Token で再発行
403Session does not belong to this storeSession が別のストアのもの呼び出し元のストアに属する session を使用
409Checkout session invalid, please re-enter checkoutSession が存在しないか期限切れ新しい checkout session を作成してフローを再開
500Internal server errorサーバ側の予期しない障害指数バックオフでリトライ(5s 開始、最大 3 回)