> ## Documentation Index
> Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# サンドボックスシミュレーター

> サンドボックス環境でさまざまな決済シナリオをシミュレートするための説明。

サンドボックス環境は実際の決済チャネルに接続されておらず、代わりに決済結果を直接コントロールし、連携ロジックを素早く検証できるシミュレーターが提供されています。

## 単発決済のシミュレーション

<Steps>
  <Step title="注文の作成">
    `POST /api/v1/order/create` を呼び出して注文を作成します。
  </Step>

  <Step title="チェックアウト URL の取得">
    応答の `orderAction` からチェックアウト URL を取得します。
  </Step>

  <Step title="チェックアウトページを開く">
    ブラウザでチェックアウトページを開きます。ページにシミュレーションボタンが表示されます。
  </Step>

  <Step title="決済結果を選択">
    対応するボタンをクリックして決済結果をシミュレートします。

    * **決済成功** — ユーザーが決済を完了したことをシミュレートします。注文ステータスは `PAY_SUCCESS` に変わります。
    * **決済失敗** — 決済が拒否されたことをシミュレートします。注文ステータスは `ORDER_CLOSE` に変わります。

    クリック後、Waffo は自動的に `PAYMENT_NOTIFICATION` Webhook を `notifyUrl` に送信します。
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/waffo-docs/Pi4mlrktV3FjQDJZ/images/developer-docs/sandbox-simulator/payment-simulator.png?fit=max&auto=format&n=Pi4mlrktV3FjQDJZ&q=85&s=e7e32c7af13835c81798f8c66a5e7b96" alt="サンドボックス決済シミュレーター画面" width="1110" height="1878" data-path="images/developer-docs/sandbox-simulator/payment-simulator.png" />
</Frame>

<Note>
  サンドボックスのチェックアウトはシミュレーター画面です。実際の決済手段選択やカード番号入力はありません。シミュレーションフローはすべての決済手段で共通です。
</Note>

実際のカード番号入力フローをシミュレートする必要がある場合 (例: 3DS のテスト)、下記の[テストカード番号](#test-card-numbers) セクションのテストカード番号を使用できます。ほとんどのシナリオではシミュレーションボタンで十分です。

## サブスクリプションのシミュレーション

### 初回決済

初回決済は単発決済と同じフローです。

<Steps>
  <Step title="サブスクリプションの作成">
    `POST /api/v1/subscription/create` を呼び出してサブスクリプションを作成します。
  </Step>

  <Step title="チェックアウトページを開く">
    応答からチェックアウト URL を取得し、ブラウザで開きます。
  </Step>

  <Step title="初回決済のシミュレーション">
    **決済成功**または**決済失敗**をクリックします。初回決済成功後、サブスクリプションステータスは `ACTIVE` に変わり、`SUBSCRIPTION_STATUS_NOTIFICATION` がトリガーされます。
  </Step>
</Steps>

### 更新決済のシミュレーション

サブスクリプションがアクティベートされた後、実際の請求サイクルが満了するのを待たずに更新を素早くテストできます。

<Steps>
  <Step title="管理ページ URL の取得">
    `POST /api/v1/subscription/manage` を呼び出して管理ページ URL を取得します。

    <CodeGroup>
      ```json Request theme={null}
      {
        "subscriptionId": "SUB20260325000001"
      }
      ```

      ```json Response theme={null}
      {
        "code": "0",
        "msg": "Success",
        "data": {
          "managementUrl": "https://cashier.waffo.com/subscription/manage?token=xxx",
          "expiredAt": "2026-03-25T11:00:00.000Z"
        }
      }
      ```
    </CodeGroup>
  </Step>

  <Step title="管理ページを開く">
    `managementUrl` をブラウザで開きます。
  </Step>

  <Step title="更新結果のシミュレーション">
    管理ページには 2 つのシミュレーションボタンが表示されます。

    * **次回決済成功のシミュレート** — 更新成功をトリガーします。`PAYMENT_NOTIFICATION` と `SUBSCRIPTION_PERIOD_CHANGED_NOTIFICATION` を送信します。
    * **次回決済失敗のシミュレート** — 更新失敗をトリガーします。`PAYMENT_NOTIFICATION` (失敗) を送信します。
  </Step>
</Steps>

<Note>
  ボタンクリックごとに 1 つの更新期間がシミュレートされます。複数回クリックして複数期間のシナリオ (例: 2 期目が成功、3 期目が失敗) をテストできます。
</Note>

サブスクリプション更新管理ページの例:

<Frame>
  <img src="https://mintcdn.com/waffo-docs/rmCSHSqVvv7UyIAx/images/developer-docs/sandbox-simulator/subscription-renewal-simulator.png?fit=max&auto=format&n=rmCSHSqVvv7UyIAx&q=85&s=a488ab3312d460a3c15fecd695d2dae8" alt="サブスクリプション更新シミュレーター管理ページの例" width="599" height="1065" data-path="images/developer-docs/sandbox-simulator/subscription-renewal-simulator.png" />
</Frame>

### サブスクリプションキャンセルのシミュレーション

管理ページはユーザーによるキャンセルにも対応しており、`SUBSCRIPTION_STATUS_NOTIFICATION` がトリガーされ、ステータスが `USER_CANCELLED` に変わります。

## 特殊金額での例外再現

<Warning>
  以下の金額はサンドボックスの受け入れテストと例外処理テスト専用です。サンドボックス環境でこれらの金額を渡すと、Waffo は対応するエラーコードを意図的に返します。これは本番環境のルールではありません。
</Warning>

以下の値は現在の受け入れテンプレートに基づいており、特定の例外を素早く再現できます。

| シナリオ                                                 | 例の金額                             | 期待される結果                           |
| ---------------------------------------------------- | -------------------------------- | --------------------------------- |
| ワンタイム決済の注文作成でチャネル拒否                                  | `90`、`990`、`1990`、`19990`        | `C0005 Payment Channel Rejection` |
| サブスクリプション作成でチャネル拒否                                   | `90`、`990`、`1990`、`19990`        | `C0005 Payment Channel Rejection` |
| 注文作成 / サブスクリプション作成のシステムエラー                           | `9.1`、`91`、`991`、`1991`、`19991`  | `C0001 System Error`              |
| 注文作成 / サブスクリプション作成の Unknown Status                   | `9.2`、`92`、`992`、`1992`、`19992`  | `E0001 Unknown Status`            |
| キャンセル API のシステムエラー（注文キャンセル / サブスクリプションキャンセル）         | `9.3`、`93`、`993`、`1993`、`19993`  | `C0001 System Error`              |
| キャンセル API の Unknown Status（注文キャンセル / サブスクリプションキャンセル） | `9.4`、`94`、`994`、`1994`、`19994`  | `E0001 Unknown Status`            |
| 返金 API のシステムエラー                                      | `9.5`、`95`、`995`、`1995`、`19995`  | `C0001 System Error`              |
| 返金 API の Unknown Status                              | `9.6`、`96`、`996`、`1996`、`199996` | `E0001 Unknown Status`            |

* 通常の成功 / 失敗フローだけを確認したい場合は、上記の金額を避けてください。
* `A0011` は特殊金額ではなく、同じリクエスト ID に異なる金額または通貨を組み合わせたときに発生します。
* 返金 `A0003` も特殊金額ではなく、返金額が元の支払額を超えたときに発生します。

## テストカード番号

### クレジットカード

| payMethodName  | 成功用カード番号           | 失敗用カード番号           |
| -------------- | ------------------ | ------------------ |
| CC\_VISA       | `4576750000000110` | `4576750000000220` |
| CC\_MASTERCARD | `2226900000000110` | `2226900000000220` |
| CC\_JCB        | `3528000000000440` | `3528000000000660` |
| CC\_AMEX       | `3799960000000110` | `3799960000000220` |

### デビットカード

| payMethodName  | 成功用カード番号           | 失敗用カード番号           |
| -------------- | ------------------ | ------------------ |
| DC\_VISA       | `4001700000000110` | `4001700000000220` |
| DC\_MASTERCARD | `2226930000000110` | `2226930000000220` |
| DC\_JCB        | `3088200000000440` | `3088200000000660` |
| DC\_AMEX       | `3421560000000110` | `3421560000000220` |

### 共通情報

* 有効期限: 任意の将来の日付
* CVV: 任意の 3 桁の数字 (AMEX は 4 桁)

## サンドボックス環境情報

| 項目      | 値                               |
| ------- | ------------------------------- |
| ベース URL | `https://api-sandbox.waffo.com` |
| SDK 設定  | `Environment.SANDBOX`           |

<Warning>
  サンドボックス環境は本番環境とは異なる API キーおよび RSA 鍵ペアを使用します。混在させないでください。
</Warning>
