# Terima transfer bank Gunakan Payment Intents API untuk menerima pembayaran transfer bank. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Pertama kali Anda menerima pembayaran transfer bank dari pelanggan, Stripe membuat rekening bank virtual untuk mereka, yang kemudian dapat Anda bagikan dengan mereka secara langsung. Semua pembayaran transfer bank mendatang dari pelanggan ini akan dikirim ke rekening bank ini. Di sejumlah negara, Stripe juga memberi Anda nomor referensi transfer unik yang harus disertakan pelanggan pada setiap transfer agar mempermudah pencocokan transfer dengan pembayaran terutang. Sejumlah negara memiliki batas jumlah nomor rekening bank virtual yang dapat dibuat secara gratis. Anda dapat menemukan gambaran umum tentang langkah-langkah umum saat menerima pembayaran transfer bank dalam diagram urutan berikut: #### Dengan Invoice Langkah-langkah umum saat menerima pembayaran transfer bank (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Tanpa Invoice ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-1.a17fe04695ef532427f25a9e1276ee2e.svg) ## Menangani kurang bayar dan lebih bayar Dengan metode pembayaran transfer bank, ada kemungkinan pelanggan mengirimkan jumlah yang lebih besar atau lebih kecil dari yang diharapkan. Jika pelanggan mengirim terlalu sedikit, Stripe akan mendanai sebagian dari Tujuan Pembayaran yang masih terbuka. Namun, invoice tidak akan didanai sebagian dan akan tetap terbuka hingga dana yang masuk mencukupi untuk membayar seluruh jumlah tagihan. Jika pelanggan mengirimkan jumlah yang melebihi jumlah yang diharapkan, Stripe akan mencoba merekonsiliasi dana yang masuk dengan pembayaran yang masih terbuka dan menyimpan sisa kelebihan dana tersebut dalam saldo pelanggan. Pelajari lebih lanjut tentang [cara Stripe menangani rekonsiliasi](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Dengan Invoice Ketika pelanggan membayar kurang: Pelanggan mengirim transfer bank kurang dari jumlah yang diharapkan (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) Ketika pelanggan membayar lebih: Pelanggan mengirim transfer bank lebih dari jumlah yang diharapkan (See full diagram at https://docs.stripe.com/payments/bank-transfers/accept-a-payment) #### Tanpa Invoice ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-2.464fe916d5822422144c8aea0f31ed45.svg) ![](https://b.stripecdn.com/docs-statics-srv/assets/without-invoices-diagram-3.b1992851a5f3492d14eaa35e336b0e9f.svg) ## Menangani beberapa invoice atau pembayaran terbuka Anda mungkin memiliki beberapa invoice atau pembayaran terbuka yang dapat dibayar dengan transfer bank. Di penyiapan default, Stripe mencoba untuk [secara otomatis merekonsiliasi](https://docs.stripe.com/payments/customer-balance/reconciliation.md) transfer bank dengan menggunakan informasi seperti kode referensi transfer atau jumlah yang ditransfer. Anda dapat menonaktifkan rekonsiliasi otomatis serta [secara manual merekonsiliasi](https://docs.stripe.com/payments/customer-balance/reconciliation.md#cash-manual-reconciliation) pembayaran dan invoice sendiri. Anda dapat mengesampingkan perilaku rekonsiliasi otomatis per pelanggan dengan mengatur [mode rekonsiliasi](https://docs.stripe.com/api/customers/create.md#create_customer-cash_balance-settings-reconciliation_mode) ke manual. > Jika integrasi Anda menggunakan invoice, lihat [Kirim invoice dengan instruksi transfer bank](https://docs.stripe.com/invoicing/bank-transfer.md). # Elements > This is a Elements for when payment-ui is elements. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=elements. ## Siapkan Stripe [Sisi server] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). Gunakan pustaka resmi kami untuk mendapatkan akses ke API Stripe dari aplikasi Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Buat atau ambil Pelanggan [Sisi server] Anda harus mengaitkan objek [Pelanggan](https://docs.stripe.com/api/customers.md) untuk merekonsiliasi setiap pembayaran transfer bank. Jika sudah memiliki objek Pelanggan, Anda dapat melewati langkah ini. Jika tidak, buat objek Pelanggan baru. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Buat PaymentIntent [Sisi server] [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) adalah objek yang mewakili maksud Anda menagih pembayaran dari pelanggan dan melacak siklus proses pembayaran melalui setiap tahapannya. Buat PaymentIntent di server, dengan menetapkan jumlah dan mata uang yang ingin Anda gunakan untuk mengumpulkan. Anda juga harus mengisi [parameter pelanggan](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) dari permintaan pembuatan PaymentIntent. Transfer bank tidak tersedia di PaymentIntents tanpa pelanggan. #### Kelola metode pembayaran dari Dashboard Sebelum membuat Payment Intent, pastikan untuk mengaktifkan **Transfer bank** di halaman [pengaturan metode pembayaran](https://dashboard.stripe.com/settings/payment_methods) Dashboard Anda. > Dengan [Metode pembayaran dinamis](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe menangani pengembalian metode pembayaran yang memenuhi syarat berdasarkan faktor-faktor, seperti jumlah transaksi, mata uang, dan alur pembayaran. #### AS ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" ``` #### Inggris ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]=true" ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]=true" ``` Untuk melokalkan IBAN yang ditampilkan kepada pelanggan, Anda dapat mengonfigurasi negara Pelanggan dengan mengatur properti [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) atau dengan [mengedit Pelanggan di Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Kami mendukung pelokalan IBAN untuk : - Jika Anda belum mengonfigurasi negara untuk Pelanggan, atau jika negara mereka tidak mendukung pelokalan IBAN, kami akan kembali ke negara akun Stripe Anda. - Jika pelokalan IBAN tidak didukung untuk negara akun Stripe Anda, kami kembali ke `IE`. > Saat ini, pembuatan nomor rekening bank virtual baru yang dilokalkan tidak tersedia untuk Spanyol (ES). Gunakan salah satu negara VBAN UE lainnya. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" ``` Di versi terbaru API, menentukan parameter `automatic_payment_methods` bersifat opsional karena Stripe mengaktifkan fungsionalitasnya secara default. Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Cantumkan metode pembayaran secara manual Untuk menentukan metode pembayaran secara manual dengan API, tambahkan `customer_balance` ke daftar [tipe metode pembayaran](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) bagi PaymentIntent Anda. Tentukan [id](https://docs.stripe.com/api/customers/object.md#customer_object-id) Pelanggan. #### AS ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `us_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### Inggris ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `gb_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `eu_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. - Atur [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) ke salah satu dari . IBAN yang ditampilkan kepada pelanggan dilokalkan ke negara yang dipilih. > Saat ini, pembuatan nomor rekening bank virtual baru yang dilokalkan tidak tersedia untuk Spanyol (ES). Gunakan salah satu negara VBAN UE lainnya. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `jp_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `mx_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. > Selalu tentukan `payment_method_types` saat membuat pembayaran. Anda tidak dapat menggunakan `customer_balance` untuk [pembayaran mendatang](https://docs.stripe.com/payments/save-and-reuse.md). ## Kumpulkan detail pembayaran [Sisi client] Kumpulkan detail pembayaran pada client dengan [Payment Element](https://docs.stripe.com/payments/payment-element.md). Payment Element adalah komponen UI siap-rakit yang menyederhanakan pengumpulan detail pembayaran untuk berbagai metode pembayaran. Payment Element berisi iframe yang mengirimkan informasi pembayaran dengan aman ke Stripe melalui koneksi HTTPS. Hindari penempatan Payment Element dalam iframe lain karena sejumlah metode pembayaran memerlukan pengalihan ke halaman lain untuk konfirmasi pembayaran. Jika Anda memilih untuk menggunakan iframe dan ingin menerima Apple Pay atau Google Pay, iframe harus memiliki atribut [allow](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-allowpaymentrequest) yang ditetapkan ke `"payment *"` setara. Alamat halaman checkout harus dimulai dengan `https://` rather daripada `http://` for integrasi Anda untuk bekerja. Anda dapat menguji integrasi tanpa menggunakan HTTPS, tetapi jangan lupa [mengaktifkannya](https://docs.stripe.com/security/guide.md#tls) saat Anda siap menerima pembayaran langsung. #### HTML + JS ### Siapkan Stripe.js Payment Element secara otomatis tersedia sebagai fitur Stripe.js. Sertakan skrip Stripe.js di halaman checkout Anda dengan menambahkannya ke `head` di file HTML. Selalu muat Stripe.js secara langsung dari js.stripe.com agar tetap mematuhi PCI. Jangan sertakan skrip dalam paket atau meng-host sendiri salinannya. ```html Checkout ``` Buat instance Stripe dengan JavaScript berikut di halaman checkout Anda: ```javascript // Set your publishable key: remember to change this to your live publishable key in production // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe('<>'); ``` ### Tambahkan Payment Element ke halaman pembayaran Anda Payment Element membutuhkan tempat tinggal di halaman pembayaran Anda. Buat simpul DOM kosong (wadah) dengan ID unik di formulir pembayaran Anda: ```html
``` Saat formulir sebelumnya dimuat, buat instance Payment Element dan pasang ke simpul DOM penampung. Teruskan [client secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) dari langkah sebelumnya ke `options` saat Anda membuat instance [Elements](https://docs.stripe.com/js/elements_object/create): Tangani client secret dengan hati-hati karena dapat menyelesaikan charge. Jangan mencatatnya, menyematkannya di URL, atau memaparkannya kepada siapa pun kecuali pelanggan. ```javascript const options = { clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; // Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in a previous stepconst elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element'); ``` #### React ### Siapkan Stripe.js Instal [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) dan [loader Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) dari register publik npm: ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` ### Tambahkan dan konfigurasikan penyedia Elements ke halaman pembayaran Anda Untuk menggunakan komponen Payment Element, bungkus komponen halaman checkout Anda di [penyedia Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Panggil `loadStripe` dengan kunci yang dapat dipublikasikan, dan teruskan `Promise` yang dikembalikan ke penyedia `Elements`. Teruskan juga [client secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) dari langkah sebelumnya sebagai `options` ke penyedia `Elements`. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component’s render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { const options = { // passing the client secret obtained in step 3 clientSecret: '{{CLIENT_SECRET}}', // Fully customizable with appearance API. appearance: {/*...*/}, }; return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ### Tambahkan komponen Payment Element Gunakan komponen `PaymentElement` untuk membuat formulir Anda: ```jsx import React from 'react'; import {PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { return (
); }; export default CheckoutForm; ``` Stripe Elements adalah kumpulan komponen UI drop-in. Untuk menyesuaikan formulir Anda lebih lanjut atau mengumpulkan informasi pelanggan yang berbeda, telusuri [dokumen Elements](https://docs.stripe.com/payments/elements.md). Payment Element menampilkan formulir dinamis yang memungkinkan pelanggan memilih metode pembayaran. Bagi masing-masing metode pembayaran, formulir akan secara otomatis meminta pelanggan untuk mengisi seluruh detail pembayaran yang diperlukan. ### Sesuaikan penampilan Sesuaikan Payment Element agar sejalan dengan desain situs Anda dengan meneruskan [objek penampilan](https://docs.stripe.com/js/elements_object/create#stripe_elements-options-appearance) ke dalam `options` ketika membuat penyedia `Elements`. ### Kumpulkan alamat Secara default, Payment Element hanya mengumpulkan detail alamat penagihan yang diperlukan. Beberapa perilaku, seperti [menghitung pajak](https://docs.stripe.com/api/tax/calculations/create.md) atau memasukkan detail pengiriman, memerlukan alamat lengkap pelanggan Anda. Anda dapat melakukannya: - Gunakan [Address Element](https://docs.stripe.com/elements/address-element.md) untuk memanfaatkan fitur pelengkapan otomatis dan pelokalan untuk mengumpulkan alamat lengkap pelanggan Anda. Hal ini membantu memastikan penghitungan pajak yang paling akurat. - Kumpulkan detail alamat menggunakan formulir khusus Anda sendiri. Setelah konfirmasi, Stripe secara otomatis membuka modal untuk menampilkan detail transfer bank kepada pelanggan Anda. ## Serahkan pembayaran ke Stripe [Sisi client] Gunakan [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) untuk menyelesaikan pembayaran menggunakan detail dari Payment Element. Berikan [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-return_url) ke fungsi ini untuk menunjukkan ke mana Stripe harus mengalihkan pengguna setelah menyelesaikan pembayaran. Pengguna Anda mungkin pertama kali diarahkan ulang ke situs perantara, seperti halaman otorisasi bank, sebelum diarahkan ulang ke `return_url`. Pembayaran kartu segera dialihkan ke `return_url` bila pembayaran berhasil. Jika tidak ingin dialihkan untuk pembayaran kartu setelah pembayaran selesai, Anda dapat mengatur [pengalihan](https://docs.stripe.com/js/payment_intents/confirm_payment#confirm_payment_intent-options-redirect) ke `if_required`. Ini hanya mengalihkan pelanggan yang memproses pembayaran dengan metode pembayaran berbasis pengalihan. #### HTML + JS ```javascript const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) const messageContainer = document.querySelector('#error-message'); messageContainer.textContent = error.message; } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }); ``` #### React Untuk memanggil [stripe.confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) dari komponen formulir pembayaran Anda, gunakan kait [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) dan [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook). Jika lebih suka komponen kelas tradisional daripada kait, Anda dapat menggunakan [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer) sebagai gantinya. ```jsx import React, {useState} from 'react'; import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js'; const CheckoutForm = () => { const stripe = useStripe(); const elements = useElements(); const [errorMessage, setErrorMessage] = useState(null); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } const {error} = await stripe.confirmPayment({ //`Elements` instance that was used to create the Payment Element elements, confirmParams: { return_url: 'https://example.com/order/123/complete', }, }); if (error) { // This point will only be reached if there is an immediate error when // confirming the payment. Show error to your customer (for example, payment // details incomplete) setErrorMessage(error.message); } else { // Your customer will be redirected to your `return_url`. For some payment // methods like iDEAL, your customer will be redirected to an intermediate // site first to authorize the payment, then redirected to the `return_url`. } }; return (
{/* Show error message to your customers */} {errorMessage &&
{errorMessage}
} ); }; export default CheckoutForm; ``` Pastikan `return_url` sesuai dengan halaman pada situs web Anda yang menyediakan status pembayaran. Bila Stripe mengarahkan ulang pelanggan ke `return_url`, kami menyediakan parameter query URL berikut ini: | Parameter | Keterangan | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent` | Identifier unik untuk `PaymentIntent`. | | `payment_intent_client_secret` | [client secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) dari objek `PaymentIntent`. | > Jika memiliki alat yang melacak sesi browser pelanggan, Anda mungkin perlu menambah domain `stripe.com` ke daftar pengecualian perujuk. Pengarahan ulang menyebabkan sejumlah alat membuat sesi baru, yang mencegah Anda melacak sesi yang telah selesai. Gunakan salah satu parameter query untuk mengambil PaymentIntent. Periksa [status PaymentIntent](https://docs.stripe.com/payments/paymentintents/lifecycle.md) untuk memutuskan apa yang akan ditampilkan kepada pelanggan Anda. Anda juga dapat menambahkan parameter query Anda sendiri saat memberikan `return_url`, yang akan tetap ada selama proses pengalihan. #### HTML + JS ```javascript // Initialize Stripe.js using your publishable key const stripe = Stripe('<>'); // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => { const message = document.querySelector('#message') // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': message.innerText = 'Success! Payment received.'; break; case 'processing': message.innerText = "Payment processing. We'll update you when payment is received."; break; case 'requires_payment_method': message.innerText = 'Payment failed. Please try another payment method.'; // Redirect your user back to your payment page to attempt collecting // payment again break; default: message.innerText = 'Something went wrong.'; break; } }); ``` #### React ```jsx import React, {useState, useEffect} from 'react'; import {useStripe} from '@stripe/react-stripe-js'; const PaymentStatus = () => { const stripe = useStripe(); const [message, setMessage] = useState(null); useEffect(() => { if (!stripe) { return; } // Retrieve the "payment_intent_client_secret" query parameter appended to // your return_url by Stripe.js const clientSecret = new URLSearchParams(window.location.search).get( 'payment_intent_client_secret' ); // Retrieve the PaymentIntent stripe .retrievePaymentIntent(clientSecret) .then(({paymentIntent}) => { // Inspect the PaymentIntent `status` to indicate the status of the payment // to your customer. // // Some payment methods will [immediately succeed or fail][0] upon // confirmation, while others will first enter a `processing` state. // // [0]: https://stripe.com/docs/payments/payment-methods#payment-notification switch (paymentIntent.status) { case 'succeeded': setMessage('Success! Payment received.'); break; case 'processing': setMessage("Payment processing. We'll update you when payment is received."); break; case 'requires_payment_method': // Redirect your user back to your payment page to attempt collecting // payment again setMessage('Payment failed. Please try another payment method.'); break; default: setMessage('Something went wrong.'); break; } }); }, [stripe]); return message; }; export default PaymentStatus; ``` ## Optional: Kirim email instruksi pembayaran Anda dapat mengaktifkan email instruksi pembayaran Transfer Bank dari [Dashboard](https://dashboard.stripe.com/settings/emails). Setelah mengaktifkan email instruksi pembayaran, Stripe mengirim email kepada pelanggan Anda bila: - PaymentIntent terkonfirmasi tetapi pelanggan tidak memiliki cukup saldo. - Pelanggan mengirim transfer bank tetapi tidak memiliki cukup dana untuk menyelesaikan pembayaran yang menunggu. Email instruksi pembayaran Transfer Bank berisi jumlah jatuh tempo, informasi bank untuk mentransfer dana, dan tautan ke halaman instruksi yang di-hosting Stripe. > Di sandbox, email instruksi pembayaran hanya dikirim ke alamat email yang ditautkan ke akun Stripe. ## Konfirmasikan PaymentIntent berhasil PaymentIntent tetap dalam status `requires_action` hingga dana masuk di rekening bank. Bila dana siap, status PaymentIntent akan diperbarui dari `requires_action` menjadi `succeeded`. Endpoint *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) Anda perlu dikonfigurasi untuk menerima event `payment_intent.partially_funded`. Stripe mengirimkan peristiwa ini jika dana diterapkan ke PaymentIntent tetapi pembayaran masih belum selesai. Perlu diperhatikan bahwa ketika Anda pertama kali mengonfirmasi PaymentIntent dan statusnya berubah menjadi `requires_action`, Stripe mengirimkan `payment_intent.requires_action` sebagai gantinya, meskipun dana saldo pelanggan yang ada diterapkan pada saat yang sama. Anda dapat [menambahkan webhook dari Dashboard](https://dashboard.stripe.com/webhooks/create). Atau, Anda dapat menggunakan [Webhook Endpoints API](https://docs.stripe.com/api/webhook_endpoints.md) untuk mulai menerima kejadian [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). > [Stripe CLI](https://docs.stripe.com/stripe-cli.md) tidak mendukung pemicuan kejadian versi API beta, seperti `payment_intent.partially_funded`. Kejadian berikut dikirim selama alur pendanaan pembayaran bila PaymentIntent diperbarui. | Kejadian | Keterangan | Langkah berikutnya | | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `payment_intent.requires_action` | Dikirim selama konfirmasi bila saldo pelanggan tidak memiliki cukup dana untuk merekonsiliasi PaymentIntent, PaymentIntent berubah menjadi `requires_action`. | Perintahkan pelanggan Anda untuk mengirim transfer bank dengan `amount_remaining`. | | `payment_intent.partially_funded` | Pelanggan mengirimkan transfer bank yang diterapkan ke PaymentIntent, tetapi jumlahnya tidak cukup untuk menyelesaikan pembayaran. Ini mungkin terjadi karena pelanggan membayar kurang dari jumlah yang seharusnya, biaya bank mengurangi jumlah yang diterima, atau sisa saldo pelanggan diterapkan ke PaymentIntent. PaymentIntent yang sebagian didanai tidak tercermin dalam saldo rekening Anda hingga pembayaran selesai. | Perintahkan pelanggan Anda untuk mengirim transfer bank yang lain dengan `amount_remaining` baru untuk menyelesaikan pembayaran. Jika ingin menyelesaikan pembayaran dengan dana yang diterapkan sebagian, Anda dapat memperbarui `amount` dan [konfirmasikan](https://docs.stripe.com/api/payment_intents/confirm.md) PaymentIntent lagi. | | `payment_intent.succeeded` | Pembayaran pelanggan berhasil. | Penuhi barang atau layanan yang dibeli oleh pelanggan. | > Bila Anda mengubah jumlah PaymentIntent yang didanai sebagian, dana akan dikembalikan ke saldo pelanggan. Jika PaymentIntent lain terbuka, Stripe mendanainya secara otomatis. Jika pelanggan dikonfigurasikan untuk rekonsiliasi manual, Anda perlu [menerapkan dana](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) lagi. Kami merekomendasikan [penggunaan webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) untuk mengonfirmasikan bahwa charge telah berhasil dan memberi tahu pelanggan bahwa pembayaran telah selesai. ### Kode sampel #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Lihat pembayaran yang menunggu di Dashboard Anda dapat melihat semua PaymentIntents transfer bank yang tertunda di [Dashboard](https://dashboard.stripe.com/payments) dengan menerapkan filter **Menunggu pendanaan** ke **Status**. ## Coba integrasi Anda Anda dapat mencoba integrasi dengan menyimulasikan transfer bank masuk menggunakan API, Dashboard atau versi beta Stripe CLI. #### Dashboard Untuk melakukan simulasi transfer bank menggunakan Dasbor di *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), buka halaman pelanggan di Dashboard. Di bagian **Metode pembayaran**, klik **Tambah** dan pilih **Dana saldo kas (hanya untuk uji coba)**. #### API Untuk menyimulasikan transfer bank menggunakan API: #### AS ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### UK ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### JP ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### MX ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### Stripe CLI Untuk menyimulasikan transfer bank dengan Stripe CLI: 1. [Instal Stripe CLI](https://docs.stripe.com/stripe-cli.md). 1. Masuk ke CLI menggunakan akun yang sama dengan akun masuk Anda di Dashboard Stripe. ```bash stripe login ``` 1. Simulasikan transfer bank yang masuk untuk pelanggan yang ada. #### AS ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### UK ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### JP ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### MX ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. ## Menangani masalah ketersediaan sementara Kode kesalahan berikut mengindikasikan masalah sementara pada ketersediaan metode pembayaran: | Kode | Keterangan | Penanganan | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Ada terlalu banyak permintaan yang dibuat dalam waktu berdekatan untuk metode pembayaran ini, yang memiliki batas lebih ketat daripada [batas rasio API secara keseluruhan](https://docs.stripe.com/rate-limits.md). | Kesalahan ini dapat bertahan untuk beberapa permintaan API saat banyak pelanggan Anda mencoba menggunakan metode pembayaran yang sama, seperti saat obral yang sedang berlangsung di situs web Anda. Dalam kasus ini, minta pelanggan Anda untuk memilih metode pembayaran lain. | > Jika Anda mengantisipasi penggunaan berat secara umum atau karena kejadian mendatang, hubungi kami segera setelah Anda mengetahuinya. # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=checkout. > Stripe dapat secara otomatis menyajikan metode pembayaran yang relevan kepada pelanggan Anda dengan mengevaluasi mata uang, pembatasan metode pembayaran, dan parameter lainnya. > > - Ikuti panduan [Menerima pembayaran](https://docs.stripe.com/payments/accept-a-payment.md?payment-ui=checkout&ui=stripe-hosted) untuk membangun integrasi Checkout yang menggunakan [metode pembayaran dinamis](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). - Jika Anda tidak ingin menggunakan metode pembayaran dinamis, ikuti langkah-langkah di bawah ini untuk mengonfigurasi metode pembayaran secara manual dalam integrasi Checkout Anda. Transfer bank adalah metode pembayaran [single-use](https://docs.stripe.com/payments/payment-methods.md#usage) untuk Checkout yang memungkinkan pelanggan membayar dengan transfer bank menggunakan instruksi pembayaran yang diberikan. Saat memilih membayar, pengguna dialihkan ke halaman yang di-hosting yang menampilkan instruksi transfer bank dan status pembayaran transfer. Transfer bank juga merupakan *metode pembayaran notifikasi tertunda, yang berarti dana tidak segera tersedia setelah pembayaran.* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods) > Transfer bank tidak tersedia pada Sesi Checkout yang tidak menyertakan [objek Pelanggan](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-customer) yang sudah ada sebagai bagian dari permintaan pembuatan sesi. ## Tentukan kompatibilitas **Lokasi bisnis yang didukung**: Europe (SEPA area), UK, JP, MX, US **Mata uang yang didukung**: `eur, gbp, jpy, mxn, usd` **Mata uang transaksi**: `eur, gbp, jpy, mxn, usd` **Mode pembayaran**: Yes **Mode persiapan**: No **Mode langganan**: No Sesi Checkout harus memenuhi semua persyaratan berikut untuk mendukung pembayaran Bank Transfer: - *Prices* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) untuk semua mata anggaran harus dalam mata uang yang sama. Jika Anda memiliki mata anggaran dalam mata uang berbeda, buat Sesi Checkout terpisah untuk setiap mata uang. - Anda hanya dapat menggunakan mata anggaran satu kali (Sesi Checkout Transfer Bank tidak mendukung paket *langganan* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) rutin). ## Terima pembayaran > Buat integrasi untuk [menerima pembayaran](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout) dengan Checkout sebelum menggunakan panduan ini. Gunakan panduan ini untuk mengaktifkan Bank Transfer. ### Buat atau ambil Pelanggan Anda harus mengaitkan objek [Pelanggan](https://docs.stripe.com/api/customers.md) untuk merekonsiliasi setiap pembayaran transfer bank. Jika sudah memiliki objek Pelanggan, Anda dapat melewati langkah ini. Jika tidak, buat objek Pelanggan baru. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ### Aktifkan Bank Transfer sebagai metode pembayaran Saat membuat [Sesi Checkout](https://docs.stripe.com/api/checkout/sessions.md) baru, Anda perlu: 1. Siapkan `customer` 1. Tambahkan `customer_balance` ke daftar `payment_method_types` 1. Memastikan semua `line_items` Anda menggunakan mata uang yang sama #### AS ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### Inggris ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=gbp" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### UE ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=eur" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" \ --data-urlencode "success_url=https://example.com/success" ``` Atur [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][negara]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) ke salah satu dari untuk menampilkan IBAN yang dilokalkan kepada pelanggan. #### JP ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=jpy" \ -d "line_items[0][price_data][product_data][name]=Tシャツ" \ -d "line_items[0][price_data][unit_amount]=19000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` #### MX ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "line_items[0][price_data][currency]=mxn" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=18000" \ -d "line_items[0][quantity]=1" \ -d mode=payment \ -d "payment_method_types[0]=card" \ -d "payment_method_types[1]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" \ --data-urlencode "success_url=https://example.com/success" ``` ### Mengarahkan ulang ke halaman instruksi transfer bank yang di-hosting > Tidak seperti pembayaran kartu, pelanggan tidak selalu dialihkan ke [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url) dengan pembayaran transfer bank. Setelah berhasil *menyerahkan* (Submitting an order indicates that the customer intends to pay. Upon submission, the order can no longer be updated and is ready for payment) formulir Checkout, - Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah permintaan, pembayaran langsung berhasil dan pelanggan dialihkan ke [success_url](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-success_url). - Jika saldo pelanggan tidak cukup tinggi untuk menutupi jumlah permintaan, pelanggan dialihkan ke [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url). Halaman tersebut memiliki instruksi untuk memandu pelanggan Anda menyelesaikan transfer. Stripe mengizinkan penyesuaian UI yang dilihat pelanggan di halaman [Pengaturan Branding](https://dashboard.stripe.com/account/branding). Pengaturan brand berikut dapat diterapkan ke halaman instruksi yang di-hosting: - **Ikon**—gambar brand dan nama umum bisnis Anda - **Warna brand**—digunakan sebagai warna latar belakang ### Penuhi pesanan Anda Karena transfer bank adalah *metode pembayaran dengan notifikasi tertunda* (A payment method that can't immediately return payment status when a customer attempts a transaction (for example, ACH debits). Businesses commonly hold an order in a pending state until payment is successful with these payment methods), Anda perlu menggunakan metode seperti *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) untuk memonitor status pembayaran serta menangani *pemenuhan* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) pesanan. Pelajari selengkapnya tentang [menyiapkan webhook dan memenuhi pesanan](https://docs.stripe.com/checkout/fulfillment.md). Kejadian berikut dikirim ketika status pembayaran berubah: | Nama Kejadian | Keterangan | Langkah berikutnya | | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | Pelanggan telah berhasil menyerahkan formulir Checkout dan dialihkan ke `hosted_instructions_url`. | Tunggu pelanggan melakukan transfer bank | | [checkout.session.async_payment_succeeded](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) | Pelanggan telah berhasil melakukan transfer bank. `PaymentIntent` bertransisi ke `succeeded`. | Penuhi barang atau layanan yang dibeli oleh pelanggan. | ## Optional: Kirim email instruksi pembayaran Anda dapat mengaktifkan email instruksi pembayaran Transfer Bank dari [Dashboard](https://dashboard.stripe.com/settings/emails). Setelah mengaktifkan email instruksi pembayaran, Stripe mengirim email kepada pelanggan Anda bila: - PaymentIntent terkonfirmasi tetapi pelanggan tidak memiliki cukup saldo. - Pelanggan mengirim transfer bank tetapi tidak memiliki cukup dana untuk menyelesaikan pembayaran yang menunggu. Email instruksi pembayaran Transfer Bank berisi jumlah jatuh tempo, informasi bank untuk mentransfer dana, dan tautan ke halaman instruksi yang di-hosting Stripe. > Di sandbox, email instruksi pembayaran hanya dikirim ke alamat email yang ditautkan ke akun Stripe. ## Coba integrasi Anda Anda dapat mencoba integrasi dengan menyimulasikan transfer bank masuk menggunakan API, Dashboard atau versi beta Stripe CLI. #### Dashboard Untuk melakukan simulasi transfer bank menggunakan Dasbor di *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), buka halaman pelanggan di Dashboard. Di bagian **Metode pembayaran**, klik **Tambah** dan pilih **Dana saldo kas (hanya untuk uji coba)**. #### API Untuk menyimulasikan transfer bank menggunakan API: #### AS ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="usd" ``` #### UK ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="gbp" ``` #### UE ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="REF-4242" \ -d "amount"="1000" \ -d "currency"="eur" ``` #### JP ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "amount"="1000" \ -d "currency"="jpy" ``` #### MX ```bash curl https://api.stripe.com/v1/test_helpers/customers/{{CUSTOMER_ID}}/fund_cash_balance \ -X POST \ -u <>: \ -d "reference"="123456" \ -d "amount"="1000" \ -d "currency"="mxn" ``` #### Stripe CLI Untuk menyimulasikan transfer bank dengan Stripe CLI: 1. [Instal Stripe CLI](https://docs.stripe.com/stripe-cli.md). 1. Masuk ke CLI menggunakan akun yang sama dengan akun masuk Anda di Dashboard Stripe. ```bash stripe login ``` 1. Simulasikan transfer bank yang masuk untuk pelanggan yang ada. #### AS ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=usd ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### UK ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=gbp ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### UE ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=DVGBG97TZ6ZV \ --currency=eur ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. #### JP ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1000 \ --currency=jpy ``` #### MX ```bash stripe test_helpers customers fund_cash_balance "{{CUSTOMER_ID}}" \ --amount=1099 \ --reference=123456 \ --currency=mxn ``` Parameter `reference` bersifat opsional dan menyimulasikan nilai yang diisi pelanggan untuk bidang referensi transfer bank. ## See also - [Pemenuhan Checkout](https://docs.stripe.com/checkout/fulfillment.md) - [Menyesuaikan Checkout](https://docs.stripe.com/payments/checkout/customization.md) # API langsung > This is a API langsung for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/bank-transfers/accept-a-payment?payment-ui=direct-api. ## Siapkan Stripe [Sisi server] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). Gunakan pustaka resmi kami untuk mendapatkan akses ke API Stripe dari aplikasi Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Buat atau ambil Pelanggan [Sisi server] Anda harus mengaitkan objek [Pelanggan](https://docs.stripe.com/api/customers.md) untuk merekonsiliasi setiap pembayaran transfer bank. Jika sudah memiliki objek Pelanggan, Anda dapat melewati langkah ini. Jika belum, buat objek Pelanggan yang baru. ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## Buat dan konfirmasikan PaymentIntent [Sisi server] [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) adalah objek yang mewakili maksud Anda menagih pembayaran dari pelanggan dan melacak siklus proses pembayaran melalui setiap tahapannya. Buat dan konfirmasikan PaymentIntent di server, dengan menetapkan jumlah dan mata uang yang ingin Anda gunakan untuk menagih. Anda juga harus mengisi [parameter pelanggan](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-customer) dari permintaan pembuatan PaymentIntent. Transfer bank tidak tersedia di PaymentIntents tanpa pelanggan. #### Kelola metode pembayaran dari Dashboard Sebelum membuat Payment Intent, pastikan untuk mengaktifkan **Transfer bank** di halaman [pengaturan metode pembayaran](https://dashboard.stripe.com/settings/payment_methods) Dashboard Anda. > Dengan [Metode pembayaran dinamis](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md), Stripe menangani pengembalian metode pembayaran yang memenuhi syarat berdasarkan faktor-faktor, seperti jumlah transaksi, mata uang, dan alur pembayaran. #### AS ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=usd \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### Inggris ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=gbp \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=eur \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` Untuk melokalkan IBAN yang ditampilkan kepada pelanggan, Anda dapat mengonfigurasi negara Pelanggan dengan mengatur properti [`address.country`](https://docs.stripe.com/api/customers/object.md#customer_object-address-country) atau dengan [mengedit Pelanggan di Dashboard](https://docs.stripe.com/invoicing/customer.md#edit-a-customer). Kami mendukung pelokalan IBAN untuk : - Jika Anda belum mengonfigurasi negara untuk Pelanggan, atau jika negara mereka tidak mendukung pelokalan IBAN, kami akan kembali ke negara akun Stripe Anda. - Jika pelokalan IBAN tidak didukung untuk negara akun Stripe Anda, kami kembali ke `IE`. > Saat ini, pembuatan nomor rekening bank virtual baru yang dilokalkan tidak tersedia untuk Spanyol (ES). Gunakan salah satu negara VBAN UE lainnya. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=jpy \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d "customer={{CUSTOMER_ID}}" \ -d currency=mxn \ -d "automatic_payment_methods[enabled]=true" \ --data-urlencode "return_url=https://example.com/return_url" \ -d "payment_method_data[type]=customer_balance" \ -d confirm=true ``` Di versi terbaru API, menentukan parameter `automatic_payment_methods` bersifat opsional karena Stripe mengaktifkan fungsionalitasnya secara default. Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). #### Cantumkan metode pembayaran secara manual Untuk menentukan metode pembayaran secara manual dengan API, tambahkan `customer_balance` ke daftar [tipe metode pembayaran](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) bagi PaymentIntent Anda. Tentukan [id](https://docs.stripe.com/api/customers/object.md#customer_object-id) Pelanggan. #### AS ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=us_bank_transfer" \ -d confirm=true ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `us_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### Inggris ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=gbp \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=gb_bank_transfer" \ -d confirm=true ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `gb_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### UE ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=eu_bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]=FR" \ -d confirm=true ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `eu_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. - Atur [payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_account-country) ke salah satu dari . IBAN yang ditampilkan kepada pelanggan dilokalkan ke negara yang dipilih. > Saat ini, pembuatan nomor rekening bank virtual baru yang dilokalkan tidak tersedia untuk Spanyol (ES). Gunakan salah satu negara VBAN UE lainnya. #### JP ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=19000 \ -d currency=jpy \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=jp_bank_transfer" \ -d confirm=true ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `jp_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. #### MX ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1099 \ -d currency=mxn \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[]=customer_balance" \ -d "payment_method_data[type]=customer_balance" \ -d "payment_method_options[customer_balance][funding_type]=bank_transfer" \ -d "payment_method_options[customer_balance][bank_transfer][type]=mx_bank_transfer" \ -d confirm=true ``` Jika pelanggan sudah memiliki saldo yang cukup tinggi untuk menutupi jumlah pembayaran, PaymentIntent langsung berhasil dengan status `succeeded`. Pelanggan dapat memperoleh saldo bila secara tidak sengaja membayar lebih untuk suatu transaksi—kejadian umum dengan transfer bank. Anda harus [merekonsiliasi saldo pelanggan dalam periode tertentu berdasarkan lokasi Anda](https://docs.stripe.com/payments/customer-balance/reconciliation.md). - Gunakan `bank_transfer` sebagai [funding_type](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-funding_type) untuk menentukan hal yang harus dilakukan bila pelanggan tidak memiliki cukup saldo untuk menutupi jumlah pembayaran. - Gunakan `mx_bank_transfer` sebagai [bank_transfer[type]](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-type) untuk menentukan tipe transfer bank yang dapat digunakan untuk mendanai pembayaran. > Selalu tentukan `payment_method_types` saat membuat pembayaran. Anda tidak dapat menggunakan `customer_balance` untuk [pembayaran mendatang](https://docs.stripe.com/payments/save-and-reuse.md). ## Optional: Kirim email instruksi pembayaran Anda dapat mengaktifkan email instruksi pembayaran Transfer Bank dari [Dashboard](https://dashboard.stripe.com/settings/emails). Setelah mengaktifkan email instruksi pembayaran, Stripe mengirim email kepada pelanggan Anda bila: - PaymentIntent terkonfirmasi tetapi pelanggan tidak memiliki cukup saldo. - Pelanggan mengirim transfer bank tetapi tidak memiliki cukup dana untuk menyelesaikan pembayaran yang menunggu. Email instruksi pembayaran Transfer Bank berisi jumlah jatuh tempo, informasi bank untuk mentransfer dana, dan tautan ke halaman instruksi yang di-hosting Stripe. > Di sandbox, email instruksi pembayaran hanya dikirim ke alamat email yang ditautkan ke akun Stripe. ## Perintahkan pelanggan untuk menyelesaikan transfer bank [Sisi client] Jika saldo pelanggan tidak cukup untuk menutupi jumlah permintaan, PaymentIntent akan menampilkan status `requires_action`. Tanggapan memiliki bidang `next_action` yang berisi nilai `type` `display_bank_transfer_instructions`. Hash `next_action[display_bank_transfer_instructions]` berisi informasi untuk Anda tampilkan kepada pelanggan agar dapat menyelesaikan transfer bank. Untuk memastikan penyelesaian dana, instruksikan pelanggan Anda untuk menggunakan detail persis yang diberikan, terutama untuk nama akun dan nomor akun, jika ada. > Dalam *mode live* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments), Stripe menyediakan seperangkat detail transfer bank yang unik kepada setiap konsumen. Sebaliknya, Stripe menawarkan detail transfer bank yang tidak valid kepada semua pelanggan di lingkungan percobaan. Tidak seperti mode live, detail yang tidak valid ini tidak selalu unik. #### AS | Bidang | Keterangan | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Tipe transfer bank yang akan digunakan. Tipe harus berupa `us_bank_transfer` di AS. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Kode referensi unik untuk mengidentifikasi transfer bank. Instruksikan pelanggan Anda untuk memasukkan kode ini di bidang referensi transfer bank mereka. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Sisa jumlah yang perlu ditransfer untuk menyelesaikan pembayaran. Instruksikan pelanggan Anda untuk mentransfer jumlah ini. Ini mungkin berbeda dari jumlah PaymentIntent jika dana yang sudah ada sebelumnya di saldo pelanggan diterapkan ke PaymentIntent atau jika pelanggan Anda kurang bayar. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Mata uang untuk sisa jumlah. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Daftar alamat keuangan untuk rekening bank AS. Tipe mencakup `aba` dan `swift`. Lihat di bawah untuk detailnya. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Tautan ke halaman yang di-hosting dan memandu pelanggan Anda menyelesaikan transfer. | #### hash aba Contoh hash `aba`: ```json { "aba": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "routing_number": "444555666" }, "supported_networks": [ "ach", "domestic_wire_us" ], "type": "aba" } ``` | Bidang | Nilai | Keterangan | | -------------------- | ------------------------------ | ---------------------------------------------- | | `type` | `aba` | Tipe alamat keuangan. | | `supported_networks` | - `ach` - `domestic_wire_us` | Daftar jaringan yang didukung oleh alamat ini. | | `aba.account_number` | 111222333444 | Nomor rekening ABA. | | `aba.routing_number` | 444555666 | Nomor routing ABA. | | `aba.bank_name` | Wells Fargo Bank, NA | Nama bank. | #### hash swift Contoh hash `swift`: ```json { "swift": { "account_number": "111222333444", "bank_name": "Wells Fargo Bank, NA", "swift_code": "AAAA-BB-CC-123" }, "supported_networks": [ "swift" ], "type": "swift" } ``` | Bidang | Nilai | Keterangan | | ---------------------- | -------------------- | ---------------------------------------------- | | `type` | `swift` | Tipe alamat keuangan. | | `supported_networks` | - `swift` | Daftar jaringan yang didukung oleh alamat ini. | | `swift.account_number` | 111222333444 | Nomor rekening SWIFT. | | `swift.swift_code` | AAAA-BB-CC-123 | Kode SWIFT. | | `swift.bank_name` | Wells Fargo Bank, NA | Nama bank. | #### Pengaturan waktu penyelesaian Setelah menginstruksikan pelanggan Anda untuk memprakarsai transfer dengan bank mereka menggunakan informasi yang Anda berikan, diperlukan waktu hingga 5 hari untuk menyelesaikan transfer. Waktu penyelesaian bergantung pada jaringan perbankan yang dilalui masuknya transfer ke Stripe: - Transfer ACH tiba dalam waktu 1–3 hari kerja. - Transfer kawat domestik (Fedwire) tiba pada hari yang sama (tergantung apakah transfer dikirim sebelum batas waktu bank). - Transfer kawat internasional (SWIFT) tiba dalam waktu 1–5 hari kerja. #### Inggris | Bidang | Keterangan | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Tipe transfer bank yang akan digunakan. Tipe harus berupa `gb_bank_transfer` di Kerajaan Inggris. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Kode referensi unik untuk mengidentifikasi transfer bank. Instruksikan pelanggan Anda untuk memasukkan kode ini di bidang referensi transfer bank mereka. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Sisa jumlah yang perlu ditransfer untuk menyelesaikan pembayaran. Instruksikan pelanggan Anda untuk mentransfer jumlah ini. Ini mungkin berbeda dari jumlah PaymentIntent jika dana yang sudah ada sebelumnya di saldo pelanggan diterapkan ke PaymentIntent atau jika pelanggan Anda kurang bayar. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Mata uang untuk sisa jumlah. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Daftar alamat keuangan untuk rekening bank Inggris. Tipe mencakup `sort_code`. Lihat di bawah untuk detailnya. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Tautan ke halaman yang di-hosting dan memandu pelanggan Anda menyelesaikan transfer. | ### hash sort_code Contoh hash `sort_code`: ```json { "sort_code": { "account_holder_name": "Demo Test Inc.", "account_number": "98765432", "sort_code": "200000" }, "supported_networks": [ "bacs", "fps" ], "type": "sort_code" } ``` | Bidang | Nilai | Keterangan | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | --------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `sort_code` | Tipe alamat keuangan. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `bacs` - `fps` | Daftar jaringan yang didukung oleh alamat ini. | | [sort_code.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_number) | 98765432 | Nomor rekening 8 angka | | [sort_code.sort_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-sort_code) | 200000 | Kode sort 6 angka | | [sort_code.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-sort_code-account_holder_name) | Demo Test Inc. | Nama orang atau bisnis yang memiliki rekening bank. | #### Pengaturan waktu penyelesaian Setelah menginstruksikan pelanggan Anda untuk memprakarsai transfer dengan bank mereka menggunakan informasi yang Anda berikan, diperlukan waktu hingga 5 hari untuk menyelesaikan transfer. Waktu penyelesaian bergantung pada jaringan perbankan yang dilalui masuknya transfer ke Stripe: - Transfer FPS masuk dalam waktu 15 menit. - Transfer BACS masuk dalam waktu 5 hari. > Transfer bank yang dikirim melalui jaringan pembayaran [CHAPS](https://www.bankofengland.co.uk/payment-and-settlement/chaps) saat ini tidak didukung. #### UE | Bidang | Keterangan | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Tipe transfer bank yang digunakan. Tipe harus `eu_bank_transfer` di UE. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Kode referensi unik untuk mengidentifikasi transfer bank. Instruksikan pelanggan Anda untuk memasukkan kode ini di bidang referensi transfer bank mereka. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Sisa jumlah yang perlu ditransfer untuk menyelesaikan pembayaran. Instruksikan pelanggan Anda untuk mentransfer jumlah ini. Ini mungkin berbeda dari jumlah PaymentIntent jika dana yang sudah ada sebelumnya di saldo pelanggan diterapkan ke PaymentIntent atau jika pelanggan Anda kurang bayar. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Mata uang untuk sisa jumlah. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Daftar alamat keuangan bagi rekening bank Uni Eropa. Tipe mencakup `iban`. Lihat di bawah untuk detailnya. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Tautan ke halaman yang di-hosting dan memandu pelanggan Anda menyelesaikan transfer. | ### hash iban Contoh hash `iban`: ```json { "iban": { "account_holder_name": "Demo Test Inc.", "bic": "CITINL2XXXX", "country": "NL", "iban": "NL40CITI7000799556 " }, "supported_networks": [ "sepa" ], "type": "iban" } ``` | Bidang | Nilai | Keterangan | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `iban` | Tipe alamat keuangan. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `sepa` | Daftar jaringan yang didukung oleh alamat ini. | | [iban.iban](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-iban) | NL40CITI7000799556 | IBAN tujuan pembayaran pelanggan. Jika Anda mengelola metode pembayaran dari [Dashboard](https://dashboard.stripe.com/settings/payment_methods), negara IBAN dipilih berdasarkan [negara](https://docs.stripe.com/api/customers/object.md#customer_object-country) Pelanggan atau negara akun Stripe Anda. Jika Anda mencantumkan metode pembayaran secara manual menggunakan parameter [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types), negara IBAN dipilih berdasarkan parameter [negara](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-customer_balance-bank_transfer-eu_bank_transfer-country) yang diteruskan dalam permintaan. | | [iban.bic](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-bic) | CITINL2XXXX | BIC untuk IBAN ini. | | [iban.country](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-country) | `NL` | Kode negara dua-huruf dari rekening bank tujuan transfer. | | [iban.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-iban-account_holder_name) | Demo Test Inc. | Nama orang atau bisnis yang memiliki rekening bank. | #### Pengaturan waktu penyelesaian Untuk transfer domestik, minta pelanggan Anda untuk memulai transfer SEPA Instan (jika tersedia) menggunakan detail yang Anda berikan. Dana biasanya dikreditkan dalam hitungan detik dan tiba dalam waktu 30 menit. Penyelesaian yang lebih lama dapat terjadi pada akhir pekan, hari libur bank, atau jika bank pengirim tidak dapat merutekan pembayaran melalui skema Instan. Dalam kasus ini, transfer diproses sebagai pembayaran SEPA standar. > Menerima transfer EUR internasional sedang dalam pratinjau. Untuk kelayakan akses awal, hubungi [sepa-bank-transfers-beta@stripe.com](mailto:sepa-bank-transfers-beta@stripe.com). #### JP | Bidang | Keterangan | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Tipe transfer bank yang akan digunakan. Tipe harus berupa `jp_bank_transfer` di Jepang. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Bidang ini tidak digunakan. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Sisa jumlah yang perlu ditransfer untuk menyelesaikan pembayaran. Instruksikan pelanggan Anda untuk mentransfer jumlah ini. Ini mungkin berbeda dari jumlah PaymentIntent jika dana yang sudah ada sebelumnya di saldo pelanggan diterapkan ke PaymentIntent atau jika pelanggan Anda kurang bayar. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Mata uang untuk sisa jumlah. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses) | Daftar alamat keuangan untuk rekening bank JP. Tipe mencakup `zengin`. Lihat di bawah untuk detailnya. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Tautan ke halaman yang di-hosting dan memandu pelanggan Anda menyelesaikan transfer. | ### hash zengin Contoh hash `zengin`: ```json { "zengin": { "account_holder_name": "ストライプジャパン(カ シュウノウダイコウ", "account_number": "1234567", "account_type": "futsu", "bank_code": "0009", "bank_name": "三井住友銀行", "branch_code": "950", "branch_name": "東京第二" }, "supported_networks": [ "zengin" ], "type": "zengin" } ``` | Bidang | Nilai | Keterangan | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ---------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `zengin` | Tipe alamat keuangan. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `zengin` | Daftar jaringan yang didukung oleh alamat ini. | | [zengin.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_code) | 0009 | Kode bank 4 angka. | | [zengin.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-bank_name) | 三井住友銀行 | Nama bank. | | [zengin.branch_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_code) | 950 | Kode cabang 3 angka. | | [zengin.branch_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-branch_name) | 東京第二 | Nama cabang. | | [zengin.account_type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_type) | `futsu`, `toza` | Tipe rekening. | | [zengin.account_holder_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_holder_name) | ストライプジャパン(カ シュウノウダイコウ | Nama pemilik rekening. | | [zengin.account_number](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-zengin-account_number) | 1234567 | Nomor rekening 7 angka. | #### Pengaturan waktu penyelesaian Perintahkan pelanggan Anda untuk memulai transfer dengan bank mereka menggunakan informasi yang Anda berikan. Transfer yang dilakukan selama jam kerja akan masuk pada hari yang sama. Transfer yang dilakukan di luar jam kerja akan masuk pada hari kerja berikutnya. #### MX | Bidang | Keterangan | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-type) | Tipe transfer bank yang akan digunakan. Tipe harus berupa `mx_bank_transfer` di Meksiko. | | [reference](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-reference) | Kode referensi unik untuk mengidentifikasi transfer bank. Instruksikan pelanggan Anda untuk memasukkan kode ini di bidang referensi transfer bank mereka. | | [amount_remaining](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-amount_remaining) | Sisa jumlah yang perlu ditransfer untuk menyelesaikan pembayaran. Instruksikan pelanggan Anda untuk mentransfer jumlah ini. Ini mungkin berbeda dari jumlah PaymentIntent jika dana yang sudah ada sebelumnya di saldo pelanggan diterapkan ke PaymentIntent atau jika pelanggan Anda kurang bayar. | | [currency](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-currency) | Mata uang untuk sisa jumlah. | | [financial_addresses](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions) | Daftar alamat keuangan untuk rekening bank mx. Tipe mencakup `spei`. Lihat di bawah untuk detailnya. | | [hosted_instructions_url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-hosted_instructions_url) | Tautan ke halaman yang di-hosting dan memandu pelanggan Anda menyelesaikan transfer. | ### hash spei Contoh hash `spei`: ```json { "spei": { "bank_code": "002", "bank_name": "BANAMEX", "clabe": "002180650612345670" }, "supported_networks": [ "spei" ], "type": "spei" } ``` | Bidang | Nilai | Keterangan | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ---------------------------------------------- | | [type](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-type) | `spei` | Tipe alamat keuangan. | | [supported_networks](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-supported_networks) | - `spei` | Daftar jaringan yang didukung oleh alamat ini. | | [spei.clabe](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-clabe) | 002180650612345670 | Nomor CLABE 18 angka. | | [spei.bank_code](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_code) | 002 | Kode bank 3 angka. | | [spei.bank_name](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-display_bank_transfer_instructions-financial_addresses-spei-bank_name) | BANAMEX | Nama pendek dari lembaga perbankan | Perintahkan pelanggan Anda untuk memulai transfer dengan bank mereka menggunakan informasi yang Anda berikan. Kami memperkirakan sebagian besar pembayaran akan tiba dalam waktu kurang dari 10 menit, baik pada hari kerja perbankan maupun non-perbankan. ## Konfirmasikan PaymentIntent berhasil PaymentIntent tetap dalam status `requires_action` hingga dana masuk di rekening bank. Bila dana siap, status PaymentIntent akan diperbarui dari `requires_action` menjadi `succeeded`. Anda perlu menyiapkan endpoint *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) untuk mulai menerima kejadian `payment_intent.partially_funded`. Anda dapat [menambahkan webhook dari Dashboard](https://dashboard.stripe.com/webhooks/create). Atau, Anda dapat menggunakan [Webhook Endpoints API](https://docs.stripe.com/api/webhook_endpoints.md) untuk mulai menerima kejadian [payment_intent.partially_funded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.partially_funded). Stripe mengirimkan kejadian berikut selama dana pembayaran mengalir saat kami memperbarui PaymentIntent. | Kejadian | Keterangan | Langkah berikutnya | | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_intent.requires_action` | Dikirim saat konfirmasi ketika saldo pelanggan tidak memiliki dana yang cukup untuk merekonsiliasi PaymentIntent, sehingga PaymentIntent beralih ke `requires_action`. Jika saldo tunai pelanggan telah diterapkan secara otomatis ke PaymentIntent pada saat konfirmasi namun jumlahnya tidak mencakup seluruh `amount` PaymentIntent, Stripe akan memicu peristiwa (event) ini dengan `amount_remaining` yang akurat. | Perintahkan pelanggan Anda untuk mengirim transfer bank dengan `amount_remaining`. | | `payment_intent.partially_funded` | Pelanggan mengirimkan transfer bank yang telah diterapkan ke PaymentIntent, namun tidak cukup untuk menyelesaikan pembayaran. Hal ini dapat terjadi jika pelanggan mentransfer nominal yang tidak mencukupi setelah Anda mengonfirmasi `PaymentIntent`. Ini bisa disebabkan oleh kurang bayar atau biaya yang di-charge oleh bank pelanggan. PaymentIntent yang didanai sebagian tidak akan tercermin dalam saldo akun Anda hingga pembayaran selesai sepenuhnya. | Instruksikan pelanggan Anda untuk mengirim transfer bank lain dengan `amount_remaining` baru untuk menyelesaikan pembayaran. Jika Anda ingin menyelesaikan pembayaran dengan dana yang diterapkan sebagian, Anda dapat memperbarui `amount` dan [konfirmasikan](https://docs.stripe.com/api/payment_intents/confirm.md) PaymentIntent kembali. | | `payment_intent.succeeded` | Pembayaran pelanggan berhasil. | Penuhi barang atau layanan yang dibeli oleh pelanggan. | Untuk memantau semua peristiwa terkait pendanaan parsial, pantau `requires_action` dan `partially_funded`. Stripe memicu `requires_action` jika pendanaan masih diperlukan setelah konfirmasi. Kami memicu `partially_funded` jika di kemudian hari kami menerima dana tambahan dari pelanggan yang belum sepenuhnya menutupi sisa jumlah tagihan. > Bila Anda mengubah jumlah PaymentIntent yang didanai sebagian, dana akan dikembalikan ke saldo pelanggan. Jika PaymentIntent lain terbuka, Stripe akan mendanainya secara otomatis. Jika pelanggan dikonfigurasikan untuk rekonsiliasi manual, Anda perlu [menerapkan dana](https://docs.stripe.com/api/payment_intents/apply_customer_balance.md) lagi. Kami merekomendasikan [penggunaan webhook](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks) untuk mengonfirmasikan bahwa charge telah berhasil dan memberi tahu pelanggan bahwa pembayaran telah selesai. ### Kode sampel #### Ruby ```ruby require 'json' # Using Sinatra post '/webhook' do payload = request.body.read event = nil begin event = Stripe::Event.construct_from( JSON.parse(payload, symbolize_names: true) ) rescue JSON::ParserError => e # Invalid payload status 400 return end # Handle the event case event.type when 'payment_intent.requires_action' payment_intent = event.data.object # contains a Stripe::PaymentIntent # The payment intent was not fully funded due to insufficient funds # on the customer balance. Define and call a method to handle the payment intent. # handle_payment_intent_requires_action(payment_intent) when 'payment_intent.partially_funded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the payment intent being partially funded. # handle_payment_intent_partially_funded(payment_intent) when 'payment_intent.succeeded' payment_intent = event.data.object # contains a Stripe::PaymentIntent # Then define and call a method to handle the successful payment intent. # handle_payment_intent_succeeded(payment_intent) else puts "Unhandled event type: #{event.type}" end status 200 end ``` ### Lihat pembayaran yang menunggu di Dashboard Anda dapat melihat semua PaymentIntents transfer bank yang tertunda di [Dashboard](https://dashboard.stripe.com/payments) dengan menerapkan filter **Menunggu pendanaan** ke **Status**. ## Coba integrasi Anda Anda dapat mencoba integrasi dengan menyimulasikan transfer bank yang masuk menggunakan Dashboard atau permintaan HTTP. ### Dengan Dashboard Untuk melakukan simulasi transfer bank menggunakan Dasbor di *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes), buka halaman pelanggan di Dashboard. Di bagian **Metode pembayaran**, klik **Tambah** dan pilih **Dana saldo kas (hanya untuk uji coba)**. ### Dengan Stripe API Anda dapat melakukan panggilan API untuk menyimulasikan transfer bank. #### AS ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d reference=REF-4242 ``` Anda dapat mensimulasikan pembalikan dengan mengawali `referensi` parameter dengan `reversal_` (misalnya, `reversal_123`). #### Inggris ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxxxxxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=gbp \ -d reference=REF-4242 ``` #### UE ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=eur \ -d reference=REF-4242 ``` #### JP ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=10000 \ -d currency=jpy ``` #### MX ```curl curl https://api.stripe.com/v1/test_helpers/customers/cus_xxxx/fund_cash_balance \ -u "<>:" \ -d amount=1000 \ -d currency=mxn \ -d reference=123456 ``` ## Menangani masalah ketersediaan sementara Kode kesalahan berikut mengindikasikan masalah sementara pada ketersediaan metode pembayaran: | Kode | Keterangan | Penanganan | | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `payment_method_rate_limit_exceeded` | Ada terlalu banyak permintaan yang dibuat dalam waktu berdekatan untuk metode pembayaran ini, yang memiliki batas lebih ketat daripada [batas rasio API secara keseluruhan](https://docs.stripe.com/rate-limits.md). | Kesalahan ini dapat bertahan untuk beberapa permintaan API saat banyak pelanggan Anda mencoba menggunakan metode pembayaran yang sama, seperti saat obral yang sedang berlangsung di situs web Anda. Dalam kasus ini, minta pelanggan Anda untuk memilih metode pembayaran lain. | > Jika Anda mengantisipasi penggunaan berat secara umum atau karena kejadian mendatang, hubungi kami segera setelah Anda mengetahuinya. ## Optional: Mengumpulkan opsi metode pembayaran dari pelanggan Anda Jika diperlukan, kumpulkan tipe pendanaan yang dipilih pelanggan pada situs Anda dan konfirmasikan tujuan pembayaran menggunakan metode [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) untuk [Stripe.js](https://docs.stripe.com/js.md). Tampilkan formulir HTML untuk mengumpulkan detail pendanaan transfer bank yang dipilih pelanggan. Gunakan input ini untuk melengkapi `payment_method_options`. Lihat [JS reference docs](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) untuk daftar lengkap paramater `payment_method_options` yang tersedia untuk `confirmCustomerBalancePayment`. Berikut ini contoh penggunaannya: Jika Anda adalah merchant di Irlandia, dan tidak yakin tentang negara tempat pelanggan berada, Anda dapat membuat `PaymentIntent` dengan `payment_method_options[customer_balance][bank_transfer][eu_bank_transfer][country]` yang diatur ke ‘IE’ terlebih dahulu. Kemudian gunakan metode [confirmCustomerBalancePayment](https://docs.stripe.com/js/payment_intents/confirm_customer_balance_payment) untuk memperbarui negara berdasarkan input pengguna. ### Kode sampel ```javascript const {paymentIntent, error} = await stripe.confirmCustomerBalancePayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: { customer_balance: { }, }, payment_method_options: { customer_balance: { funding_type: 'bank_transfer', bank_transfer: { type: 'eu_bank_transfer', eu_bank_transfer: { country: 'FR', } }, }, }, }, { handleActions: false, } ); if (error) { // Inform the customer that there was an error. } else if (paymentIntent.status === 'requires_payment_method') { // If `payment_method_options.funding_type` wasn't set this // is where you would need to handle the insufficient customer // balance state. } else if (paymentIntent.status === 'requires_action') { // If the current customer balance is insufficient to cover // the amount, and you've passed // `payment_method_options.funding_type` for funding the // customer balance, you can display the bank transfer // instructions to your user. if (paymentIntent.next_action.type === 'display_bank_transfer_instructions') { // Bank transfer details can be found under: // paymentIntent.next_action.display_bank_transfer_instructions } } ```