Tangkap dan berikan respons terhadap penolakan, data yang tidak valid, masalah jaringan, dan lainnya.
Stripe menawarkan berbagai jenis kesalahan. Jenis kesalahan tersebut dapat mencerminkan kejadian eksternal, seperti pembayaran yang ditolak dan gangguan jaringan, atau masalah kode, seperti panggilan API yang tidak valid.
Selidiki masalah masa lalu dan dukung teknik lainnya
Terkadang
Tangkap pengecualian
Jika sebuah masalah langsung mencegah panggilan API untuk dilanjutkan, pustaka Ruby Stripe memunculkan sebuah pengecualian. Praktik terbaiknya adalah untuk menangkap dan menangani pengecualian.
Untuk menangkap pengecualian, gunakan kata kunci rescue Ruby. Tangkap Stripe::StripeError atau subkelasnya hanya untuk menangani pengecualian khusus Stripe. Setiap subkelas mewakili jenis pengecualian yang berbeda. Saat menangkap pengecualian, Anda dapat menggunakan kelasnya untuk memilih respons.
defexample_function(params)beginStripe::PaymentIntent.create(params)rescueStripe::CardError=> e
puts "A payment error occurred: #{e.error.message}"rescueStripe::InvalidRequestError=> e
puts "An invalid request occurred."rescueStripe::StripeError=> e
puts "Another problem occurred, maybe unrelated to Stripe."else
puts "No error."endend
Setelah menyiapkan penanganan pengecualian, coba pada berbagai data, termasuk kartu percobaan, untuk menyimulasikan hasil pembayaran yang berbeda.
Stripe memberi tahu Anda tentang berbagai macam masalah menggunakan webhook. Ini termasuk masalah yang tidak langsung muncul setelah panggilan API. Sebagai contoh:
Anda kalah dalam sengketa.
Pembayaran rutin gagal setelah berbulan-bulan keberhasilan.
Frontend Anda mengkonfirmasi pembayaran, tetapi menjadi offline sebelum mengetahui bahwa pembayaran gagal. (Backend masih menerima notifikasi webhook, meskipun bukan yang melakukan panggilan API
Anda tidak perlu menangani setiap tipe event webhook. Bahkan, beberapa integrasi tidak menangani satu pun.
Di handler webhook Anda, mulai dengan langkah-langkah dasar dari pembuat webhook: dapatkan objek kejadian dan gunakan tipe kejadian untuk mengetahui apa yang terjadi. Kemudian, jika tipe kejadian merupakan indikasi kesalahan, ikuti langkah-langkah ekstra berikut:
require'stripe'require'sinatra'
post '/webhook'do
payload = request.body.read
data =JSON.parse(payload, symbolize_names:true)# Get the event object
event =Stripe::Event.construct_from(data)# Use the event type to find out what happenedcase event.type
when'payment_intent.payment_failed'# Get the object affected
payment_intent = event.data.object
# Use stored information to get an error object
e = payment_intent.last_payment_error
# Use its type to choose a responsecase e.type
when'card_error'
puts "A payment error occurred: #{e.message}"when'invalid_request'
puts "An invalid request occurred."else
puts "Another problem occurred, maybe unrelated to Stripe."endend
content_type 'application/json'{
status:'success'}.to_json
end
Untuk mencoba cara integrasi Anda menanggapi kejadian webhook, Anda dapat memicu kejadian webhook secara lokal. Setelah menyelesaikan langkah-langkah penyiapan di tautan itu, picu pembayaran yang gagal untuk melihat pesan kesalahan yang dihasilkan.
Command Line
stripe trigger payment_intent.payment_failed
Output
A payment error occurred: Your card was declined.
Dapatkan informasi tersimpan tentang kegagalan
Banyak objek menyimpan informasi tentang kegagalan. Artinya, jika terjadi kesalahan, Anda dapat mengambil objek dan memeriksanya untuk mempelajari lebih lanjut. Dalam banyak kasus, informasi yang disimpan dalam bentuk objek kesalahan, dan Anda dapat menggunakan tipenya untuk memilih respons.
Misalnya:
Ambil tujuan pembayaran tertentu.
Periksa apakah telah mengalami kesalahan pembayaran dengan menentukan apakah last_payment_error kosong.
Jika demikian, catat kesalahannya, termasuk tipenya dan objek yang terpengaruh.
Untuk mencoba kode yang menggunakan informasi tersimpan tentang kegagalan, sering kali Anda perlu menyimulasikan transaksi yang gagal. Anda dapat sering melakukannya menggunakan kartu percobaan atau nomor bank percobaan. Misalnya:
Di pustaka Ruby Stripe, objek kesalahan dimiliki oleh stripe.error.StripeError dan subkelasnya. Gunakan dokumentasi bagi setiap kelas untuk saran dalam merespons.
Anda menggunakan verifikasi tanda tanganwebhook dan tidak dapat memverifikasi apakah kejadian webhook bersifat autentik.
Kesalahan pembayaran
Kesalahan pembayaran—terkadang disebut sebagai “kesalahan kartu” karena alasan historis—mencakup beragam masalah umum. Kesalahan itu terbagi dalam tiga kategori:
Sistem pencegahan penipuan Stripe, Radar, memblokir pembayaran
Solusi
Kesalahan ini dapat terjadi bila integrasi Anda berfungsi dengan benar. Tangkap kesalahan dan minta agar pelanggan menggunakan metode pembayaran berbeda.
Untuk meminimalkan pemblokiran pembayaran yang sah, cobalah ini:
Kesalahan ini dapat terjadi jika integrasi Anda berfungsi dengan benar. Ini mencerminkan suatu tindakan oleh penerbit, dan tindakan itu mungkin sah. Gunakan kode penolakan untuk menentukan langkah selanjutnya yang sesuai. Lihat dokumentasi tentang kode penolakan untuk respons yang sesuai untuk setiap kode.
Kesalahan ini dapat terjadi bila integrasi Anda berjalan dengan benar. Gunakan kode kesalahan untuk menentukan langkah berikutnya yang sesuai. Lihat dokumentasi tentang kode kesalahan untuk respons yang sesuai terhadap setiap kode.
Kesalahan permintaan tidak valid
Tipe
Stripe::InvalidRequestError
Masalah
Anda melakukan panggilan API dengan parameter yang salah, dalam status yang salah, atau dengan cara yang tidak valid.
Solusi
Dalam sebagian besar kasus, masalahnya ada pada permintaannya itu sendiri. Parameternya tidak valid atau tidak dapat dijalankan dalam status integrasi Anda saat ini.
Demi kenyamanan, Anda dapat mengikuti tautan di untuk dokumentasi tentang kode kesalahan.
Jika kesalahan melibatkan parameter tertentu, gunakan untuk menentukan yang mana.
Kesalahan koneksi
Tipe
Stripe::APIConnectionError
Masalah
Ada masalah jaringan antara server Anda dan Stripe.
Solusi
Perlakukan hasil panggilan API sebagai tidak tentu. Artinya, jangan menganggapnya berhasil atau gagal.
Untuk mengetahui apakah berhasil, Anda dapat:
Ambil objek yang relevan dari Stripe dan periksa statusnya.
Dengarkan notifikasi webhook apakah operasi telah berhasil atau gagal.
Untuk mempermudah pemulihan dari kesalahan koneksi, Anda dapat:
Saat membuat atau memperbarui objek, gunakan kunci idempotensi. Kemudian, jika terjadi kesalahan koneksi, Anda dapat mengulangi permintaan dengan aman tanpa risiko membuat objek kedua atau melakukan pembaruan dua kali. Ulangi permintaan dengan kunci idempotensi yang sama sampai Anda menerima keberhasilan atau kegagalan yang jelas. Untuk saran lanjutan tentang strategi ini, lihat Penanganan kesalahan tingkat rendah.
Aktifkan percobaan ulang otomatis. Kemudian, Stripe membuat kunci idempotensi serta mengulangi permintaan untuk Anda bila aman untuk melakukannya.
Kesalahan ini dapat menutupi yang lainnya. Bisa jadi bila kesalahan koneksi teratasi, beberapa kesalahan lain menjadi tampak. Periksa kesalahan dalam semua solusi ini sebagaimana yang Anda lakukan di permintaan semula.
Kesalahan API
Tipe
Stripe::APIError
Masalah
Terjadi kesalahan di pihak Stripe. (Hal ini jarang terjadi.)
Solusi
Perlakukan hasil panggilan API sebagai tidak tentu. Artinya, jangan beranggapan apakah telah berhasil atau gagal.
Andalkan webhook untuk informasi tentang hasilnya. Bila memungkinkan, Stripe mengaktifkan webhook untuk objek baru yang kami buat ketika memecahkan masalah.
Anda menggunakan kunci idempotensi untuk suatu hal yang tak terduga, seperti memutar ulang permintaan tetapi meneruskan parameter yang berbeda.
Solusi
Setelah Anda menggunakan kunci idempotensi, hanya gunakan kembali untuk panggilan API yang sama persis.
Gunakan kunci idempotensi di bawah batas 255 karakter.
Kesalahan izin
Tipe
Stripe::PermissionError
Masalah
Kunci API yang digunakan untuk permintaan ini tidak memiliki izin yang diperlukan.
Solusi
Apakah Anda menggunakan kunci API yang dibatasi untuk layanan yang aksesnya tidak dimilikinya?
Are you performing an action in the Dashboard while logged in as a user role that lacks permission?
Kesalahan batas tingkat
Tipe
Stripe::RateLimitError
Masalah
Anda melakukan panggilan API terlalu banyak dalam waktu terlalu singkat.
Solusi
Jika satu panggilan API memicu kesalahan ini, tunggu dan coba lagi.
Untuk menangani pembatasan rasio secara otomatis, coba ulang panggilan API setelah penundaan, dan tingkatkan penundaan secara eksponensial jika kesalahan berlanjut. Lihat dokumentasi tentang batas rasio untuk saran lebih lanjut.
Jika Anda mengantisipasi peningkatan lalu lintas yang besar dan ingin meminta peningkatan batas tingkat, hubungi Tim CS terlebih dahulu.
Kesalahan verifikasi tanda tangan
Tipe
Stripe::SignatureVerificationError
Masalah
Anda menggunakan verifikasi tanda tanganwebhook dan tidak dapat memverifikasi apakah kejadian webhook bersifat autentik.
Solusi
Kesalahan ini dapat terjadi bila integrasi Anda berfungsi dengan benar. Jika Anda menggunakan verifikasi tanda tangan webhook dan pihak ketiga mencoba mengirimi Anda webhook palsu atau jahat, maka verifikasi akan gagal dan menghasilkan kesalahan ini. Tangkap dan respons dengan kode status 400 Bad Request.
Jika Anda menerima kesalahan ini, padahal seharusnya tidak—misalnya, dengan webhook yang Anda ketahui berasal dari Stripe—maka lihat dokumentasi di memeriksa tanda tangan webhook untuk saran lebih lanjut. Secara khusus, pastikan Anda menggunakan rahasia endpoint yang benar. Hal ini berbeda dengan kunci API Anda.
Welcome to the Stripe Shell!
Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your
Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe
resources in test mode.
- View supported Stripe commands:
- Find webhook events:
- Listen for webhook events:
- Call Stripe APIs: stripe [api resource] [operation] (e.g., )