Langsung ke konten utama
Ketika pembayaran gagal, Dodo Payments memberi tahu Anda mengapa melalui error_code yang terstandarisasi dan error_message yang dapat dibaca manusia. Panduan ini menjelaskan cara membaca kolom tersebut, menentukan apakah percobaan ulang layak dilakukan, dan memulihkan pembayaran tanpa mengekspos informasi sensitif kepada pelanggan.

Bagaimana Dodo Payments Melaporkan Kegagalan

Setiap pembayaran yang gagal — baik checkout satu kali maupun perpanjangan langganan — memiliki kolom kegagalan yang sama pada objek pembayaran:
error_code dan error_message adalah null sampai pembayaran benar-benar gagal. Selalu periksa status terlebih dahulu, lalu baca kolom error.

Webhook payment.failed

Cara paling andal untuk mendeteksi kegagalan adalah webhook payment.failed. Event tersebut membungkus seluruh objek pembayaran dalam data:
payment.failed payload
Handler minimal membaca error_code dan melakukan routing berdasarkan nilainya:
Selalu verifikasi tanda tangan webhook sebelum memprosesnya. Lihat panduan Webhook untuk penyiapan lengkap, termasuk verifikasi tanda tangan dan idempotensi.

Tentukan Apakah Perlu Mencoba Lagi: Penolakan Lunak vs. Keras

error_code memberi tahu Anda apakah mencoba lagi dengan metode pembayaran yang sama layak dilakukan. Referensi Kegagalan Transaksi mencantumkan jenis penolakan dan tindakan yang disarankan untuk setiap error_code.

Menangani Kegagalan saat Checkout vs. Perpanjangan

Cara pemulihan bergantung pada apakah pelanggan sedang hadir.
Pelanggan sedang aktif melakukan checkout. Tampilkan pesan yang jelas dan biarkan mereka mencoba lagi segera atau menggunakan kartu lain.
  • requires_payment_method — pelanggan tidak pernah memberikan metode pembayaran: mereka tidak memasukkan detail kartu, atau diminta memberikan metode pembayaran tetapi tidak melakukan tindakan apa pun. Ini biasanya merupakan drop-off saat checkout, bukan penolakan — hubungi kembali pelanggan untuk menyelesaikan pembayaran (lihat Pemulihan Keranjang yang Ditinggalkan).
  • requires_customer_action — autentikasi tambahan (seperti 3DS) diperlukan; minta pelanggan menyelesaikannya. Lihat Penanganan 3D Secure.

Mencoba Lagi Pembayaran yang Gagal

  • Langganan: Aktifkan Percobaan Ulang Pembayaran Langganan untuk memulihkan penolakan lunak tanpa pekerjaan integrasi. Anda juga dapat memicu pemulihan dengan meminta pelanggan memperbarui metode pembayaran mereka melalui API Pembaruan Metode Pembayaran, yang akan menagih tunggakan apa pun.
  • Pembayaran satu kali: Kirim ulang checkout atau payment_link agar pelanggan dapat mencoba lagi dengan metode lain. Tidak ada percobaan ulang otomatis untuk pembayaran satu kali.
Jangan mencoba lagi penolakan keras dengan kartu yang sama. Jaringan kartu dapat menandai penolakan berulang sebagai tindakan penyalahgunaan, yang menurunkan tingkat otorisasi Anda.

Tampilkan Error kepada Pelanggan dengan Aman

Tampilkan pesan yang ramah kepada pelanggan — jangan pernah menampilkan error_code mentah.
Customer-facing messaging
Jangan pernah mengungkapkan alasan sebenarnya untuk STOLEN_CARD, LOST_CARD, PICKUP_CARD, atau FRAUDULENT. Menampilkan informasi ini dapat memberi petunjuk kepada pelaku penipuan. Tampilkan pesan penolakan umum dan catat error_code spesifik hanya secara internal.

Terkait

Transaction Failures

Setiap kode penolakan, jenisnya, dan tindakan yang disarankan.

Error Codes

Error API dan logika bisnis yang bukan merupakan penolakan kartu.

Subscription Payment Retries

Pemulihan otomatis penolakan lunak pada perpanjangan langganan.

Subscription Dunning

Rangkaian email untuk memulihkan penolakan keras.

Payment Webhooks

Skema payload lengkap untuk event pembayaran.

Testing Failures

Kartu pengujian yang mensimulasikan penolakan dan kegagalan perpanjangan.
Terakhir diubah pada 21 Juli 2026