動作
- 価格スナップショット:注文作成時にサブスクリプション価格を凍結します(
price_snapshot)。二段階価格(regularPhase+ オプションのspecialPhase、後者は試用期間用)をサポート。 - 請求期間のマッピング:
weekly->week/1、monthly->month/1、quarterly->month/3、yearly->year/1。 - PSP フォールトトレランス:PSP 呼び出しが失敗した場合、ローカル注文は自動的にキャンセルされエラーが返却されます。
- Session プリフィル:リクエストボディの
billingDetailとbuyerEmailは session 上のプリフィル値を上書きします。両方とも欠落している場合は 400 で拒否。 - メール正規化:
buyerEmailは使用前にtrim().toLowerCase()で正規化されます。
storeId、productId、billingPeriod、currency。送信されても無視されます。
リクエストボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
checkoutSessionId | string | 必須 | create-checkout-session から返された checkout session ID |
billingDetail | object | 条件付き必須 | 買い手の請求情報。session にプリフィルされていない場合は必須 |
billingDetail.country | string | billingDetail がある場合は必須 | 国コード(ISO 3166-1 alpha-2) |
billingDetail.isBusiness | boolean | billingDetail がある場合は必須 | 法人購入かどうか |
billingDetail.postcode | string | 任意 | 郵便番号 |
billingDetail.state | string | US/CA は必須 | 州 / 省コード |
billingDetail.businessName | string | isBusiness=true の場合は必須 | 法人名 |
billingDetail.taxId | string | EU 法人買い手の場合は必須 | 税番号(例:DE123456789) |
buyerEmail | string | 条件付き必須 | 買い手のメールアドレス。session にプリフィルされていない場合は必須 |
buyerIp | string | 任意 | 買い手の IP アドレス(税計算に使用) |
successUrl | string | 任意 | 決済後のリダイレクト URL。session レベルの値を上書き |
リクエスト例
成功レスポンス (200)
レスポンスフィールド
| フィールド | 型 | 説明 |
|---|---|---|
checkoutUrl | string | PSP 決済ページの URL。買い手をリダイレクトして支払いを完了させる |
エラー
リトライポリシー:4xx は一切リトライしない — リクエストを修正してから再送信。5xx は指数バックオフでリトライ(5s 開始、最大 3 回)。
| ステータス | errors[0].message | 意味 | 推奨処理 |
|---|---|---|---|
| 400 | Invalid JSON body | リクエストボディが有効な JSON ではない | リクエストボディを修正してから再送信 |
| 400 | Missing required field: checkoutSessionId | checkoutSessionId が提供されていない | リクエストボディを修正してから再送信 |
| 400 | Session product type mismatch: expected subscription | Session が非サブスクリプション製品で作成されている | サブスクリプション製品で作成された session を使用 |
| 400 | Environment mismatch between request and session | リクエストの X-Environment が session の環境と一致しない | リクエスト環境を session 環境に合わせる |
| 400 | Session missing subscription information (productVersionId or billingPeriod) | Session に必須のサブスクリプションフィールドが欠落 | Checkout session を再作成 |
| 400 | Missing billingDetail: provide in request body or pre-fill in checkout session | ボディと session の両方に billingDetail がない | リクエストボディに billingDetail を含めて再送信 |
| 400 | State is required for US/CA | US / CA の買い手には billingDetail.state が必須 | billingDetail.state を追加して再送信 |
| 401 | Authentication failed | Session token が無効、期限切れ、または不正な形式 | Issue Session Token で再発行 |
| 403 | Session does not belong to this store | Session が別のストアに属している | Session のストア所有権を確認 |
| 409 | Checkout session invalid, please re-enter checkout | Session が存在しないか期限切れ | Checkout session を再作成 |
| 500 | Internal server error | サーバ側の予期しない障害 | 指数バックオフでリトライ(5s 開始、最大 3 回) |