# Revisa pagos no capturados Obtén información sobre cómo usar las revisiones si tu integración de Stripe usa autorización y captura. Por defecto, [creas pagos](https://docs.stripe.com/payments/accept-a-payment.md) en un solo paso. No necesitas hacer nada más para enviar fondos a tu cuenta bancaria. Stripe también admite pagos en dos pasos, a menudo denominados [autorización y captura](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md). Si tu integración utiliza este método, aprobar una revisión y capturar un pago son acciones separadas. Su ventana de captura para pagos aprobados varía según [marca de tarjeta](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#authorization-validity-windows), posibles [retenciones ampliadas](https://docs.stripe.com/payments/extended-authorization.md) y [tipo de método de pago](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#auth-capture-limitations). ## Revisa los pagos no capturados en el Dashboard Cuando ponemos un pago no capturado en revisión, el Dashboard de Stripe muestra una opción de **Captura** junto con las opciones para aprobar o cancelar la revisión. Los pagos no capturados muestran la opción **Cancelar** en lugar de la opción **Reembolsar** porque al cancelar un pago no capturado se libera la autorización sin crear un [objeto de reembolso](https://docs.stripe.com/api/refunds.md). > La aprobación de la revisión no genera la captura automática del cargo. También debes hacer clic en **Capturar**. ![](https://b.stripecdn.com/docs-statics-srv/assets/uncaptured-payment.b9aab5781bebea8e1cc8f349dc2092bf.png) ## Utiliza la API para capturar de forma automática los pagos aprobados A través de la API, puedes configurar tu integración para que: - Captura de inmediato los pagos que *no* se hayan puesto en `review`. - Deja los pagos en `review` sin capturar. - Cuando se apruebe la revisión, captura el pago. ### Captura de inmediato los pagos que no estén en revisión Establece el `capture_method` en tu solicitud API para crear un pago sin capturar. Tras una solicitud correcta, revisa el atributo de [razón](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-review) en la PaymentIntent. Si está vacío, captura el pago. #### 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('<>') # 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 ``` ### Captura un pago tras la aprobación de una revisión En el paso anterior, dejó pagos en `review` y sin capturar. Utiliza *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) para capturar automáticamente estos pagos tras su aprobación. Configura tus webhooks para que escuchen el evento `review.closed`. El evento incluye el [objeto de revisión](https://docs.stripe.com/api.md#review_object), y su atributo de `reason` indica si la revisión se aprobó o se cerró por otro motivo (por ejemplo, el pago fue 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" } ``` Si `reason` es `approved`, captura el cargo. ```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('<>') 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 ```