# Issuing の取引

Issuing を使用して取引を処理する方法をご紹介します。

[オーソリ](https://docs.stripe.com/issuing/purchases/authorizations.md)が承認されてキャプチャーされると、オーソリの `status` が `closed` に設定され、[Transaction (取引)](https://docs.stripe.com/api.md#issuing_transaction_object) オブジェクトが作成されます。これは通常 24 時間以内に行われます。ただし、ホテル、航空会社、レンタカー会社は、オーソリ後最大 31 日以内であればキャプチャーできます。

オーソリがキャプチャされると、2 つのことが起こります。

- オーソリの `status` が `closed` に設定され、そのオーソリによって保留されている購入金額がリリースされます。これを示すために、タイプ `issuing_authorization_release` の[取引残高](https://docs.stripe.com/reports/balance-transaction-types.md)が作成されます。
- タイプ `capture` の新しい Transaction オブジェクトが作成されます。購入金額は [Issuing に使用している残高](https://docs.stripe.com/issuing/funding/balance.md)から差し引かれます。

(See full diagram at https://docs.stripe.com/issuing/purchases/transactions)

```text
+----------------------------------------+
| Authorization (オーソリ)                   |
+----------------------------------------+
| ID: iauth_123                          |
| status: closed                         |
| amount: 10 USD                         |
| transactions: ipi_123                  |
| balance_transactions: txn_123, txn_456 |
+----------------------------------------+

+------------------------------+
| Transaction (取引)             |
+------------------------------+
| ID: ipi_123                  |
| type: capture                |
| amount: -10 USD              |
| authorization: iauth_123     |
| balance_transaction: txn_789 |
+------------------------------+

+----------------------------------+
| Balance Transaction (取引残高)       |
+----------------------------------+
| ID: txn_123                      |
| type: issuing_authorization_hold |
| amount: -10 USD                  |
+----------------------------------+

+-------------------------------------+
| Balance Transaction (取引残高)          |
+-------------------------------------+
| ID: txn_456                         |
| type: issuing_authorization_release |
| amount: 10 USD                      |
+-------------------------------------+

+----------------------------+
| Balance Transaction (取引残高) |
+----------------------------+
| ID: txn_789                |
| type: issuing_transaction  |
| amount: -10 USD            |
+----------------------------+

[Authorization (オーソリ).transactions] --> [Transaction (取引)]
[Authorization (オーソリ).balance_transactions] --> [Balance Transaction (取引残高)]
[Authorization (オーソリ).balance_transactions] --> [Balance Transaction (取引残高)]
[Transaction (取引).balance_transaction] --> [Balance Transaction (取引残高)]
```

[支出管理](https://docs.stripe.com/issuing/controls/spending-controls.md)、[リアルタイムのオーソリ管理](https://docs.stripe.com/issuing/controls/real-time-authorizations.md)、およびカードステータス (カードが有効かどうか) をキャプチャーに適用しないでください。これらはオーソリが承認されるかどうかの判断に使用できますが、承認されたオーソリを常に成功としてキャプチャーします。

## その他の取引を処理する

通常の取引に加え、処理に対応できるようにする必要があるその他の取引もいくつか存在します。

#### 返金

返金は、[type](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-type) が `refund` の取引です。

返金やクレジットを表す取引を作成する際、それを元の支払いオーソリにリンクしようと試みます。返金は元の支払い取引やオーソリと必ずしも結び付いているわけではないため、正確にリンクできるとは限りません。その結果、関連のないオーソリにリンクされる場合や (カードへの返金ではなくクレジットが適用された場合など)、オーソリにまったくリンクできない場合があります。このような場合、取引の [authorization](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-authorization) フィールドは `null` に設定され、取引はオーソリにリンクされません。支払いオーソリへのリンクの有無に関係なく、すべての返金とクレジットは同じ方法で処理されます。

> お客様のクレジットカード[ステータス](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-status)が`非アクティブ`または`キャンセル`された場合でも、返金は処理され、入金されます。

### Standard 返金する例

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "amount": 100,
  "authorization": "iauth_1GBZQyEEsyYlpYZ9255L8GQC",
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": 100,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "taxicabs_limousines",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "refund"
}
```

### 返金する差戻し

まれなケースですが、返金の差戻しが必要になる場合があります。これは通常、重複する返金が処理され、1 つを差戻す必要がある場合に発生します。返金差戻しは、[type](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-type) が `refund` で、[amount](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-amount) フィールドがマイナス (標準返金では [amount](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-amount) フィールドがプラス) の取引として表されます。

たとえば、加盟店が同じ取引に対して誤って 17.70 USD の返金を 2 回処理した場合、システムは － 17.70 USD (または同様の金額で、外国交換の差額を計算) の返金する差戻し取引を作成し、重複する返金の 1 つを差戻します。

```json
{
  "id": "ipi_1SftmD05sFo7Lo8prb0oyBgc",
  "object": "issuing.transaction",
  "amount": -1770,
  "authorization": "iauth_1GBZQyEEsyYlpYZ9255L8GQC",
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": -1770,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "taxicabs_limousines",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "refund"
}
```

### 返金をテスト中

返金取引の作成をシミュレーションするには、Issuing テストヘルパーで [Transaction Refund (返金取引) API](https://docs.stripe.com/api/issuing/transactions/test_mode_refund.md) を使用できます。

```curl
curl -X POST https://api.stripe.com/v1/test_helpers/issuing/transactions/{{ISSUINGTRANSACTION_ID}}/refund \
  -u "<<YOUR_SECRET_KEY>>:"
```

オーソリにリンクされない返金取引を作成するには、Issuing テストヘルパーで [Create Unlinked Refund (リンクされない返金の作成) API](https://docs.stripe.com/api/issuing/transactions/test_mode_create_unlinked_refund.md) を使用します。

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/transactions/create_unlinked_refund \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "card={{ISSUINGCARD_ID}}" \
  -d amount=1000
```

#### 一部キャプチャ

加盟店は、オーソリ済みの金額よりも少ない金額をキャプチャーできます。その結果、取引には、関連付けられたオーソリよりも少ない金額が表示されることがあります。この場合、Stripe がオーソリのために保留する売上金額は、関連付けられたすべてのキャプチャー取引金額とオーソリ金額との差となります。

### テスト

オーソリ額を下回るオーソリのキャプチャーをシミュレーションするには、Issuing テストヘルパーで [Authorization Capture (オーソリのキャプチャー) API](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) を使用できます。

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000
```

#### オーバーキャプチャ

一部の[加盟店カテゴリー](https://docs.stripe.com/issuing/categories.md) (レンタカー、バー、レストラン、陸上交通機関など) の企業は、オーソリ時点で最終的な取引金額を把握していません。これらのビジネスは、ある金額でカードをオーソリしてから、その金額を超える売上をキャプチャーできます。

たとえば、レストランでは、請求額の支払いをオーソリしてから、チップを含む金額をキャプチャーすることがよくあります。この場合、オーソリされた金額は、キャプチャーされる金額と比較的近くなります。しかし、陸上交通機関などの場合、オーソリされる金額は通常最小額で、キャプチャーされる金額にはカード保有者の実際の取引が反映されます。

場合によっては、キャプチャーされる追加金額が非常に多く、不正行為が行われている可能性もあります。不正行為かどうかを特定し、違法な取引に対して[不審請求を申請する](https://docs.stripe.com/issuing/purchases/disputes.md)のは、お客様 (またはカード保有者) の責任です。オーバーキャプチャーは正当な場合が多いため、これらの取引をブロックすることはできません。

### テスト

オーソリ額を超えるオーソリのキャプチャーをシミュレーションするには、Issuing テストヘルパーで [Authorization Capture API](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) を使用できます。

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000
```

#### マルチキャプチャ

特定の[加盟店カテゴリー](https://docs.stripe.com/issuing/categories.md)(航空会社、クルーズライン、または鉄道加盟店など) は、取引を承認してから、売上を複数回キャプチャーすることがあります。このような状況は、複数のアイテムを購入し、準備ができたタイミングで別々に出荷されるときに発生する可能性があります。これにより、複数の `issuing_authorization.updated` [Webhook イベント](https://docs.stripe.com/api/events/types.md#event_types-issuing_authorization.updated)と複数の [Transactions (取引)](https://docs.stripe.com/api.md#issuing_transaction_object) が作成されます。

### テスト

複数回のオーソリのキャプチャーをシミュレーションするには、Issuing テストヘルパーで [Authorization Capture API](https://docs.stripe.com/api/issuing/authorizations/test_mode_capture.md) を使用できます。

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/{{ISSUINGAUTHORIZATION_ID}}/capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d capture_amount=1000 \
  -d close_authorization=false
```

`close_authorization = false` に設定している間は繰り返しオーソリをキャプチャーできます。オーソリを終了するには、値を `true` に設定するか、パラメーターを省略します。

#### 強制的なキャプチャ

加盟店は、オーソリが拒否された場合でも、またはオーソリがなくても、キャプチャーを開始することがあります。いずれの場合も、Stripe は、Transaction オブジェクトを作成して、キャプチャーされた金額を Issuing 残高から引き落とし、加盟店に送金します。キャプチャーのオーソリリクエストを受け取らなかった場合は、Transaction オブジェクトに関連付けられた Authorization オブジェクトはありません。

このような取引は、正当な購入に対応していることもありますが、オーソリされていない購入または不正行為の場合もあります。どちらに当てはまるのかを特定し、違法な取引に対して[不審請求を申請する](https://docs.stripe.com/issuing/purchases/disputes.md)のは、お客様 (またはカード保有者) の責任です。これらの取引の中には正当なものもあるので、ブロックすることはできません。

オーソリを伴わない正当な取引の例として、飛行機内での決済があります。飛行機で使用される端末は通常、インターネットに接続されていません。フライト中の購入はオーソリを作成できず、代わりに飛行機が着陸した後に送信される取引を作成します。

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "amount": -100,
  "authorization": null,
  "balance_transaction": null,
  "card": "{{CARD_ID}}",
  "cardholder": null,
  "created": 1585783834,
  "currency": "usd",
  "livemode": false,
  "merchant_amount": -100,
  "merchant_currency": "usd",
  "merchant_data": {
    "category": "airlines_air_carriers",
    "city": "San Francisco",
    "country": "US",
    "name": "Rocket Rides",
    "network_id": "1234567890",
    "postal_code": "94111",
    "state": "CA",
    "url": null
  },
  "metadata": {},
  "type": "capture"
}
```

### テスト

強制キャプチャーの作成をシミュレーションするには、Issuing テストヘルパーで [Transaction Create Force Capture (取引の強制キャプチャー作成) API](https://docs.stripe.com/api/issuing/transactions/test_mode_create_force_capture.md) を使用できます。

```curl
curl https://api.stripe.com/v1/test_helpers/issuing/transactions/create_force_capture \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "card={{ISSUINGCARD_ID}}" \
  -d amount=100
```

## 取引

[FinancialAccount](https://docs.stripe.com/api/treasury/financial_accounts.md) でキャプチャーまたは返金された取引には、[treasury](https://docs.stripe.com/api/issuing/transactions/object.md#issuing_transaction_object-treasury) フィールドの下にリンクされた対応する [ReceivedDebit](https://docs.stripe.com/treasury/connect/legacy/v1/moving-money/out-of/received-debits.md) または [ReceivedCredit](https://docs.stripe.com/treasury/connect/legacy/v1/moving-money/into/received-credits.md) もあります。

#### キャプチャー/ReceivedDebit

```json
{
  "id": "ipi_1GTG10EEsyYlpYZ9VJn2xV3B",
  "object": "issuing.transaction",
  "type": "capture",
  "treasury": {
    "received_debit": "rd_1KsVPhACgxNDEoMCiKgN6Fm4"
  }
}
```

#### 返金/ReceivedCredit

```json
{
  "id": "ipi_1KsZDkACgxNDEoMCiTUeOVGE",
  "object": "issuing.transaction",
  "type": "refund",
  "treasury": {
    "received_credit": "rc_1KsZDlACgxNDEoMCLbv2O2PP"
  }
}
```

これらのキャプチャーと返金が FinancialAccounts に与える取引残高の影響は、[Transactions](https://docs.stripe.com/api/treasury/transactions.md) に反映されます。[BalanceTransactions](https://docs.stripe.com/api/balance_transactions.md) はありません。
