Migrasikan integrasi kartu dasar Anda
Jika Anda mengikuti panduan Pembayaran kartu tanpa autentikasi bank, integrasi Anda melakukan pembayaran yang ditolak bila bank meminta pelanggan mengautentikasi pembelian.
Jika Anda mulai melihat banyak pembayaran yang gagal seperti yang ada di Dashboard di bawah atau dengan kode kesalahan requires_action_not_handled
di API, upgrade versi integrasi dasar Anda untuk menangani, bukan menolak, pembayaran ini.
Gunakan panduan ini untuk mempelajari cara memutakhirkan integrasi yang Anda buat di panduan sebelumnya untuk menambahkan kode server dan klien yang meminta pelanggan mengautentikasi pembayaran dengan menampilkan modal.
Catatan
Lihat contoh lengkap dari integrasi ini di GitHub.
Periksa apakah pembayaran memerlukan autentikasiSisi server
Buat dua perubahan pada endpoint di server Anda yang membuat PaymentIntent:
- Hapus parameter error_on_requires_action agar pembayaran yang memerlukan autentikasi tidak lagi gagal. Sebagai gantinya, status PaymentIntent berubah menjadi
requires_action
. - Tambahkan parameter
confirmation_method
untuk menunjukkan bahwa Anda ingin secara eksplisit (manual) mengonfirmasi pembayaran lagi di server setelah menangani permintaan autentikasi.
Kemudian perbarui fungsi “hasilkan respons” Anda untuk menangani status requires_action
sebagai ganti memunculkan kesalahan:
Minta pelanggan untuk mengautentikasiSisi client
Selanjutnya, perbarui kode sisi klien Anda untuk memberi tahu Stripe agar menampilkan modal jika pelanggan perlu mengautentikasi.
Gunakan stripe.handleCardAction bila PaymentIntent berstatus requires_action
. Jika berhasil, PaymentIntent akan memiliki status requires_confirmation
dan Anda perlu mengonfirmasi PaymentIntent lagi di server Anda untuk menyelesaikan pembayaran.
const handleServerResponse = async (responseJson) => { if (responseJson.error) { // Show error from server on payment form } else if (responseJson.requiresAction) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(responseJson.clientSecret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }
Konfirmasikan lagi PaymentIntentSisi server
Dengan menggunakan endpoint sama yang Anda siapkan sebelumnya, konfirmasikan PaymentIntent lagi untuk memfinalisasi pembayaran dan memenuhi pesanan. Upaya pembayaran gagal dan berubah kembali menjadi requires_payment_method
jika tidak dikonfirmasi lagi dalam waktu satu jam.
Coba integrasi
Gunakan kartu percobaan kami dalam mode percobaan untuk memverifikasi bahwa integrasi Anda telah diperbarui dengan benar. Stripe menampilkan halaman autentikasi palsu di dalam modal dalam mode percobaan yang memungkinkan Anda menyimulasikan upaya autentikasi yang berhasil atau gagal. Dalam mode live, bank mengontrol UI dari hal yang ditampilkan di dalam modal.
Nomor | Keterangan |
---|---|
Berhasil dan segera memproses pembayaran. | |
Selalu gagal dengan kode tolakan insufficient_funds . | |
Perlu autentikasi, yang di integrasi ini akan digagalkan dengan kode penolakan authentication_not_handled . |