Skip to main content
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:
error_codeerror_messagenull 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.
error_message từ merchant API là nội dung dành cho merchant. Nội dung này có thể nêu lý do thực sự khiến payment bị từ chối, bao gồm cả các lý do liên quan đến fraud, vì vậy không bao giờ được hiển thị trực tiếp cho customer. Thay vào đó, hãy ánh xạ error_code sang nội dung an toàn cho customer của riêng bạn, như minh họa trong Hiển thị lỗi an toàn cho customer.

Webhook payment.failed

Cách đáng tin cậy nhất để phát hiện lỗi là webhook payment.failed. Event bao bọc toàn bộ payment object trong data:
payment.failed payload
Một handler tối thiểu sẽ đọc error_code và định tuyến dựa trên giá trị này:
Luôn xác minh chữ ký của webhook trước khi xử lý. Xem hướng dẫn Webhooks để biết toàn bộ quy trình thiết lập, bao gồm xác minh chữ ký và idempotency.

Quyết định có nên Retry hay không: Soft Decline và Hard Decline

error_code cho biết việc retry cùng payment method có đáng thực hiện hay không. Tài liệu tham khảo Transaction Failures liệt kê loại decline và hành động được đề xuất cho mọi error_code.

Xử lý lỗi tại Checkout và khi Renewal

Cách khôi phục phụ thuộc vào việc customer có đang hiện diện hay không.
Customer đang chủ động thực hiện checkout. Hiển thị thông báo rõ ràng và cho phép họ retry ngay lập tức hoặc sử dụng card khác.
  • requires_payment_method — customer chưa từng cung cấp payment method: họ chưa nhập thông tin card hoặc được nhắc nhập nhưng không thực hiện hành động nào. Đây thường là drop-off trong checkout, không phải decline — hãy tiếp cận lại customer để hoàn tất payment (xem Khôi phục giỏ hàng bị bỏ quên).
  • requires_customer_action — cần xác thực bổ sung (chẳng hạn như 3DS); yêu cầu customer hoàn tất bước này. Xem Xử lý 3D Secure.

Retry Payment Thất bại

  • Subscriptions: Bật Subscription Payment Retries để khôi phục soft decline mà không cần thực hiện thêm công việc 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 customer cập nhật payment method thông qua Update Payment Method API, API này sẽ charge mọi khoản còn nợ.
  • One-time payments: Gửi lại checkout hoặc payment_link để customer có thể thử lại bằng method khác. One-time payments không có cơ chế retry tự động.
Không retry hard decline với cùng card. Các card network có thể đánh dấu những lần decline lặp lại là hành vi lạm dụng, làm giảm authorization rate của bạn.

Hiển thị Lỗi an toàn cho Customer

Hiển thị cho customer một thông báo thân thiện — không bao giờ hiển thị error_code thô và cũng không bao giờ hiển thị error_message dành cho merchant.
Trên các giao diện do Dodo Payments kiểm soát — checkout, Customer Portal và email dunning — việc ánh xạ này đã được thực hiện sẵn cho bạn, bao gồm cả phương án dự phòng hiển thị thông báo chung cho các decline liên quan đến fraud. Bạn chỉ cần áp dụng ánh xạ dưới đây khi hiển thị lỗi trong sản phẩm của riêng mình.
Customer-facing messaging
Không bao giờ tiết lộ lý do thực sự của STOLEN_CARD, LOST_CARD, PICKUP_CARD hoặc FRAUDULENT. Việc hiển thị các lý do này có thể cung cấp thông tin cho đối tượng gian lận. Hãy hiển thị thông báo decline chung và chỉ ghi log error_code cụ thể trong nội bộ.

Liên quan

Transaction Failures

Mọi mã decline, loại decline và hành động được đề xuất.

Error Codes

Các lỗi API và logic nghiệp vụ không phải là card decline.

Subscription Payment Retries

Tự động khôi phục soft decline trong các lần renewal của subscription.

Subscription Dunning

Các chuỗi email giúp khôi phục hard decline.

Payment Webhooks

Schema payload đầy đủ cho các event payment.

Testing Failures

Các card kiểm thử mô phỏng decline và lỗi renewal.
Lần sửa đổi cuối 8 tháng 8, 2026