商品バージョン、価格、通貨を固定するチェックアウトセッションを作成します。これは単発商品とサブスクリプション商品の両方のチェックアウトフローの最初のステップです。
一般的なフローは次のとおりです:
- マーチャントがチェックアウトセッションを作成(サーバーサイド)
checkoutUrl をフロントエンドに返す
- 消費者がリンクをクリックしてホスティングチェックアウトページにアクセス
- 消費者が請求情報を入力し、税金をプレビューし、注文を完了
POST /v1/actions/checkout/create-session
認証: API Key or Store Slug
リクエストボディ (API Key)
| フィールド | 型 | 必須 | 説明 |
|---|
storeId | string | はい | ストア ID(Short ID 形式 STO_xxx) |
productId | string | はい | 商品 ID(Short ID 形式 PROD_xxx) |
productType | string | はい | onetime または subscription |
currency | string | はい | ISO 4217 通貨コード(例:USD、EUR、JPY) |
priceSnapshot | object | いいえ | セッション作成時の価格オーバーライド(API Key のみ) |
withTrial | boolean | いいえ | トライアル期間を有効にする(サブスクリプション商品のみ) |
buyerEmail | string | いいえ | チェックアウトページで消費者のメールを事前入力 |
billingDetail | object | いいえ | 請求詳細を事前入力(下記参照) |
successUrl | string | いいえ | 支払い成功後のリダイレクト URL のオーバーライド |
expiresInSeconds | number | いいえ | セッション TTL(秒)(デフォルト:2700 = 45分、API Key のみ) |
darkMode | boolean | いいえ | チェックアウトページのダークモードを有効にする |
metadata | object | いいえ | セッションに添付するカスタムキーバリューペア |
リクエストボディ (Store Slug)
| フィールド | 型 | 必須 | 説明 |
|---|
productId | string | はい | 商品 ID(Short ID 形式 PROD_xxx) |
productType | string | はい | onetime または subscription |
currency | string | はい | ISO 4217 通貨コード |
withTrial | boolean | いいえ | トライアル期間を有効にする(サブスクリプション商品のみ) |
buyerEmail | string | いいえ | 消費者のメールを事前入力 |
billingDetail | object | いいえ | 請求詳細を事前入力(下記参照) |
successUrl | string | いいえ | 支払い成功後のリダイレクト URL のオーバーライド |
darkMode | boolean | いいえ | チェックアウトページのダークモードを有効にする |
metadata | object | いいえ | セッションに添付するカスタムキーバリューペア |
Store Slug 認証では、クライアント側からの価格改ざんとセッション操作を防止するため、priceSnapshot と expiresInSeconds はサポートされていません。
請求詳細オブジェクト
| フィールド | 型 | 必須 | 説明 |
|---|
country | string | はい | ISO 3166-1 alpha-2 国コード(例:US、JP、DE) |
isBusiness | boolean | はい | ビジネス購入かどうか |
postcode | string | いいえ | 郵便番号 |
state | string | 条件付き | US と CA の場合に必須(例:CA、NY、ON) |
businessName | string | 条件付き | isBusiness が true の場合に必須 |
taxId | string | 条件付き | isBusiness が true の場合に EU 諸国で必須(VAT 番号) |
セッションロック
チェックアウトセッションが作成されると、以下の値が固定され、セッションの有効期間中は変更できません:
productVersionId, productName, priceInfo, storeName, billingPeriod, withTrial, theme, buyerEmail, billingDetail
リクエスト例
import { WaffoPancake, CheckoutSessionProductType } from "@waffo/pancake-ts";
const client = new WaffoPancake({
merchantId: process.env.WAFFO_MERCHANT_ID!,
privateKey: process.env.WAFFO_PRIVATE_KEY!,
});
const session = await client.checkout.createSession({
storeId: "STO_2D5F8G3H1K4M6N9P",
productId: "PROD_7J3K5L8M2N4P6Q9R",
productType: CheckoutSessionProductType.Onetime,
currency: "USD",
buyerEmail: "customer@example.com",
successUrl: "https://example.com/thank-you",
});
console.log(session.sessionId); // "cs_550e8400-e29b-41d4-a716-446655440000"
console.log(session.checkoutUrl); // "https://checkout.waffo.ai/..."
console.log(session.expiresAt); // "2026-01-22T10:30:00.000Z"
成功レスポンス
{
"data": {
"sessionId": "cs_550e8400-e29b-41d4-a716-446655440000",
"checkoutUrl": "https://checkout.waffo.ai/my-store-abc123/checkout/cs_550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2026-01-22T10:30:00.000Z"
}
}
レスポンスフィールド
| フィールド | 型 | 説明 |
|---|
sessionId | string | チェックアウトセッション ID(cs_ + UUID 形式、Short ID ではありません) |
checkoutUrl | string | 消費者をホスティングチェックアウトページにリダイレクトするための完全な URL |
expiresAt | string | セッションの有効期限(ISO 8601 タイムスタンプ) |
エラー
| ステータス | メッセージ | 説明 |
|---|
| 400 | 必須フィールドが欠落しています | productId、productType、または currency が欠落しています |
| 400 | Invalid productType | onetime または subscription でなければなりません |
| 400 | Invalid billingDetail | 請求詳細のバリデーション失敗(例:US の場合に state が欠落) |
| 401 | Unauthorized | 無効な API Key 署名または Store Slug |
| 403 | Store not active | ストアが active ステータスではありません |
| 403 | Store not production enabled | ストアがライブ支払いを処理できません |
| 403 | Product not in store | 商品が指定されたストアに属していません |
| 404 | ストアが見つかりません | 指定された storeId またはスラッグに一致するストアがありません |
| 404 | 商品が見つかりません | 指定された productId に一致する商品がありません |
デフォルトのセッション TTL は45分(2700秒)です。API Key 認証を使用する場合、expiresInSeconds でカスタマイズできます。セッションは作成時に商品バージョンと価格を固定するため、価格変更は既存のセッションに影響しません。