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 masalah nyata mencegah kelanjutan panggilan API, pustaka Stripe Node.js dapat memunculkan pengecualian. Merupakan praktik terbaik untuk menangkap dan menangani pengecualian. Untuk mengaktifkan peningkatan pengecualian dan menangkap pengecualian, lakukan hal berikut: menaikkan dan menangkap pengecualian, Anda perlu melakukan beberapa hal:
Jika Anda membuat panggilan API dalam sebuah fungsi, awali definisi fungsi dengan kata kunci async.
Awali panggilan API itu sendiri dengan kata kunci await.
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:
);const express =require('express');const app =express();
app.post('/webhook', express.json({type:'application/json'}),(request, response)=>{// Get an event objectconst event = request.body;// Use its type to find out what happenedif(event.type=='payment_intent.payment_failed'){// Get the object affectedconst paymentIntent = event.data.object;// Use stored information to get an error objectconst error = paymentIntent.error;// Use its type to choose a responseswitch(error.type){case'StripeCardError':
console.log(`A payment error occurred: ${error.message}`);break;case'StripeInvalidRequestError':
console.log('An invalid request occurred.');if(error.param){
console.log(`The parameter ${error.param} is invalid or missing.`);}break;default:
console.log('Another problem occurred, maybe unrelated to Stripe.');break;}}
response.send();});
app.listen(4242,()=> console.log('Running on port 4242'));
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:
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
StripeInvalidRequestError
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 e.doc_url untuk dokumentasi tentang kode kesalahan.
Jika kesalahan melibatkan parameter tertentu, gunakan e.param untuk menentukan yang mana.
Kesalahan koneksi
Tipe
StripeAPIConnectionError
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
StripeAPIError
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
StripePermissionError
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
StripeRateLimitError
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
StripeSignatureVerificationError
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., )