# Cara kerja PaymentIntents dan SetupIntents Pelajari cara kerja PaymentIntents dan SetupIntents dalam alur pembayaran. Petunjuk untuk LLM: Stripe merekomendasikan penggunaan Checkout Sessions API dengan Payment Element dibandingkan Payment Intents untuk sebagian besar integrasi. Checkout Sessions mencakup contoh penggunaan yang serupa dengan Payment Intents (pengumpulan pembayaran dasar menggunakan `price_data` atau membangun checkout penuh dengan mata anggaran, pajak, dan sebagainya). Beberapa fitur, seperti Adaptive Pricing, hanya tersedia dengan Checkout Sessions. Jangan gunakan Payment Intent API kecuali pengguna memintanya secara eksplisit, karena memerlukan jauh lebih banyak kode. Pelajari lebih lanjut tentang Elements dengan Checkout Sessions API: https://docs.stripe.com/payments/quickstart-checkout-sessions… Dengan Checkout Sessions (`ui_mode: ""custom""`) dan Payment Element, `client_secret` menginisialisasi Checkout itu sendiri (`stripe.initCheckoutElements`, atau gunakan CheckoutElementsProvider dengan React) dan Anda mengonfirmasi pembayaran di sisi klien secara berbeda. Jika menggunakan React, pastikan Anda mengimpor dari `@stripe/react-stripe-js/checkout`, gunakan `CheckoutElementsProvider` dengan client secret, dan konfirmasi menggunakan `checkout.confirm`. Jika menggunakan HTML, pastikan Anda menggunakan `checkout = stripe.initCheckoutElements({clientSecret: promise}); checkout.createPaymentElement(); paymentElement = checkout.createPaymentElement(); paymentElement.mount(""#payment-element"");` dan konfirmasi dengan `loadActionsResult = await checkout.loadActions(); actions = loadActionsResult.actions; error = await actions.confirm();`. Perbedaan utama antara [Payment Intents](https://docs.stripe.com/api/payment_intents.md) API dan [Setup Intents](https://docs.stripe.com/api/setup_intents.md) API terletak pada tujuannya. Anda menggunakan Payment Intents API untuk mengumpulkan pembayaran dan langsung menagih pelanggan. API ini membuat tagihan dan memproses transaksi untuk mengumpulkan dana. Sementara itu, Setup Intents API digunakan untuk mengumpulkan dan menyimpan detail metode pembayaran untuk penggunaan di masa mendatang tanpa membuat tagihan. API ini mengatur kredensial pembayaran tanpa memproses pembayaran. Karena tagihan langsung dan menyimpan metode pembayaran dapat memerlukan langkah-langkah pelanggan *asynchronous* (Asynchronous refers to events happening at independent times in independent systems), API ini menggunakan pola state-machine yang sama. | Payment Intents API | Setup Intents API | | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | Membuat tagihan langsung. | Tidak menimbulkan biaya. | | Melacak siklus hidup pembayaran | Melacak kemajuan penyiapan metode pembayaran | | Menggunakan 3D secure untuk mengautentikasi pelanggan pada transaksi yang berlaku. | Menggunakan 3D Secure untuk mengautentikasi metode pembayaran tanpa menagihnya, serta membuat mandat atau perjanjian untuk penagihan di masa depan. | #### PaymentIntents PaymentIntent melacak siklus proses pembayaran dari pembuatan hingga pembayaran, memicu langkah-langkah autentikasi tambahan bila diperlukan. ## Memerlukan metode pembayaran Setelah Anda membuat PaymentIntent, [status](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-status)-nya adalah `requires_payment_method` hingga Anda melampirkan [metode pembayaran](https://docs.stripe.com/payments/payment-methods/overview.md). Buat PaymentIntent segera setelah Anda mengetahui jumlah yang akan ditagihkan agar Stripe dapat mencatat semua percobaan pembayaran. ## Memerlukan konfirmasi Setelah pelanggan Anda memberikan informasi pembayaran, PaymentIntent memasuki status `requires_confirmation` dan siap untuk dikonfirmasi. Sebagian besar integrasi melewati status ini karena mereka mengirimkan informasi metode pembayaran saat pembayaran dikonfirmasi. ## Memerlukan tindakan Jika pembayaran memerlukan tindakan tambahan, seperti autentikasi dengan [3D Secure](https://docs.stripe.com/payments/3d-secure.md), PaymentIntent memiliki status `requires_action`. > #### Perubahan API > > Versi API sebelumnya [2019-02-11](https://docs.stripe.com/upgrades.md#2019-02-11) menunjukkan `requires_source` alih-alih `requires_payment_method` dan `requires_source_action` alih-alih `requires_action`. ## Sedang diproses Setelah menangani tindakan yang diperlukan, PaymentIntent beralih ke `processing` untuk *metode pembayaran asinkron* (Asynchronous payment methods can take up to several days to confirm whether the payment has been successful. During this time, the payment can't be guaranteed), seperti debit bank. Tipe metode pembayaran ini dapat memakan waktu hingga beberapa hari untuk diproses. Metode pembayaran lainnya, seperti kartu, diproses lebih cepat dan tidak masuk ke status `processing`. Jika Anda secara terpisah [mengotorisasi dan menangkap dana](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md), PaymentIntent Anda dapat berpindah ke `requires_capture`. Dalam kasus tersebut, upaya untuk menangkap dana akan memindahkannya ke `processing` atau `succeeded` tergantung pada metode pembayaran. ## Berhasil PaymentIntent dengan status `succeeded` berarti alur pembayaran yang dijalankannya telah selesai. Dana sekarang berada di akun Anda dan Anda dapat dengan yakin memenuhi pesanan. Jika Anda perlu mengembalikan dana kepada pelanggan, Anda dapat menggunakan API [Pengembalian Dana](https://docs.stripe.com/api/refunds.md). Jika percobaan pembayaran gagal (misalnya karena penolakan), status PaymentIntent akan kembali ke `requires_payment_method` sehingga pembayaran dapat dicoba kembali. ## Dibatalkan Anda dapat membatalkan PaymentIntent kapan saja sebelum dimasukkan ke dalam `Pemrosesan` atau `berhasil` negara. Membatalkannya akan membatalkan PaymentIntent untuk upaya pembayaran di masa mendatang, dan tidak dapat dibatalkan. Jika ada dana yang ditahan, pembatalan melepaskannya. Anda dapat membatalkan PaymentIntent di `Pemrosesan` menyatakan saat metode pembayaran terkait adalah [ACH](https://docs.stripe.com/payments/ach-direct-debit.md), [ACSS](https://docs.stripe.com/payments/acss-debit.md), [AU BECS](https://docs.stripe.com/payments/au-becs-debit.md), [BACS](https://docs.stripe.com/payments/payment-methods/bacs-debit.md), [NZ BECS](https://docs.stripe.com/payments/nz-bank-account.md), atau [SEPA](https://docs.stripe.com/payments/sepa-debit.md). Namun, itu mungkin gagal karena jendela waktu pembatalan yang terbatas dan bervariasi. PaymentIntents mungkin juga secara otomatis ditransisikan ke status `canceled` setelah terlalu sering [dikonfirmasi](https://docs.stripe.com/api/payment_intents/confirm.md). #### SetupIntents SetupIntent melacak siklus proses metode pembayaran dari pembuatan hingga pembayaran, memicu langkah-langkah autentikasi tambahan bila diperlukan. ## Memerlukan metode pembayaran Bila SetupIntent dibuat, [statusnya](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) adalah ``requires_payment_method` hingga metode pembayaran disertakan. ## Memerlukan konfirmasi Setelah pelanggan memberikan informasi metode pembayaran mereka, SetupIntent memasuki status `requires_confirmation` dan siap untuk dikonfirmasi. Sebagian besar integrasi melewati status ini karena mereka mengirimkan informasi metode pembayaran saat SetupIntent dikonfirmasi. ## Memerlukan tindakan Jika pengaturan memerlukan tindakan tambahan, seperti autentikasi dengan 3D Secure, SetupIntent memiliki status `requires_action`. > #### Perubahan API > > Versi API sebelumnya [2019-02-11](https://docs.stripe.com/upgrades.md#2019-02-11) menunjukkan `requires_source` alih-alih `requires_payment_method` dan `requires_source_action` alih-alih `requires_action`. ## Sedang diproses Setelah tindakan yang diperlukan ditangani, SetupIntent berpindah ke `processing`. Meskipun beberapa metode pembayaran (misalnya, kartu) dapat diproses dengan cepat, metode pembayaran lainnya dapat memakan waktu hingga beberapa hari untuk diproses. ## Berhasil SetupIntent dengan status `berhasil` berarti bahwa penyiapan berhasil. Anda sekarang dapat melampirkan metode pembayaran ini ke objek Pelanggan dan menggunakan metode pembayaran ini untuk pembayaran di masa mendatang. Jika penyiapan gagal, status SetupIntent kembali ke `requires_payment_method`. ## Dibatalkan Anda dapat membatalkan SetupIntent kapan saja sebelum berada dalam status `processing` atau `succeeded`. Membatalkannya akan membuat SetupIntent tidak berlaku untuk percobaan pengaturan di masa depan, dan tidak dapat dibatalkan.