# Beralih ke Payment Intents API. > #### Fitur integrasi Payment Element > > Anda dapat mengintegrasikan Payment Element untuk mengelola langganan, pajak, diskon, pengiriman, dan konversi mata uang. Untuk mempelajari lebih lanjut, lihat [Buat halaman checkout](https://docs.stripe.com/payments/quickstart-checkout-sessions.md). Pelajari cara memigrasikan kartu yang ada dan integrasi Charges API. Migrasi alur pembayaran Anda bisa jadi menakutkan. Lebih aman untuk mengadopsi Payment Intents API secara bertahap dan menggunakannya secara paralel dengan API Charges. Untuk tujuan ini, Anda dapat membagi migrasi menjadi langkah-langkah berikut: 1. [Perbarui versi API dan pustaka client Anda](https://docs.stripe.com/payments/payment-intents/migration.md#api-version). 1. Jika berlaku, [migrasikan kode yang dibaca oleh properti Charge](https://docs.stripe.com/payments/payment-intents/migration/charges.md) sehingga Anda memiliki jalur baca yang konsisten antara charge yang dibuat oleh Charges API dan charge yang dibuat oleh Payment Intents API. Hal ini memastikan integrasi sisi baca yang berfungsi baik untuk integrasi pembayaran Anda yang lama maupun yang baru. 1. Migrasikan integrasi Charges API Anda yang ada di [Web](https://docs.stripe.com/payments/payment-intents/migration.md#web), [iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios), dan [Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android) untuk menggunakan Payment Intents API. 1. Migrasikan integrasi Anda yang [menyimpan kartu pada objek Customer](https://docs.stripe.com/payments/payment-intents/migration.md#saved-cards). 1. [Coba dengan kartu percobaan peraturan](https://docs.stripe.com/testing.md#regulatory-cards) untuk memastikan integrasi yang di-upgrade menangani autentikasi dengan benar. ## Perbarui versi API dan pustaka client Anda Meski Payment Intents API berfungsi di semua versi API, kami merekomendasikan Anda [melakukan upgrade ke versi API terbaru](https://docs.stripe.com/upgrades.md#how-can-i-upgrade-my-api). Jika Anda memutuskan untuk menggunakan versi API yang lebih lama dari [2019-02-11](https://docs.stripe.com/upgrades.md#2019-02-11), perhatikan dua perubahan berikut saat Anda melalui contoh kode: - `requires_source` telah diubah namanya menjadi `requires_payment_method` - `requires_source_action` telah diubah namanya menjadi `requires_action` Selain itu, jika Anda menggunakan salah satu [SDK](https://docs.stripe.com/sdks.md) kami, lakukan upgrade ke versi pustaka terbaru untuk menggunakan Payment Intents API. ## Migrasikan alur pembayaran satu kali Anda #### Elements Integrasi yang dibangun dengan Stripe.js & Elements terdiri dari langkah-langkah berikut: 1. Daftarkan maksud Anda untuk mengumpulkan pembayaran di sisi server 1. Kumpulkan detail pembayaran di sisi client 1. Prakarsai pembuatan pembayaran 1. Penuhi pesanan pelanggan di sisi server ### Langkah 1: Daftarkan maksud untuk mengumpulkan pembayaran di sisi server [Buat PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) di server Anda dan jadikan [dapat diakses dari sisi client](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Langkah 2: Kumpulkan detail pembayaran di sisi client Gunakan fungsi [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), yang mengumpulkan informasi pembayaran dan mengirimkannya langsung ke Stripe. ### Langkah 3: Prakarsai pembuatan pembayaran Di integrasi yang ada, langkah terakhir adalah menggunakan informasi pembayaran yang dijadikan token untuk membuat charge di server Anda. Ini tidak lagi diperlukan, karena fungsi `confirmCardPayment`—yang dipanggil di langkah sebelumnya—akan memprakarsai pembuatan charge. ### Langkah 4: Penuhi pesanan pelanggan Dengan konfirmasi otomatis, charge dibuatkan untuk Anda secara asinkron berdasarkan tindakan pelanggan di sisi client, jadi Anda harus [memantau webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) untuk menentukan kapan pembayaran berhasil diselesaikan. Untuk melakukan langkah-langkah seperti pemenuhan pesanan setelah pembayaran pelanggan berhasil, implementasikan dukungan untuk webhook dan pantau kejadian `payment_intent.succeeded`. ### Before Jika charge berhasil, penuhi pesanan. ### After Langganan ke webhook `payment_intent.succeeded` dan penuhi di handler webhook. Karena Anda sekarang telah bermigrasi, gunakan kartu percobaan di bagian berikut untuk memverifikasi integrasi Anda yang di-upgrade untuk menangani autentikasi 3D Secure. #### Tombol Permintaan Pembayaran [Tombol Permintaan Pembayaran](https://docs.stripe.com/stripe-js/elements/payment-request-button.md) Stripe.js berfungsi bersama Payment Intents API dengan menggunakan token yang diperoleh dalam integrasi PaymentRequest tradisional dan melampirkannya ke PaymentIntent. Integrasi yang dibangun dengan PaymentRequest terdiri dari langkah-langkah berikut: 1. Daftarkan maksud Anda untuk mengumpulkan pembayaran di sisi server 1. Kumpulkan detail pembayaran di sisi client 1. Prakarsai pembuatan pembayaran 1. Penuhi pesanan pelanggan di sisi server Atau, gunakan [Element Checkout Ekspres](https://docs.stripe.com/elements/express-checkout-element.md) untuk menawarkan beberapa tombol pembayaran sekali klik kepada pelanggan, termasuk Apple Pay, Google Pay, Link, dan PayPal. ### Langkah 1: Daftarkan maksud untuk mengumpulkan pembayaran di sisi server [Buat PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) di server Anda dan jadikan [dapat diakses dari sisi client](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Langkah 2: Kumpulkan detail pembayaran di sisi client Dengarkan kejadian `token` objek `PaymentRequest`, yang menyediakan token dan fungsi callback yang dapat Anda gunakan untuk menunjukkan kapan proses pembayaran selesai. Untuk menyesuaikan integrasi ini guna mendukung Payment Intents API, gunakan fungsi [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment) dan teruskan ke dalamnya identifikasi token, bukan mengirim token ke server Anda. Bila janji berhasil dikembalikan oleh fungsi `confirmCardPayment`, aktifkan callback penyelesaian. ### Langkah 3: Prakarsai pembuatan pembayaran Di integrasi yang ada, langkah terakhir adalah menggunakan informasi pembayaran yang dijadikan token untuk membuat charge di server Anda. Ini tidak lagi diperlukan, karena fungsi `confirmCardPayment`—yang dipanggil di langkah sebelumnya—akan memprakarsai pembuatan charge. ### Langkah 4: Penuhi pesanan pelanggan Dengan konfirmasi otomatis, charge dibuatkan untuk Anda secara asinkron berdasarkan tindakan pelanggan di sisi client, jadi Anda harus [memantau webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) untuk menentukan kapan pembayaran berhasil diselesaikan. Untuk melakukan langkah-langkah seperti pemenuhan pesanan setelah pembayaran pelanggan berhasil, implementasikan dukungan untuk webhook dan pantau kejadian `payment_intent.succeeded`. ### Before Jika charge berhasil, penuhi pesanan. ### After Langganan ke webhook `payment_intent.succeeded` dan penuhi di handler webhook. Karena Anda sekarang telah bermigrasi, gunakan kartu percobaan di bagian berikut untuk memverifikasi integrasi Anda yang di-upgrade untuk menangani autentikasi 3D Secure. #### Checkout terdahulu Jika Anda menggunakan Checkout versi lama, upgrade ke [Checkout versi baru](https://docs.stripe.com/payments/checkout.md)—cara tercepat untuk menerima pembayaran dengan Stripe. Dengan demikian, Anda dapat menyetujui langganan dan pembayaran satu kali. Anda juga dapat menggunakan Checkout tanpa menggunakan API Stripe di server. Ikuti [panduan migrasi Checkout](https://docs.stripe.com/payments/checkout/migration.md) untuk memigrasikan integrasi yang ada. Jika Anda lebih suka membuat alur checkout Anda sendiri, beralihlah ke [Elements](https://docs.stripe.com/payments/elements.md). Dengan asumsi Anda telah mengupgrade ke Elemen, Anda dapat membuat integrasi Payment Intents API menggunakan [panduan migrasi Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). #### Stripe.js v2 Untuk meng-upgrade integrasi Stripe.js v2 yang ada agar dapat menggunakan Payment Intents API, pertama-tama perbarui integrasi Anda untuk mengumpulkan informasi pembayaran dengan Elements. Elements menyediakan komponen UI siap-rakit dan menawarkan [kepatuhan PCI](https://docs.stripe.com/security/guide.md) sederhana dengan pelaporan SAQ A. Setelah Anda melakukan upgrade ke Elements, Anda dapat membangun integrasi Payment Intents API menggunakan [panduan migrasi Elements](https://docs.stripe.com/payments/payment-intents/migration.md#web). ## Migrasikan integrasi Anda yang menyimpan kartu pada objek Pelanggan #### Menyimpan kartu di alur checkout Integrasi Payment Intents API yang mengumpulkan informasi kartu dalam alur pembayaran terdiri dari langkah-langkah berikut: 1. Daftarkan maksud Anda untuk mengumpulkan pembayaran di sisi server 1. Kumpulkan detail pembayaran di sisi client 1. Prakarsai pembuatan pembayaran 1. Penuhi pesanan pelanggan di sisi server ### Langkah 1: Daftarkan maksud untuk mengumpulkan pembayaran di sisi server [Buat PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) pada server. Atur [setup_future_usage](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-setup_future_usage) ke `off_session` jika Anda bermaksud men-charge pengguna saat mereka berada di luar aplikasi, atau `on_session` jika Anda berencana men-charge mereka dalam aplikasi. Jika Anda berencana menggunakan kartu untuk pembayaran di-dalam maupun di-luar sesi, gunakan `off_session`. Menyediakan parameter `setup_future_usage` bersama Identifikasi Pelanggan akan menyimpan PaymentMethod yang dihasilkan ke Pelanggan setelah PaymentIntent dikonfirmasi dan semua tindakan yang diperlukan dari pelanggan telah selesai. Berikutnya, buat PaymentIntent [dapat diakses di sisi klien](https://docs.stripe.com/payments/payment-intents.md#passing-to-client). ### Langkah 2: Kumpulkan detail pembayaran di sisi client Gunakan fungsi [confirmCardPayment](https://docs.stripe.com/js.md#stripe-confirm-card-payment), yang mengumpulkan informasi pembayaran dan mengirimkannya langsung ke Stripe. Terakhir, lampirkan metode pembayaran (`paymentIntent.payment_method`) ke pelanggan. ### Langkah 3: Prakarsai pembuatan pembayaran Di integrasi yang ada, langkah terakhir adalah menggunakan informasi pembayaran yang dijadikan token untuk membuat charge di server Anda. Ini tidak lagi diperlukan, karena fungsi `confirmCardPayment`—yang dipanggil di langkah sebelumnya—akan memprakarsai pembuatan charge. ### Langkah 4: Penuhi pesanan pelanggan Dengan konfirmasi otomatis, charge dibuatkan untuk Anda secara asinkron berdasarkan tindakan pelanggan di sisi client, jadi Anda harus [memantau webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md) untuk menentukan kapan pembayaran berhasil diselesaikan. Untuk melakukan langkah-langkah seperti pemenuhan pesanan setelah pembayaran pelanggan berhasil, implementasikan dukungan untuk webhook dan pantau kejadian `payment_intent.succeeded`. ### Before Jika charge berhasil, penuhi pesanan. ### After Langganan ke webhook `payment_intent.succeeded` dan penuhi di handler webhook. Karena Anda sekarang telah bermigrasi, gunakan kartu percobaan di bagian berikut untuk memverifikasi integrasi Anda yang di-upgrade untuk menangani autentikasi 3D Secure. #### Menyimpan kartu di luar alur checkout Ada beberapa perubahan yang perlu Anda lakukan pada integrasi yang sudah ada yang menyimpan detail kartu di luar alur checkout. Pertama, buat [SetupIntent](https://docs.stripe.com/api/setup_intents.md) di server Anda. SetupIntent mengautentikasi kartu tanpa melakukan pembayaran awal. Teruskan [client secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) SetupIntent ke client Anda dan gunakan fungsi [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) sebagai ganti [createToken](https://docs.stripe.com/js.md#stripe-create-token) atau [createSource](https://docs.stripe.com/js.md#stripe-create-source) setelah pelanggan Anda memasukkan detail kartunya. Jika disyaratkan oleh regulasi, [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) akan meminta pengguna mengautentikasi kartu. Bila [confirmCardSetup](https://docs.stripe.com/js.md#stripe-confirm-card-setup) berhasil, `setupIntent.payment_method` akan berisi [PaymentMethod](https://docs.stripe.com/api/payment_methods/object.md) yang dapat Anda lampirkan pada Customer. Teruskan identifikasi PaymentMethod itu ke server Anda, dan [lampirkan metode pembayaran](https://docs.stripe.com/api/payment_methods/attach.md) pada objek Customer menggunakan Payment Methods API sebagai ganti Customers API. #### Membayar dengan kartu tersimpan Saat melakukan pembayaran dengan metode pembayaran yang sebelumnya telah disimpan, Anda harus menentukan ID Pelanggan dan ID Kartu, Sumber, atau Metode Pembayaran yang sebelumnya telah disimpan. Sebelumnya, sumber default pada pelanggan akan digunakan jika tidak ada yang ditentukan. Sekarang, Anda harus secara eksplisit memasukkan metode pembayaran yang diinginkan. Jika pelanggan *di-luar sesi* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information), Anda harus menandai pembayaran sebagai pembayaran di-luar sesi. Lihat [Men-charge Kartu Tersimpan](https://docs.stripe.com/payments/save-and-reuse.md?platform=web&ui=elements#charge-saved-payment-method) untuk informasi selengkapnya. ## Akses metode pembayaran tersimpan Untuk menampilkan Kartu, Sumber, dan Metode Pembayaran pelanggan yang disimpan sebelumnya, [daftar metode pembayaran](https://docs.stripe.com/api/payment_methods/list.md) alih-alih membaca [sumber](https://docs.stripe.com/api/customers/object.md#customer_object-sources) properti objek pelanggan. Ini diperlukan karena PaymentMethods baru yang ditambahkan ke pelanggan tidak akan diduplikasi di properti sumber objek pelanggan. ## Mencoba integrasi Sangatlah penting untuk mencoba integrasi secara menyeluruh guna memastikan Anda sudah benar dalam menangani kartu yang memerlukan autentikasi tambahan dan yang tidak. Gunakan nomor kartu ini di [sandbox](https://docs.stripe.com/keys.md#test-live-modes) dengan tanggal kedaluwarsa di masa mendatang dan kode CVC tiga angka untuk memvalidasi integrasi Anda bila autentikasi diperlukan dan saat tidak diperlukan. | Nomor | Autentikasi | Keterangan | | ---------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 4000002500003155 | Diperlukan pada persiapan atau transaksi pertama | Kartu percobaan ini memerlukan autentikasi untuk [pembayaran satu kali](https://docs.stripe.com/payments/accept-a-payment.md?platform=web). Namun, jika Anda menyiapkan kartu ini menggunakan [Setup Intents API](https://docs.stripe.com/payments/save-and-reuse.md) dan menggunakan kartu tersimpan untuk pembayaran berikutnya, autentikasi lebih lanjut tidak dibutuhkan. | | 4000002760003184 | Harus diisi | Kartu percobaan ini memerlukan autentikasi pada semua transaksi. | | 4000008260003178 | Harus diisi | Kartu percobaan ini memerlukan autentikasi, tetapi pembayaran akan ditolak dengan kode kegagalan `insufficient_funds` setelah autentikasi berhasil. | | 4000000000003055 | Didukung | Kartu uji ini mendukung autentikasi melalui 3D Secure 2, tetapi tidak mewajibkannya. Pembayaran menggunakan kartu ini tidak memerlukan autentikasi tambahan di sandbox kecuali [ aturan Sandbox Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) Anda meminta autentikasi. | Gunakan kartu ini di aplikasi Anda atau [demo pembayaran](https://stripe-payments-demo.appspot.com) untuk melihat perilaku yang berbeda. ## See also - [PaymentIntent di iOS](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=ios) - [PaymentIntent di Android](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=mobile&platform=android)