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 pembangun webhook: dapatkan objek kejadian dan gunakan tipe kejadian untuk mengetahui apa yang terjadi. Kemudian, jika tipe kejadian mengindikasikan kesalahan, ikuti langkah-langkah ekstra ini:
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 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.
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:
This error can occur when your integration is working correctly. It reflects an action by the issuer, and that action may be legitimate. Use the decline code to determine what next steps are appropriate. See the documentation on decline codes for appropriate responses to each code.
This error can occur when your integration is working correctly. Use the error code to determine what next steps are appropriate. See the documentation on error codes for appropriate responses to each code.
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:
When creating or updating an object, use an idempotency key. Then, if a connection error occurs, you can safely repeat the request without risk of creating a second object or performing the update twice. Repeat the request with the same idempotency key until you receive a clear success or failure. For advanced advice on this strategy, see Low-level error handling.
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.
You used an idempotency key for something unexpected, like replaying a request but passing different parameters.
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
Are you using a restricted API key for a service it doesn’t have access to?
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.
To handle rate-limiting automatically, retry the API call after a delay, and increase the delay exponentially if the error continues. See the documentation on rate limits for further advice.
Jika Anda mengantisipasi peningkatan lalu lintas yang besar dan ingin meminta peningkatan batas tingkat, hubungi Tim CS terlebih dahulu.
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.
If you receive this error when you shouldn’t—for instance, with webhooks that you know originate with Stripe—then see the documentation on checking webhook signatures for further advice. In particular, make sure you’re using the correct endpoint secret. This is different from your API key.