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

# カード決済

> ホスト型チェックアウトによるカード決済の統合方法

## 概要

カード決済は**ホスト型チェックアウト**を使用します。APIレスポンスの`payment_url`にユーザーをリダイレクトするだけで、カード入力から3Dセキュア認証まで自動的に処理されます。

## 決済フロー

<Steps>
  <Step title="決済作成">
    `POST /v1/payments` を呼び出して決済を作成し、`payment_url` を取得
  </Step>

  <Step title="リダイレクト">
    ユーザーを `payment_url` にリダイレクト
  </Step>

  <Step title="決済完了">
    決済完了後、設定済みの `success_redirect_url` または `failure_redirect_url` に自動リダイレクト
  </Step>
</Steps>

## 実装例

```javascript theme={null}
// 1. APIで決済を作成
const response = await fetch('https://api.sandbox.zafapay.com/v1/payments', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    amount: 100,
    currency: 'usd'
  })
});

const payment = await response.json();

// 2. ホスト型チェックアウトにリダイレクト
window.location.href = payment.payment_url;

// 3. ユーザーはホストページで決済を完了
// 4. success_redirect_url または failure_redirect_url にリダイレクト
```

## オーソリ & キャプチャ

2段階決済（オーソリ後にキャプチャ）の場合：

```javascript theme={null}
// ステップ1: オーソリ
const payment = await createPayment({
  amount: 100,
  currency: 'usd',
  capture_method: 'manual'  // オーソリのみ
});

// ステップ2: キャプチャ（課金準備完了時）
await fetch(`https://api.sandbox.zafapay.com/v1/payments/${payment.transaction_id}/capture`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  }
});
```

## テストカード

| カード番号            | 説明       |
| ---------------- | -------- |
| 4242424242424242 | 決済成功     |
| 4000002500003155 | 3Dセキュア必要 |
| 4000000000000002 | 拒否       |
| 4000000000000259 | チャージバック  |
| 4000000000009995 | 残高不足     |
| 4000000000009987 | カード紛失    |
| 4000000000009979 | カード盗難    |
| 4000000000000069 | 有効期限切れ   |
| 4000000000000127 | CVC不一致   |
| 4000000000000119 | 処理エラー    |

<Info>
  APIパラメータとレスポンスの詳細は、[決済作成](/api-reference/payments/create-payment) APIリファレンスをご覧ください。
</Info>
