# 查看未捕获的付款

在您的 Stripe 集成使用授权和捕获的情况下，了解如何使用审核功能。

默认情况下，您可以一步[创建付款](https://docs.stripe.com/payments/accept-a-payment.md)，无需执行任何其他操作即可将资金转入到您的银行账户。Stripe 还支持两步付款，通常称为[授权和捕获](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)。如果您的集成使用此方法，则批准审核和捕获付款是两个独立的操作。

您已获批准付款的捕获窗口因[卡品牌](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 管理平台会在批准或取消审核的按钮旁边显示一个**捕获**按钮。未捕获的付款会显示一个**取消**按钮，而不是**退款**按钮，因为取消未捕获的付款会释放授权，而不会创建[退款对象](https://docs.stripe.com/api/refunds.md)。

> 批准审核并不会自动捕获收款。仍然需要点击**捕获**。
![](https://b.stripecdn.com/docs-statics-srv/assets/uncaptured-payment.b9aab5781bebea8e1cc8f349dc2092bf.png)

## 使用 API 自动捕获批准的付款

通过 API，您可以设置您的集成，使其：

- 立即捕获未被置于`审核`状态的 payments_not_placed
- 不捕获处于`审核`状态的付款。
- 审核通过后捕获付款。

### 立即捕获未被送入审核的付款

在您的 API 请求中将`capture_method`设置为创建未捕获的付款。请求成功后，检查 PaymentIntent 的[审核](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
```

### 审核通过后捕获付款

在上一步中，您将付款置于`审核`状态且未捕获。使用*webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)在批准后自动捕获这些付款。

配置您的 Webhook 以侦听 `review.closed` 事件。该事件数据包括[审核对象](https://docs.stripe.com/api.md#review_object)，其`理由`属性指示审核是已批准还是因其他原因（例如，付款已退款）而关闭。

```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
```
