Lewati ke konten
Buat akun
atau
Masuk
Logo Dokumen Stripe
/
Tanya AI
Buat akun
Masuk
Mulai
Pembayaran
Revenue
Platform dan situs belanja online
Manajemen uang
Alat bantu pengembang
Gambaran Umum
Tentang pembayaran Stripe
Upgrade integrasi Anda
Analitik pembayaran
Pembayaran online
Gambaran umumTemukan contoh penggunaan AndaPembayaran Terkelola
Gunakan Payment Links
Buat halaman checkout
Bangun integrasi lanjutan
Bangun integrasi dalam aplikasi
Metode Pembayaran
Tambahkan metode pembayaran
    Gambaran umum
    Opsi integrasi metode pembayaran
    Kelola metode pembayaran default di Dashboard
    Tipe metode pembayaran
    Kartu
    Bayar dengan saldo Stripe
    Debit bank
    Halaman pembayaran bank
    Transfer bank
      Terima pembayaran
      Saldo pelanggan
      Pengembalian dana
    Transfer kredit (Sumber)
    Beli sekarang, bayar nanti
    Pembayaran real-time
    Voucher
    Dompet
    Aktifkan metode pembayaran lokal menurut negara
    Metode pembayaran custom
Kelola metode pembayaran
Checkout lebih cepat dengan Link
Antarmuka pembayaran
Payment Links
Checkout
Web Elements
Elements dalam aplikasi
Skenario pembayaran
Alur pembayaran custom
Akuisisi fleksibel
Orkestrasi
Pembayaran di tempat
Terminal
Produk Stripe lainnya
Financial Connections
Kripto
Climate
BerandaPembayaranAdd payment methodsBank transfers

Terima transfer bank

Gunakan Payment Intents API untuk menerima pembayaran transfer bank.

Salin halaman

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:

Menangani kurang bayar dan lebih bayar

Dengan pembayaran transfer bank, dimungkinkan pelanggan mengirimi Anda lebih atau kurang dari jumlah pembayaran yang diharapkan. Jika pelanggan mengirim terlalu sedikit, Stripe mendanai sebagian tujuan pembayaran terbuka. Invoice tidak akan didanai sebagian dan tetap terbuka sampai dana yang masuk menutupi jumlah invoice penuh.

Jika pelanggan mengirim lebih dari jumlah yang diharapkan, Stripe mencoba merekonsiliasi dana yang masuk dengan pembayaran terbuka serta menyimpan sisa jumlah kelebihannya di saldo kas pelanggan. Anda dapat menemukan detail selengkapnya tentang cara Stripe menangani rekonsiliasi di bagian rekonsiliasi dari dokumentasi kami.

Ketika pelanggan membayar kurang:

Ketika pelanggan membayar lebih:

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 transfer bank dengan menggunakan informasi seperti kode referensi transfer atau jumlah yang ditransfer.

Anda dapat menonaktifkan rekonsiliasi otomatis serta secara manual merekonsiliasi pembayaran dan invoice sendiri. Anda dapat mengesampingkan perilaku rekonsiliasi otomatis per pelanggan dengan mengatur mode rekonsiliasi ke manual.

Siapkan Stripe
Sisi server

Pertama, Anda membutuhkan akun Stripe. Daftar sekarang.

Gunakan pustaka resmi kami untuk mendapatkan akses ke API Stripe dari aplikasi Anda:

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
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 untuk merekonsiliasi setiap pembayaran transfer bank. Jika sudah memiliki objek Pelanggan, Anda dapat melewati langkah ini. Jika tidak, buat objek Pelanggan baru.

Command Line
cURL
curl -X POST https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"

Buat PaymentIntent
Sisi server

PaymentIntent 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 dari permintaan pembuatan PaymentIntent. Transfer bank tidak tersedia di PaymentIntents tanpa pelanggan.

Sebelum membuat Payment Intent, pastikan untuk mengaktifkan Transfer bank di halaman pengaturan metode pembayaran Dashboard Anda.

Catatan

Dengan Metode pembayaran dinamis, Stripe menangani pengembalian metode pembayaran yang memenuhi syarat berdasarkan faktor-faktor, seperti jumlah transaksi, mata uang, dan alur pembayaran.

Command Line
cURL
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d customer=
{{CUSTOMER_ID}}
\ -d currency=usd \ -d "automatic_payment_methods[enabled]"=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.

Kumpulkan detail pembayaran
Sisi client

Kumpulkan detail pembayaran pada client dengan Payment Element. 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.

Alamat halaman checkout harus dimulai dengan https:// bukan http:// agar integrasi Anda berfungsi. Anda dapat mencoba integrasi tanpa menggunakan HTTPS, tapi ingatlah untuk mengaktifkannya bila sudah siap menerima pembayaran live.

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.

checkout.html
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>

Buat instance Stripe dengan JavaScript berikut di halaman checkout Anda:

checkout.js
// 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(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
);

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:

checkout.html
<form id="payment-form"> <div id="payment-element"> <!-- Elements will create form elements here --> </div> <button id="submit">Submit</button> <div id="error-message"> <!-- Display error message to your customers here --> </div> </form>

Saat formulir sebelumnya dimuat, buat instance Payment Element dan pasang ke simpul DOM penampung. Teruskan client secret dari langkah sebelumnya ke options saat Anda membuat instance Elements:

Tangani client secret dengan hati-hati karena dapat menyelesaikan charge. Jangan mencatatnya, menyematkannya di URL, atau memaparkannya kepada siapa pun kecuali pelanggan.

checkout.js
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 step const elements = stripe.elements(options); // Create and mount the Payment Element const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element');

Jelajahi Stripe Elements

Stripe Elements adalah kumpulan komponen UI drop-in. Untuk menyesuaikan formulir Anda lebih lanjut atau mengumpulkan informasi pelanggan yang berbeda, telusuri dokumen Elements.

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 ke dalam options ketika membuat penyedia Elements.

Kumpulkan alamat

Secara default, Payment Element hanya mengumpulkan detail alamat tagihan yang diperlukan. Untuk mengumpulkan alamat tagihan lengkap pelanggan (misalnya, untuk menghitung pajak barang dan layanan digital) atau alamat pengiriman, gunakan Address Element.

Setelah konfirmasi, Stripe secara otomatis membuka modal untuk menampilkan detail transfer bank kepada pelanggan Anda.

Serahkan pembayaran ke Stripe
Sisi client

Gunakan stripe.confirmPayment untuk menyelesaikan pembayaran menggunakan detail dari Payment Element. Berikan 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 ke if_required. Ini hanya mengalihkan pelanggan yang memproses pembayaran dengan metode pembayaran berbasis pengalihan.

checkout.js
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`. } });

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:

ParameterKeterangan
payment_intentIdentifier unik untuk PaymentIntent.
payment_intent_client_secretclient secret dari objek PaymentIntent.

Peringatan

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

status.js
// Initialize Stripe.js using your publishable key const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); // 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; } });

OpsionalKirim email instruksi pembayaran

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 Anda perlu disiapkan untuk mulai menerima kejadian payment_intent.partially_funded. Saat PaymentIntent didanai sebagian, statusnya tetap dalam status requires_action.

Anda dapat menambahkan webhook dari Dashboard.

Atau, Anda dapat menggunakan Webhook Endpoints API untuk mulai menerima kejadian payment_intent.partially_funded.

Peringatan

Stripe CLI tidak mendukung pemicuan kejadian versi API beta, seperti payment_intent.partially_funded.

Kejadian berikut dikirim selama alur pendanaan pembayaran bila PaymentIntent diperbarui.

KejadianKeteranganLangkah berikutnya
payment_intent.requires_actionDikirim 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_fundedPelanggan mengirim transfer bank yang diterapkan pada PaymentIntent, tetapi tidak cukup untuk menyelesaikan pembayaran. Hal ini dapat terjadi karena pelanggan mentransfer jumlah yang tidak mencukupi (karena kesalahan kurang bayar atau biaya yang di-charge oleh bank mereka) atau karena saldo pelanggan yang tersisa telah diterapkan pada PaymentIntent ini. PaymentIntents yang didanai sebagian tidak tercermin di saldo akun 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 PaymentIntent lagi.
payment_intent.succeededPembayaran pelanggan berhasil.Penuhi barang atau layanan yang dibeli oleh pelanggan.

Peringatan

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 lagi.

Kami merekomendasikan penggunaan webhook untuk mengonfirmasikan bahwa charge telah berhasil dan memberi tahu pelanggan bahwa pembayaran telah selesai.

Kode sampel

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)

Lihat pembayaran yang menunggu di Dashboard

Anda dapat melihat semua PaymentIntents transfer bank yang tertunda di Dashboard 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.

Untuk menyimulasikan transfer bank menggunakan Dashboard di sandbox, buka halaman pelanggan di Dashboard. Pada Metode pembayaran, klik Tambahkan dan pilih Danai saldo kas (hanya percobaan).

Menangani masalah ketersediaan sementara

Kode kesalahan berikut mengindikasikan masalah sementara pada ketersediaan metode pembayaran:

KodeKeteranganPenanganan
payment_method_rate_limit_exceededAda terlalu banyak permintaan yang dibuat dalam waktu berdekatan untuk metode pembayaran ini, yang memiliki batas lebih ketat daripada batas rasio API secara keseluruhan.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.

Peringatan

Jika Anda mengantisipasi penggunaan berat secara umum atau karena kejadian mendatang, hubungi kami segera setelah Anda mengetahuinya.

Apakah halaman ini membantu?
YaTidak
Butuh bantuan? Hubungi Tim CS.
Bergabunglah dengan program akses awal kami.
Lihat log perubahan kami.
Ada pertanyaan? Hubungi Bagian Penjualan.
LLM? Baca llms.txt.
Dijalankan oleh Markdoc