# キャプチャされていない決済のレビュー

Stripe の実装がオーソリとキャプチャーを使用している場合の、審査の使用方法をご紹介します。

デフォルトでは、1 ステップで [決済を作成](https://docs.stripe.com/payments/accept-a-payment.md) します。銀行口座に資金を送金するために、他に必要な操作はありません。Stripe は、[オーソリとキャプチャ](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md) と呼ばれる 2 ステップの決済もサポートしています。導入でこの方法を使用する場合、レビューの承認と決済のキャプチャは別のアクションです。

承認された決済をキャプチャする期間は、[カードブランド](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#authorization-validity-windows)、[保留の延長](https://docs.stripe.com/payments/extended-authorization.md) の可能性、[決済手段タイプ](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#auth-capture-limitations) によって異なります。

## キャプチャされていない決済をダッシュボードでレビュー

キャプチャされていない決済をレビュー対象にすると、Stripe ダッシュボードではレビューを承認またはキャンセルするボタンの横に **キャプチャ** ボタンが表示されます。キャプチャされていない決済をキャンセルすると、[Refund オブジェクト](https://docs.stripe.com/api/refunds.md) を作成せずにオーソリが解除されるため、キャプチャされていない決済には **返金** ボタンではなく **キャンセル** ボタンが表示されます。

> 審査を承認しても、決済は自動的にキャプチャされません。**キャプチャ** ボタンをクリックする必要があります。
![](https://b.stripecdn.com/docs-statics-srv/assets/uncaptured-payment.b9aab5781bebea8e1cc8f349dc2092bf.png)

## API を使用して承認済みの決済を自動キャプチャする

API を使用して、組み込みが以下に対応できるように設定できます。

- `review` に配置 _ されていない_ 決済を即座にキャプチャする
- `review` 対象となった決済をキャプチャしないままにする。
- 審査が承認されたら、決済をキャプチャする。

### 審査対象外の決済を即座にキャプチャする

API リクエストで `capture_method` を設定し、キャプチャされていない決済を作成します。リクエストが成功したら、PaymentIntent の [review](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-review) 属性を確認します。空の場合は、決済をキャプチャします。

#### Ruby

```ruby

# Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
# Find your keys at https://dashboard.stripe.com/apikeys.
client = Stripe::StripeClient.new('<<YOUR_SECRET_KEY>>')

# Get the credit card details submitted by the form
# Create a PaymentIntent with manual capture
payment_intent = client.v1.payment_intents.create({
  amount: 1000,
  currency: 'usd',
  payment_method: '{{PAYMENT_METHOD_ID}}',
  description: 'Example charge',
  confirm: true,
  capture_method: 'manual',
})

# Check if the payment is in review. If not, capture it.
if !payment_intent.review
  client.v1.payment_intents.capture(payment_intent.id)
end
```

### レビュー承認後の決済をキャプチャする

前のステップでは、決済を `review` 中およびキャプチャしていないままにしました。承認後にこれらの決済を自動的にキャプチャするには、*webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) を使用します。

`review.closed` イベントをリッスンするように webhook を設定します。このイベントには [Review オブジェクト](https://docs.stripe.com/api.md#review_object) が含まれ、その `reason` 属性は、レビューが承認されたか、別の理由 (決済が返金されたなど) で終了したかを示します。

```json
// Review object included in review.closed event webhook.
{
  "id": "prv_08voh1589O8KAxCGPcIQpmkz",
  "object": "review",
  "payment_intent": "pi_1D0CsEITpIrAk4QYdrWDnbRS",
  "created": 1474379631,
  "livemode": false,
  "open": false,
  "reason": "approved"
}
```

`reason` が `approved` の場合、支払いをキャプチャします。

```ruby

# Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
# Find your keys at https://dashboard.stripe.com/apikeys.
client = Stripe::StripeClient.new('<<YOUR_SECRET_KEY>>')

post "/my/webhook/url" do
  event_json = JSON.parse(request.body.read)
  event = client.v1.events.retrieve(event_json["id"])

  if event.type == 'review.closed'
    review = event.object
    if review.reason == 'approved'
      pi = client.v1.payment_intents.retrieve(review.payment_intent)
      client.v1.payment_intents.capture(pi.id)
    end
  end

  status 200
end
```
