# Migrasi ke Intents and Payment Methods API Pelajari cara bertransisi dari Sources dan Token API ke Payment Methods API. [Payment Methods API](https://docs.stripe.com/api/payment_methods.md) menggantikan [Tokens](https://docs.stripe.com/api/tokens.md) API dan [Sources](https://docs.stripe.com/api/sources.md) API yang ada sebagai cara integrasi yang direkomendasikan untuk mengumpulkan serta menyimpan informasi pembayaran. Ini bekerja sama [Payment Intents API](https://docs.stripe.com/payments/payment-intents.md) guna melakukan pembayaran bagi berbagai metode pembayaran. Kami berencana menonaktifkan dukungan Sources API untuk *metode pembayaran lokal* (Payment methods used in specific countries or regions, such as bank transfers, vouchers, and digital wallets. Examples include Pix (Brazil, bank transfers), Konbini (Japan, vouchers), and WeChat Pay (China, digital wallet)). Jika saat ini Anda menangani metode pembayaran lokal menggunakan Sumber (seperti dalam sumber charge) API, Anda harus [memigrasikannya ke metode pembayaran API](https://docs.stripe.com/payments/payment-methods/transitioning.md#migrate-local-payment-methods). Kami akan mengirim pesan email berisi informasi selengkapnya tentang pengakhiran dukungan untuk Sources API dan Tokens API. Meski kami tidak berencana menonaktifkan dukungan metode pembayaran kartu, kami tetap merekomendasikan Anda memigrasikannya ke Payment Methods API dan Pembayaran Intents API. Untuk informasi selengkapnya tentang melakukan migrasi metode pembayaran kartu, lihat [Memigrasikan ke Payment Intents API](https://docs.stripe.com/payments/payment-intents/migration.md). ## Lakukan migrasi metode pembayaran lokal dari Sources API ke Payment Intents API Guna melakukan migrasi integrasi metode pembayaran lokal, perbarui server dan frontend untuk menggunakan [PaymentIntents API](https://docs.stripe.com/api/payment_intents.md). Terdapat tiga pilihan integrasi pada umumnya: - Alihkan ke [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) untuk alur pembayaran Anda. - Gunakan [Payment Element](https://docs.stripe.com/payments/payment-element.md) Stripe di halaman pembayaran Anda sendiri. - Bangun formulir Anda sendiri dan gunakan Stripe JS SDK untuk menyelesaikan pembayaran. Jika menggunakan Stripe Checkout atau Payment Element, Anda dapat menambahkan dan mengelola sebagian besar metode pembayaran dari Dashboard Stripe tanpa melakukan perubahan kode. Untuk informasi spesifik tentang pengintegrasian metode pembayaran lokal menggunakan Payment Methods API, lihat instruksi bagi metode pembayaran tersebut di [dokumentasi metode pembayaran](https://docs.stripe.com/payments/payment-methods/overview.md). Tabel berikut menyediakan perbandingan level tinggi dari tipe pembayaran yang berbeda. | Integrasi lama | Stripe Checkout | Payment Element | Formulir tersendiri | | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | Kompleksitas rendah | Kompleksitas sedang | Kompleksitas tinggi | | Buat Sumber pada frontend atau pada server | Buat Sesi Checkout pada server | Buat PaymentIntent pada server | Buat PaymentIntent pada server | | Otorisasikan pembayaran dengan memuat widget atau pengalihan ke pihak ketiga | Tidak dibutuhkan | Teruskan client secret ke frontend dan gunakan Stripe JS SDK untuk menampilkan Payment Element guna menyelesaikan pembayaran | Teruskan client secret ke frontend, gunakan formulir Anda sendiri untuk mengumpulkan detail dari pelanggan, dan selesaikan pembayaran sesuai dengan metode pembayaran | | Konfirmasikan apakah sumber dapat di-charge dan kenakan charge Sumber | Tidak dibutuhkan | Tidak dibutuhkan | Tidak dibutuhkan | | Konfirmasikan Charge berhasil secara asinkron dengan webhook `charge.succeeded` | Konfirmasikan sesi Checkout yang berhasil dengan webhook `payment_intent.succeeded` | Konfirmasikan PaymentIntent yang berhasil dengan webhook `payment_intent.succeeded` | Konfirmasikan PaymentIntent yang berhasil dengan webhook `payment_intent.succeeded` | > Objek PaymentIntent mewakili pembayaran dalam integrasi baru, dan akan membuat Charge bila Anda mengonfirmasikan pembayaran pada frontend. Jika sebelumnya menyimpan referensi ke Charge, Anda dapat terus melakukannya dengan mengambil Identifikasi Charge dari PaymentIntent setelah pelanggan menyelesaikan pembayaran. Namun, kami merekomendasikan agar Anda menyimpan Identifikasi PaymentIntent. ### Memeriksa status pembayaran Sebelumnya, integrasi Anda seharusnya telah memeriksa status Sumber maupun status Charge setelah setiap panggilan API. Anda tidak perlu lagi memeriksa dua status—Anda hanya perlu memeriksa status PaymentIntent atau Sesi Checkout setelah mengonfirmasikannya pada frontend. | payment_intent.status | Arti | Instruksi khusus | | ------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `succeeded` | Pembayaran berhasil. | Tidak berlaku | | `requires_payment_method` | Pembayaran gagal. | Tidak berlaku | | `requires_action` | Pelanggan belum menyelesaikan otorisasi pembayaran. | Jika pelanggan tidak menyelesaikan pembayaran dalam waktu 48 jam, maka akan terjadi transisi PaymentIntent ke `requires_payment_method` dan Anda dapat mencoba ulang konfirmasi. | Selalu konfirmasikan status PaymentIntent dengan mengambilnya pada server atau mendengarkan webhook pada server Anda. Jangan hanya mengandalkan pengguna yang kembali ke `return_url` yang diberikan saat Anda mengonfirmasikan PaymentIntent. ### Pengembalian dana Anda dapat terus memanggil Refunds API dengan Charge yang dibuat oleh PaymentIntent. Identifikasi Charge dapat diakses pada parameter `latest_charge`. Atau, Anda dapat memberikan Identifikasi PaymentIntent ke Refunds API dan bukan ke Charge. ### Penanganan kesalahan Sebelumnya, Anda harus menangani kesalahan pada Sources. Dengan PaymentsIntents, sebagai ganti memeriksa kesalahan pada Source, Anda memeriksa kesalahan pada PaymentIntent bila dibuat dan setelah pelanggan mengotorisasi pembayaran. Sebagian besar kesalahan pada PaymentIntent bertipe `invalid_request_error`, yang dikembalikan dalam permintaan tak valid. Ketika memigrasikan integrasi, ingatlah bahwa kode kesalahan PaymentIntent dapat berbeda dari kode kesalahan yang bersangkutan untuk Sources. ### Webhook Jika sebelumnya mendengarkan kejadian Sumber, Anda mungkin perlu memperbarui integrasi untuk mendengarkan tipe kejadian baru. Tabel berikut ini menunjukkan sejumlah contoh. | Webhook lama | Webhook baru pada Checkout | Webhook baru pada PaymentsIntents | Instruksi khusus | | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | `source.chargeable` | Tidak berlaku | Tidak berlaku | | | `source.failed` | Tidak berlaku | Tidak berlaku | | | `source.canceled` | Tidak berlaku | Tidak berlaku | | | `charge.succeeded` | `checkout.session.completed` | `payment_intent.succeeded` | Webhook `charge.succeeded` juga dikirim, jadi Anda tidak perlu memperbarui integrasi untuk mendengarkan webhook baru. | | `charge.failed` | Tidak berlaku - Pelanggan dapat mencoba ulang pembayaran pada Sesi Checkout yang sama sampai [kedaluwarsa](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-expires_at), saat di mana Anda menerima kejadian `checkout.session.expired`. | `payment_intent.payment_failed` | Webhook `charge.failed` juga dikirim, jadi Anda tidak perlu memperbarui integrasi untuk mendengarkan webhook baru. | | `charge.dispute.created` | `charge.dispute.created` | `charge.dispute.created` | | ## Bertransisi ke Payment Methods API Perbedaan utama antara Payment Methods API dan Sources API adalah Sources menjelaskan status transaksi melalui properti [status](https://docs.stripe.com/api/sources/object.md#source_object-status). Itu berarti transisi setiap objek `Source` harus dilakukan ke status dapat di-charge sebelum dapat Anda gunakan untuk pembayaran. Sedangkan `PaymentMethod` bersifat stateless, bergantung pada objek *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) guna mewakili status pembayaran. > Tabel berikut ini bukan daftar metode pembayaran yang komprehensif. Jika Anda mengintegrasikan metode pembayaran lain dengan Sources API, lakukan juga migrasi ke Payment Methods API. | Alur | Integrasikan Metode Pembayaran dengan Payment Intents API | Tokens atau Sources dengan Charges API | | -------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | | Kartu | [Pembayaran kartu](https://docs.stripe.com/payments/cards.md) | [Didukung di Tokens](https://docs.stripe.com/payments/charges-api.md); Tidak direkomendasikan di Sources | | ACH Direct Debit | [Debit langsung rekening bank AS](https://docs.stripe.com/payments/ach-direct-debit.md) | [Didukung di Tokens](https://docs.stripe.com/ach-deprecated.md) Tidak direkomendasikan di Sources | | Transfer Kredit ACH | [Transfer Bank USD](https://docs.stripe.com/payments/customer-balance/migrating-from-sources.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/ach-credit-transfer.md) | | Alipay | [Pembayaran Alipay](https://docs.stripe.com/payments/alipay.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/alipay.md) | | Bancontact | [Pembayaran Bancontact](https://docs.stripe.com/payments/bancontact.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/bancontact.md) | | EPS | [Pembayaran EPS](https://docs.stripe.com/payments/eps.md) | Tidak lagi digunakan | | giropay | [Pembayaran giropay](https://docs.stripe.com/payments/giropay.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/giropay.md) | | iDEAL | [Pembayaran iDEAL](https://docs.stripe.com/payments/ideal.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/ideal.md) | | Klarna | [Pembayaran Klarna](https://docs.stripe.com/payments/klarna.md) | Tidak lagi digunakan | | Multibanco | [Pembayaran Multibanco](https://docs.stripe.com/payments/multibanco.md) | [Beta yang Tidak Lagi Digunakan](https://docs.stripe.com/sources/multibanco.md) | | Przelewy24 | [Pembayaran Przelewy24](https://docs.stripe.com/payments/p24.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/p24.md) | | Transfer Kredit SEPA | [Transfer Bank EUR](https://docs.stripe.com/payments/customer-balance/migrating-from-sepa-credit-transfer.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/sepa-credit-transfer.md) | | Debit Langsung SEPA | [Debit langsung Single Euro Payments Area](https://docs.stripe.com/payments/sepa-debit.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/sepa-debit.md) | | WeChat Pay | [Pembayaran WeChat Pay](https://docs.stripe.com/payments/wechat-pay.md) | [Tidak lagi digunakan](https://docs.stripe.com/sources/wechat-pay.md) | Setelah memilih API yang akan diintegrasikan, gunakan [panduan metode pembayaran](https://stripe.com/payments/payment-methods-guide) untuk membantu menentukan jenis metode pembayaran yang tepat yang perlu Anda dukung. Panduan ini mencakup penjelasan mendetail tentang setiap metode pembayaran dan menjelaskan perbedaan arus yang dihadapi pelanggan, bersama dengan [wilayah geografis](https://stripe.com/payments/payment-methods-guide#payment-methods-fact-sheets) yang paling relevan. Anda dapat mengaktifkan metode pembayaran yang tersedia di [Dashboard](https://dashboard.stripe.com/account/payments/settings). Aktivasi umumnya instan dan tidak memerlukan kontrak tambahan. ## Kompatibilitas dengan metode pembayaran yang dapat digunakan kembali terdahulu Jika sebelumnya Anda memproses salah satu metode pembayaran yang dapat digunakan kembali berikut menggunakan [Sources](https://docs.stripe.com/sources.md), migrasi sumber tersimpan yang ada tidak dilakukan secara otomatis. - Alipay - Debit Langsung Bacs - Debit Langsung SEPA Guna mempertahankan metode pembayaran tersimpan dari pelanggan yang ada, Anda harus mengonversi sumber tersebut ke metode pembayaran menggunakan alat migrasi data di Dashboard Stripe. Untuk cara mengonversinya, lihat [halaman dukungan](https://support.stripe.com/questions/reusable-object-migration). ## Kompatibilitas dengan objek kartu terdahulu Jika sebelumnya Anda telah mengumpulkan detail pembayaran pelanggan kartu dengan Stripe menggunakan [kartu](https://docs.stripe.com/payments/charges-api.md) atau [Sumber](https://docs.stripe.com/sources.md), Anda bisa mulai menggunakan Payment Methods API dengan segera tanpa perlu memigrasi informasi pembayaran apa pun. Metode pembayaran kompatibel yang disimpan ke *Pelanggan* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) dapat digunakan di API yang menerima objek *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs). Misalnya, Anda dapat menggunakan kartu tersimpan sebagai PaymentMethod ketika membuat PaymentIntent: ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=card" \ -d amount=1099 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{CARD_ID}}" ``` Jangan lupa memberikan identifikasi pelanggan tempat menyimpan metode pembayaran Anda yang kompatibel ketika melampirkan objek ke PaymentIntent. Anda dapat [mengambil](https://docs.stripe.com/api/payment_methods/retrieve.md) semua metode pembayaran tersimpan yang kompatibel melalui Payment Methods API. #### Kartu ```json { "id": "card_1EBXBSDuWL9wT9brGOaALeD2", "object": "card", "address_city": "San Francisco", "address_country": "US", "address_line1": "1234 Fake Street", "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "customer": "{{CUSTOMER_ID}}", "cvc_check": null, "dynamic_last4": null, "exp_month": 8, "exp_year": 2024, "fingerprint": "53v265akSHAnIk1X", "funding": "credit", "last4": "4242", "metadata": { }, "name": null, "tokenization_method": null } ``` ```json { "id": "card_1EBXBSDuWL9wT9brGOaALeD2", "object": "payment_method", "billing_details": { "address": { "city": "San Francisco", "country": "US", "line1": "1234 Fake Street", "line2": null, "postal_code": null, "state": null }, "name": null, "phone": null, "email": null }, "card": { "brand": "visa", "checks": { "address_line1_check": null, "address_postal_code_check": null, "cvc_check": null }, "country": "US", "exp_month": 8, "exp_year": 2024, "fingerprint": "53v265akSHAnIk1X", "funding": "credit", "last4": "4242", "three_d_secure_usage": { "supported": true }, "wallet": null }, "created": 123456789, "customer": "cus_EepWxEKrgMaywv", "livemode": false, "metadata": { }, "type": "card" } ``` #### Sumber Kartu ```json { "id": "src_1AhIN74iJb0CbkEwmbRYPsd4", "object": "source", "amount": null, "client_secret": "src_client_secret_sSPHZ17iQG6j9uKFdAYqPErO", "created": 1500471469, "currency": null, "flow": "none", "livemode": false, "metadata": { }, "owner": { "address": { "city": "Berlin", "country": "DE", "line1": "Nollendorfstraße 27", "line2": null, "postal_code": "10777", "state": null }, "email": "jenny.rosen@example.com", "name": "Jenny Rosen", "phone": null, "verified_address": null, "verified_email": null, "verified_name": null, "verified_phone": null }, "status": "chargeable", "type": "card", "usage": "reusable", "card": { "exp_month": 4, "exp_year": 2024, "address_line1_check": "unchecked", "address_zip_check": "unchecked", "brand": "Visa", "country": "US", "cvc_check": "unchecked", "funding": "credit", "last4": "4242", "three_d_secure": "optional", "tokenization_method": null, "dynamic_last4": null } } ``` ```json { "id": "card_1EBXBSDuWL9wT9brGOaALeD2", "object": "payment_method", "billing_details": { "address": { "city": "Berlin", "country": "DE", "line1": "Nollendorfstraße 27", "line2": null, "postal_code": "10777", "state": null }, "name": "Jenny Rosen", "phone": null, "email": "jenny.rosen@example.com" }, "card": { "brand": "visa", "checks": { "address_line1_check": null, "address_postal_code_check": null, "cvc_check": null }, "country": "US", "exp_month": 4, "exp_year": 2024, "fingerprint": "53v265akSHAnIk1X", "funding": "credit", "last4": "4242", "three_d_secure_usage": { "supported": true }, "wallet": null }, "created": 1500471469, "customer": "{{CUSTOMER_ID}}", "livemode": false, "metadata": { }, "type": "card" } ``` Dengan kompatibilitas ini, tidak ada objek baru yang dibuat; Payment Methods API memberikan tampilan berbeda dari objek dasar yang sama. Misalnya, pembaruan pada metode pembayaran yang kompatibel melalui Payment Methods API akan terlihat melalui Sources API, dan sebaliknya. ## See also - [Panduan metode pembayaran](https://stripe.com/payments/payment-methods-guide) - [Pembayaran Connect](https://docs.stripe.com/connect/charges.md) - [Referensi Payment Methods API](https://docs.stripe.com/api/payment_methods.md)