Skip to main content
Khi một khoản thanh toán thất bại, Dodo Payments cung cấp error_code được chuẩn hóa và error_message ở dạng dễ đọc. Hướng dẫn này chỉ ra cách đọc các trường đó, quyết định có nên thử lại hay không và khôi phục khoản thanh toán an toàn.

Cách Dodo Payments Báo Cáo Một Thất Bại

Mỗi khoản thanh toán thất bại đều có các trường sau trên payment object:
error_code và error_message là null cho đến khi một khoản thanh toán thất bại. Luôn kiểm tra status trước.
error_message dành cho merchant và có thể tiết lộ các lý do liên quan đến gian lận. Tuyệt đối không hiển thị trường này cho khách hàng. Thay vào đó, hãy ánh xạ error_code sang nội dung an toàn cho khách hàng (xem Hiển thị lỗi cho khách hàng an toàn).

Webhook payment.failed

Webhook payment.failed là cách đáng tin cậy nhất để phát hiện lỗi. Event chứa 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ị đó:
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. Xem Transaction Failures để biết danh sách đầy đủ các loại decline và hành động được đề xuất.

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.
Khách hàng đang chủ động thực hiện checkout. Hiển thị thông báo rõ ràng và cho phép họ thử lại hoặc sử dụng card khác.
  • requires_payment_method — khách hàng chưa cung cấp payment method. Đây thường là trường hợp rời bỏ checkout, không phải decline. Thu hút lại khách hàng để hoàn tất thanh toán (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 khách hàng hoàn tất bước này. Xem 3D Secure.

Retry Payment Thất bại

Subscriptions: Bật Subscription Payment Retries để tự động khôi phục các trường hợp soft decline. Để thử lại ngay thay vì chờ theo lịch, hãy sử dụng Manual Payment Retry từ dashboard hoặc API. Bạn cũng có thể kích hoạt quá trình khôi phục bằng cách yêu cầu khách hàng cập nhật payment method thông qua Update Payment Method API, thao tác này sẽ charge mọi khoản còn nợ. One-time payments: Gửi lại checkout hoặc payment_link để khách hàng có thể thử lại bằng payment method khác. One-time payments không được tự động retry.
Không thử lại hard decline với cùng một card. Các mạng lưới thẻ sẽ đá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 cho khách hàng 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ờ hiển thị error_code thô hoặc error_message dành cho merchant.
Trên các giao diện do Dodo Payments kiểm soát (checkout, Customer Portal, email dunning), việc ánh xạ này đã được thực hiện sẵn cho bạn, bao gồm cả cơ chế dự phòng sang thông báo chung đối với các trường hợp decline liên quan đến gian lận. Bạn chỉ cần sử dụng ánh xạ bên dưới 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ể cảnh báo cho kẻ gian. 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 decline code, 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 gia hạn subscription.

Subscription Dunning

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

Payment Webhooks

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

Testing Failures

Các test card mô phỏng decline và lỗi gia hạn.
Lần sửa đổi cuối 26 tháng 9, 2026