Penanganan kesalahan
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.
Untuk menangani kesalahan, gunakan beberapa atau semua teknik dalam tabel di bawah ini. Apa pun teknik yang digunakan, Anda dapat menindaklanjutinya dengan respons yang direkomendasikan untuk setiap tipe kesalahan kami.
Teknik | Tujuan | Bila dibutuhkan |
---|---|---|
Tangkap pengecualian | Memulihkan ketika panggilan API tidak dapat dilanjutkan | Selalu |
Pantau webhook | Bereaksi terhadap notifikasi dari Stripe | Terkadang |
Dapatkan informasi tersimpan tentang kegagalan | Selidiki masalah masa lalu dan dukung teknik lainnya | Terkadang |
Tangkap pengecualian
Jika masalah nyata mencegah berlanjutnya panggilan API, pustaka Node.js Stripe dapat memunculkan pengecualian. Ini merupakan praktik terbaik guna menangkap dan menangani pengecualian. Untuk mengaktifkan munculnya pengecualian serta menangkap pengecualian, lakukan hal berikut:
- Jika Anda membuat panggilan API dalam sebuah fungsi, awali definisi fungsi dengan kata kunci
async
. - Awali panggilan API itu sendiri dengan kata kunci
await
. - Bungkus panggilan API dalam blok
try
/catch
.
Saat menangkap pengecualian, Anda dapat menggunakan atribut tipenya untuk memilih respons.
Setelah menyiapkan penanganan pengecualian, coba pada berbagai data, termasuk kartu percobaan, untuk menyimulasikan hasil pembayaran yang berbeda.
Pantau webhook
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:
- Akses event.data.object untuk mengambil objek yang terpengaruh.
- Gunakan informasi tersimpan pada objek yang terpengaruh untuk mendapatkan konteks, termasuk objek kesalahan.
- Gunakan tipenya untuk memilih respons.
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.
stripe trigger payment_intent.payment_failed
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.
Berikut adalah objek umum yang menyimpan informasi tentang kegagalan.
Objek | Atribut | Nilai |
---|---|---|
Payment Intent | last_ | Objek kesalahan |
Setup Intent | last_ | Objek kesalahan |
Invoice | last_ | Objek kesalahan |
Upaya Penyiapan | setup_ | Objek kesalahan |
Payout | failure_ | Kode kegagalan payout |
Pengembalian dana | failure_ | Kode kegagalan pengembalian dana |
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:
- Simulasikan pembayaran yang ditolak, untuk membuat Charges, PaymentIntents, SetupIntents, dan sebagainya yang telah gagal.
- Simulasikan payout yang gagal.
- Simulasikan pengembalian dana yang gagal.
Tipe kesalahan dan respons
Di pustaka Stripe Node.js, setiap objek kesalahan memiliki atribut type
. Gunakan dokumentasi untuk setiap jenis saran tentang cara merespons.
Nama | Tipe | Keterangan |
---|---|---|
Kesalahan pembayaran | Terjadi kesalahan selama pembayaran, yang melibatkan salah satu situasi berikut: | |
Kesalahan permintaan tidak valid | Anda melakukan panggilan API dengan parameter yang salah, dalam status yang salah, atau dengan cara yang tidak valid. | |
Kesalahan koneksi | Ada masalah jaringan antara server Anda dan Stripe. | |
Kesalahan API | Terjadi kesalahan di pihak Stripe. (Hal ini jarang terjadi.) | |
Kesalahan autentikasi | Stripe tidak dapat mengautentikasi Anda dengan informasi yang diberikan. | |
Kesalahan idempotensi | Anda menggunakan kunci idempotensi untuk suatu hal yang tak terduga, seperti memutar ulang permintaan, tetapi meneruskan parameter yang berbeda. | |
Kesalahan izin | Kunci API yang digunakan untuk permintaan ini tidak memiliki izin yang diperlukan. | |
Kesalahan batas tingkat | Anda melakukan panggilan API terlalu banyak dalam waktu terlalu singkat. | |
Kesalahan verifikasi tanda tangan | Anda menggunakan verifikasi tanda tangan webhook dan tidak dapat memverifikasi jika 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:
- Pembayaran yang diblokir karena dugaan penipuan
- Pembayaran yang ditolak oleh penerbit
- Kesalahan pembayaran lainnya
Untuk membedakan kategori ini atau mendapatkan informasi selengkapnya tentang cara merespons, periksa kode kesalahan, kode penolakan, dan hasil charge.
(Untuk menemukan hasil charge dari objek kesalahan, dapatkan terlebih dahulu Payment Intent yang terlibat dan Charge terbaru yang dibuatnya. Lihat contoh di bawah untuk demonstrasi.)
Pengguna pada versi API 2022-08-01 atau lebih lama:
(Untuk menemukan hasil charge dari objek kesalahan, dapatkan terlebih dahulu Payment Intent yang terlibat dan Charge terbaru yang dibuatnya. Lihat contoh di bawah untuk demonstrasi.)
Anda dapat memicu beberapa jenis kesalahan pembayaran yang umum dengan kartu percobaan. Lihat daftar ini untuk mengetahui opsinya:
- Menyimulasikan pembayaran yang diblokir karena risiko penipuan
- Menyimulasikan pembayaran yang ditolak dan kesalahan kartu lainnya
Kode percobaan di bawah ini memperagakan beberapa kemungkinan.
Pembayaran yang diblokir karena dugaan penipuan
Tipe |
|
Kode |
|
Kode |
|
Masalah | 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:
Pelanggan Radar for Fraud Teams memiliki opsi tambahan berikut:
Anda dapat mencoba pengaturan integrasi dengan kartu percobaan yang menyimulasikan penipuan. Jika Anda memiliki aturan Radar custom, ikuti saran percobaan dalam dokumentasi Radar. |
Pembayaran yang ditolak oleh penerbit
Tipe |
|
Kode |
|
Masalah | Penerbit kartu menolak pembayaran. |
Solusi | Kesalahan ini dapat terjadi bila integrasi Anda berfungsi dengan benar. Ini mencerminkan suatu tindakan oleh penerbit, dan tindakan itu mungkin sah. Gunakan kode penolakan untuk menentukan langkah berikutnya yang sesuai. Lihat dokumentasi tentang kode penolakan untuk respons yang sesuai terhadap setiap kode. Anda juga dapat:
Coba cara integrasi Anda menangani penolakan dengan kartu percobaan yang menyimulasikan pembayaran yang berhasil dan ditolak. |
Kesalahan pembayaran lainnya
Tipe |
|
Masalah | Terjadi kesalahan pembayaran lain. |
Solusi | Kesalahan ini dapat terjadi bila integrasi Anda berfungsi dengan benar. Gunakan kode kesalahan untuk menentukan langkah selanjutnya yang sesuai. Lihat dokumentasi tentang kode kesalahan untuk respons yang sesuai terhadap setiap kode. |
Kesalahan permintaan tidak valid
Tipe |
|
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.
|
Kesalahan koneksi
Tipe |
|
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:
Untuk membantu memulihkan dari kesalahan koneksi, Anda dapat:
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 |
|
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. Untuk menyiapkan integrasi Anda demi ketahanan maksimum dalam situasi yang tidak biasa, lihat diskusi lanjutan tentang kesalahan server ini. |
Kesalahan autentikasi
Tipe |
|
Masalah | Stripe tidak dapat mengautentikasi Anda dengan informasi yang diberikan. |
Solusi |
|
Kesalahan idempotensi
Tipe |
|
Masalah | Anda menggunakan kunci idempotensi untuk suatu hal yang tak terduga, seperti memutar ulang permintaan, tetapi meneruskan parameter yang berbeda. |
Solusi |
|
Kesalahan izin
Tipe |
|
Masalah | Kunci API yang digunakan untuk permintaan ini tidak memiliki izin yang diperlukan. |
Solusi |
|
Kesalahan batas tingkat
Tipe |
|
Masalah | Anda melakukan panggilan API terlalu banyak dalam waktu terlalu singkat. |
Solusi |
|
Kesalahan verifikasi tanda tangan
Tipe |
|
Masalah | Anda menggunakan verifikasi tanda tangan webhook dan tidak dapat memverifikasi jika 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 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. Ini berbeda dengan kunci API Anda. |