Khi một khoản thanh toán thất bại, Dodo Payments sẽ cho bạn biết tại sao thông qua một
error_code đã chuẩn hóa và một error_message có thể đọc được. Hướng dẫn này cho thấy cách đọc các trường đó, quyết định xem có đáng thử lại không, và khôi phục thanh toán mà không tiết lộ thông tin nhạy cảm cho khách hàng.Cách Dodo Payments Báo Cáo Một Thất Bại
Mỗi thanh toán thất bại — dù là thanh toán một lần hay gia hạn đăng ký — đều mang cùng các trường thất bại trên đối tượng thanh toán:| Trường | Loại | Mô tả |
|---|---|---|
status | string | failed cho một khoản thanh toán thất bại. Các trạng thái không thành công khác bao gồm cancelled, requires_customer_action, và requires_payment_method. |
error_code | string | null | Lý do thất bại đã chuẩn hóa, ví dụ INSUFFICIENT_FUNDS hoặc PROCESSING_ERROR. Xem Transaction Failures để biết danh sách đầy đủ. |
error_message | string | null | Một giải thích có thể đọc được về thất bại. |
retry_attempt | integer | 0 cho khoảng phí gốc. 1 hoặc cao hơn xác định một thử lại gia hạn đăng ký đã lên lịch. |
error_code và error_message là null cho đến khi khoản thanh toán thực sự thất bại. Luôn kiểm tra status trước, sau đó đọc các trường lỗi.The payment.failed Webhook
Cách đáng tin cậy nhất để phát hiện một thất bại là webhook payment.failed. Sự kiện bao bọc toàn bộ đối tượng thanh toán trong data:
payment.failed payload
error_code và định tuyến trên nó:
Quyết Định Thử Lại Hay Không: Từ Chối Nhẹ So Với Từ Chối Cứng
error_code cho bạn biết liệu việc thử lại cùng một phương thức thanh toán có đáng giá hay không.
| Loại từ chối | Ý nghĩa | Phải làm gì |
|---|---|---|
| Từ chối nhẹ | Tạm thời hoặc có thể sửa (ví dụ INSUFFICIENT_FUNDS, PROCESSING_ERROR, NETWORK_ERROR, TRY_AGAIN_LATER). | Thử lại — sau một khoảng thời gian chờ, hoặc khi khách hàng sửa đổi đầu vào — có thể thành công. |
| Từ chối cứng | Không thể khắc phục (ví dụ STOLEN_CARD, LOST_CARD, DO_NOT_HONOR, FRAUDULENT). | Đừng thử lại cùng thẻ đó. Yêu cầu khách hàng cung cấp phương thức thanh toán khác. |
error_code.
Xử Lý Thất Bại Tại Checkout VS. Khi Gia Hạn
Cách bạn khôi phục phụ thuộc vào việc khách hàng có mặt hay không.- At checkout (customer present)
- On subscription renewal (customer not present)
Khách hàng đang tích cực thanh toán. Hiển thị một thông điệp rõ ràng và cho phép họ thử lại ngay lập tức hoặc sử dụng thẻ khác.
requires_payment_method— khách hàng chưa bao giờ cung cấp một phương thức thanh toán: họ không nhập chi tiết thẻ hoặc được nhắc nhập nhưng không thực hiện hành động nào. Đây thường là một bỏ qua tại checkout, không phải từ chối — tương tác lại với khách hàng để hoàn thành thanh toán (xem Abandoned Cart Recovery).requires_customer_action— cần thêm xác thực (như 3DS); yêu cầu khách hàng hoàn tất nó. Xem 3D Secure handling.
Thử Lại Một Khoản Thanh Toán Thất Bại
- Đăng ký: Kích hoạt Subscription Payment Retries để khôi phục các từ chối nhẹ mà không cần tích hợp. Bạn cũng có thể kích hoạt khôi phục bằng cách yêu cầu khách hàng cập nhật phương thức thanh toán của họ thông qua Update Payment Method API, mà sẽ tính phí bất kỳ khoản nợ nào.
Hiển Thị Lỗi Cho Khách Hàng Một Cách An Toàn
Hiển thị cho khách hàng một thông báo thân thiện — không bao giờ là lý do thô nhưerror_code.
Customer-facing messaging
Liên Quan
Transaction Failures
Mã từ chối, loại của nó và hành động khuyến nghị.
Error Codes
API và lỗi logic nghiệp vụ không phải là từ chối thẻ.
Subscription Payment Retries
Khôi phục tự động các từ chối nhẹ khi gia hạn đăng ký.
Subscription Dunning
Chuỗi email để khôi phục các từ chối cứng.
Payment Webhooks
Schema đầy đủ của payload cho sự kiện thanh toán.
Testing Failures
Thẻ thử mô phỏng các từ chối và thất bại khi gia hạn.