# Revisar os pagamentos não capturados

Saiba como usar análises se sua integração da Stripe usar autenticação e captura.

Por padrão, você [cria pagamentos](https://docs.stripe.com/payments/accept-a-payment.md) em uma única etapa. Você não precisa fazer mais nada para enviar fundos para sua conta bancária. A Stripe também suporta pagamentos em duas etapas, geralmente chamados de [autorização e captura](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md). Se a sua integração usar esse método, a aprovação de uma revisão e a captura de um pagamento são ações separadas.

Sua janela de captura para pagamentos aprovados varia de acordo com a [bandeira do cartão](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#authorization-validity-windows), possíveis [retenções estendidas](https://docs.stripe.com/payments/extended-authorization.md) e o [tipo de forma de pagamento](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#auth-capture-limitations).

## Revisar os pagamentos não capturados no Dashboard

Quando colocamos um pagamento não capturado em revisão, o Stripe Dashboard mostra um botão **Captura** ao lado de botões para aprovar ou cancelar a revisão. Os pagamentos não capturados mostram um botão **Cancelar** em vez de um botão **Reembolsar** porque o cancelamento de um pagamento não capturado libera a autorização sem criar um [objeto de reembolso](https://docs.stripe.com/api/refunds.md) .

> A aprovação da revisão não captura automaticamente a cobrança. Você precisa clicar em **Capturar**.
![](https://b.stripecdn.com/docs-statics-srv/assets/uncaptured-payment.b9aab5781bebea8e1cc8f349dc2092bf.png)

## Use a API para capturar automaticamente os pagamentos aprovados

Na API, você pode configurar a integração para:

- Capturar imediatamente payments_not_placed para `review`.
- Deixe os pagamentos enviados para `review` sem captura
- Capturar o pagamento após a aprovação da revisão

### Capture imediatamente pagamentos não enviados para revisão

Defina o `capture_method` em sua solicitação de API para criar um pagamento não capturado. Após uma solicitação bem-sucedida, verifique o atributo [revisão](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-review) no PaymentIntent. Se ele estiver vazio, capture a cobrança.

#### Rubi

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

### Capturar um pagamento após a aprovação de uma revisão

Na etapa anterior, você deixou os pagamentos em `review` e não foram capturados. Use *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) para capturar automaticamente esses pagamentos após a aprovação.

Configure seus Webhooks para ver o evento `review.closed`. O evento inclui o objeto [Revisão](https://docs.stripe.com/api.md#review_object), e seu atributo `reason` indica se a revisão foi aprovada ou fechada por outro motivo (por exemplo, o pagamento foi reembolsado).

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

Se `reason` for `approved`, capture a cobrança.

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