# Meninjau pembayaran yang belum diterima

Pelajari cara menggunakan tinjauan jika integrasi Stripe Anda menggunakan otorisasi dan penarikan.

Secara default, Anda [membuat pembayaran](https://docs.stripe.com/payments/accept-a-payment.md) dalam satu langkah. Anda tidak perlu melakukan apa pun untuk mengirim dana ke rekening bank Anda. Stripe juga mendukung pembayaran dua langkah, yang sering disebut [auth dan capture](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md). Jika integrasi Anda menggunakan metode ini, menyetujui tinjauan dan menangkap pembayaran merupakan tindakan yang terpisah.

Jendela pengambilan untuk pembayaran yang disetujui bervariasi menurut [merek kartu](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#authorization-validity-windows), potensi [penangguhan diperpanjang](https://docs.stripe.com/payments/extended-authorization.md), dan [jenis metode pembayaran](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md#auth-capture-limitations).

## Tinjau pembayaran yang belum tercatat di Dasbor

Saat kami menempatkan pembayaran yang tidak ditangkap dalam tinjauan, Dasbor Stripe menampilkan tombol **Tangkap** di samping tombol untuk menyetujui atau membatalkan tinjauan. Pembayaran yang tidak ditangkap akan menampilkan tombol **Batalkan** dan bukan tombol **Pengembalian Dana** karena membatalkan pembayaran yang tidak ditangkap akan membatalkan otorisasi tanpa membuat [objek Pengembalian Dana](https://docs.stripe.com/api/refunds.md) .

> Menyetujui tinjauan tidak akan otomatis menarik charge. Anda masih harus mengklik **Tarik**.
![](https://b.stripecdn.com/docs-statics-srv/assets/uncaptured-payment.b9aab5781bebea8e1cc8f349dc2092bf.png)

## Gunakan Workflows untuk menarik pembayaran yang disetujui secara otomatis

Untuk menarik pembayaran yang disetujui secara otomatis tanpa menulis kode, gunakan [Workflows](https://docs.stripe.com/workflows.md) dengan templat [Tarik pembayaran setelah persetujuan tinjauan Radar](https://dashboard.stripe.com/workflows/create?workflow=eyJkZWVwX2xpbmtfdmVyc2lvbiI6MSwibmFtZSI6IkNhcHR1cmUgcGF5bWVudHMgYWZ0ZXIgUmFkYXIgcmV2aWV3IGFwcHJvdmFsIiwiZGVmaW5pdGlvbiI6IkNyRURFbk1LR1hKbGRISnBaWFpsWDJGZmNHRjViV1Z1ZEY5cGJuUmxiblFRQVJwVUNpbHpkSEpwY0dVdVlYQnBYMk5oYkd4ZloyVjBYM1l4WDNCaGVXMWxiblJmYVc1MFpXNTBjMTlwWkJJbkNpVUtBbWxrRWg4YUhTUjdleUIwY21sbloyVnlMbkJoZVcxbGJuUmZhVzUwWlc1MElIMTlFdGtCQ2daaWNtRnVZMmdRQXlyTUFRckpBUW85YzNSbGNITXVjbVYwY21sbGRtVmZZVjl3WVhsdFpXNTBYMmx1ZEdWdWRDNXpkR0YwZFhNZ1BUMDlJQ0p5WlhGMWFYSmxjMTlqWVhCMGRYSmxJaEtIQVFvWVkyRndkSFZ5WlY5aFgzQmhlVzFsYm5SZmFXNTBaVzUwRUFFYWFRb3ljM1J5YVhCbExtRndhVjlqWVd4c1gzQnZjM1JmZGpGZmNHRjViV1Z1ZEY5cGJuUmxiblJ6WDJsa1gyTmhjSFIxY21VU013b3hDZ0pwWkJJckdpa2tlM3NnYzNSbGNITXVjbVYwY21sbGRtVmZZVjl3WVhsdFpXNTBYMmx1ZEdWdWRDNXBaQ0I5ZlJwZUNBSVNXZ29OY21WMmFXVjNMbU5zYjNObFpCSkdkSEpwWjJkbGNpNXlaV0Z6YjI0Z1BUMDlJQ0poY0hCeWIzWmxaQ0lnSmlZZ0tIUnlhV2RuWlhJdWNHRjViV1Z1ZEY5cGJuUmxiblFwTG1selRtOTBSVzF3ZEhrb0tSb0JBUklSTWpBeU5pMHdPUzB6TUM1bGJtUnBkbVUiLCJzdHJpcGVfYXBpX3ZlcnNpb24iOiIyMDI2LTA5LTMwLmVuZGl2ZSJ9). Ini terpicu saat tinjauan ditutup, memeriksa bahwa tinjauan disetujui dan pembayaran menunggu penarikan, lalu menarik pembayaran tersebut.

## Gunakan API untuk menangkap pembayaran yang disetujui secara otomatis

Melalui API, Anda dapat menyiapkan integrasi Anda agar:

- Segera tarik payments *not* placed dalam `review`.
- Biarkan dan jangan tarik pembayaran yang akan `review`
- Bila tinjauan disetujui, tarik pembayaran

### Segera tarik pembayaran yang tidak ditempatkan dalam tinjauan

Tetapkan `capture_method` dalam permintaan API Anda untuk membuat pembayaran yang tidak ditangkap. Setelah permintaan berhasil, periksa atribut [tinjau](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-review) pada PaymentIntent. Jika kosong, tangkap tagihan tersebut.

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

### Menerima pembayaran setelah tinjauan disetujui

Pada langkah sebelumnya, Anda membiarkan pembayaran dalam `review` dan tidak ditangkap. Gunakan *webhooks* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) untuk secara otomatis menangkap pembayaran ini setelah disetujui.

Konfigurasikan webhook Anda untuk mendengarkan peristiwa `review.closed`. Peristiwa ini mencakup [Objek tinjauan](https://docs.stripe.com/api.md#review_object), dan atribut `reason` yang mengindikasikan apakah tinjauan disetujui atau ditutup karena alasan lain (misalnya, pembayaran dikembalikan).

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

Jika `reason` telah `approved`, tariklah charge-nya.

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