Tổng Quan
Dodo Payments trả về lý do thất bại chi tiết mỗi khi một lần thanh toán không thành công. Những lý do này được tiêu chuẩn hóa trên các phương thức và nhà cung cấp thanh toán, giúp bạn triển khai xử lý nhất quán trong ứng dụng của mình. Khi một khoản thanh toán thất bại,payment.failed webhook và đối tượng thanh toán tiết lộ:
error_code— một lý do thất bại được tiêu chuẩn hóa từ bảng dưới đây.error_message— một giải thích dễ hiểu cho người đọc.retry_attempt—0cho lần thanh toán ban đầu,1hoặc cao hơn cho mỗi lần thử gia hạn đăng ký được lên lịch.
Handle Payment Failures
Hướng dẫn nhà phát triển từng bước để đọc mã này từ webhooks và API, hiển thị cho khách hàng, và quyết định khi nào cần thử lại.
Từ chối mềm vs. Từ chối cứng
Mỗi mã thất bại thuộc một trong hai loại. Sự phân biệt này quyết định xem bạn nên thử lại phương thức thanh toán cũ hay yêu cầu khách hàng cung cấp phương thức mới.| Loại từ chối | Ý nghĩa | Làm thế nào | Ví dụ |
|---|---|---|---|
| Từ chối mềm | Tạm thời hoặc có thể điều chỉnh — thẻ có thể thành công trong một lần thử sau hoặc khi khách hàng sửa lỗi việc nhập thông tin. | An toàn để thử lại (sau một khoảng thời gian chờ, hoặc khi khách hàng sửa thông tin). | INSUFFICIENT_FUNDS, GENERIC_DECLINE, CARD_VELOCITY_EXCEEDED, PROCESSING_ERROR, NETWORK_ERROR, NETWORK_TIMEOUT, TRY_AGAIN_LATER |
| Từ chối cứng | Kết thúc — thử lại cùng một thẻ sẽ không thay đổi được kết quả. | Không thử lại cùng một thẻ. Hỏi khách hàng sử dụng phương thức thanh toán khác hoặc liên hệ với ngân hàng của họ. | STOLEN_CARD, LOST_CARD, PICKUP_CARD, DO_NOT_HONOR, FRAUDULENT, INVALID_ACCOUNT |
Lý do thất bại giao dịch
Bảng sau liệt kê tất cả mã thất bại, loại từ chối, liệu khách hàng có thể khắc phục, mô tả và hành động đề xuất.| Mã Thất Bại | Loại | Lỗi Người Dùng | Mô Tả | Hành Động Đề Xuất |
|---|---|---|---|---|
AUTHENTICATION_FAILURE | Soft | Có | Xác thực thất bại trong suốt giao dịch | Yêu cầu khách hàng thử lại và hoàn tất xác thực 3DS, hoặc sử dụng thẻ khác |
AUTHENTICATION_REQUIRED | Soft | Có | Cần xác thực bổ sung để hoàn tất giao dịch | Yêu cầu khách hàng hoàn tất xác thực 3DS. Đối với các lần gia hạn đăng ký, yêu cầu khách hàng quay lại và xác thực |
AUTHENTICATION_TIMEOUT | Soft | Có | Quá trình xác thực đã hết thời gian | Yêu cầu khách hàng thử lại và hoàn tất xác thực kịp thời |
CARD_DECLINED | Soft | Không | Thẻ bị ngân hàng phát hành từ chối mà không có lý do cụ thể (từ chối tổng quát) | Yêu cầu khách hàng thử lại, liên hệ với ngân hàng hoặc sử dụng thẻ khác |
CARD_NOT_ACTIVATED | Soft | Có | Thẻ chưa được chủ thẻ kích hoạt | Yêu cầu khách hàng kích hoạt thẻ với ngân hàng của họ, sau đó thử lại |
CARD_VELOCITY_EXCEEDED | Soft | Có | Quá nhiều giao dịch được thử trong thời gian ngắn | Yêu cầu khách hàng chờ và thử lại sau, hoặc liên hệ với ngân hàng về giới hạn |
CUSTOMER_CANCELLED | Soft | Có | Khách hàng đã hủy giao dịch | Để khách hàng khởi động lại khi sẵn sàng |
DO_NOT_HONOR | Hard | Không | Ngân hàng phát hành từ chối giao dịch một cách rõ ràng (mã ISO 8583 05 — không chấp nhận); mạng đối xử coi đây như kết thúc | Yêu cầu khách hàng liên hệ với ngân hàng của họ; không thử lại trên cùng thẻ |
EXPIRED_CARD | Hard | Có | Thẻ đã hết hạn | Yêu cầu khách hàng sử dụng một thẻ có ngày hết hạn hợp lệ |
FRAUDULENT | Hard | Có | Giao dịch bị gắn cờ có khả năng gian lận | Hiển thị cho khách hàng thông báo từ chối chung — không tiết lộ lý do. Yêu cầu họ sử dụng thẻ khác |
GENERIC_DECLINE | Soft | Không | Giao dịch bị từ chối vì lý do không xác định | Yêu cầu khách hàng liên hệ với ngân hàng của họ hoặc thử thẻ khác |
INCORRECT_CVC | Soft | Có | Mã CVC được cung cấp sai | Yêu cầu khách hàng nhập lại CVC đúng |
INCORRECT_NUMBER | Soft | Có | Số thẻ được nhập sai | Yêu cầu khách hàng nhập lại số thẻ đúng |
INSUFFICIENT_FUNDS | Soft | Có | Tài khoản không đủ tiền để thực hiện giao dịch | Yêu cầu khách hàng sử dụng phương thức thanh toán khác hoặc thử lại khi tiền có sẵn |
INVALID_ACCOUNT | Hard | Có | Chi tiết tài khoản cung cấp không hợp lệ | Yêu cầu khách hàng liên hệ với ngân hàng của họ hoặc sử dụng thẻ khác |
INVALID_AMOUNT | Soft | Có | Số tiền giao dịch không hợp lệ | Xác thực số tiền và giới hạn mua với khách hàng |
INVALID_CARD_NUMBER | Soft | Có | Định dạng số thẻ không hợp lệ | Yêu cầu khách hàng nhập lại số thẻ hợp lệ |
INVALID_CARD_OWNER | Soft | Có | Thông tin chủ thẻ không hợp lệ | Yêu cầu khách hàng sửa lại tên chủ thẻ |
INVALID_CVC | Soft | Có | Định dạng CVC không hợp lệ | Yêu cầu khách hàng nhập lại CVC hợp lệ |
INVALID_EXPIRY_YEAR | Soft | Có | Năm hết hạn thẻ không hợp lệ | Yêu cầu khách hàng nhập ngày hết hạn hợp lệ |
INVALID_PIN | Soft | Có | Mã PIN cung cấp không đúng | Yêu cầu khách hàng nhập lại mã PIN đúng |
INVALID_REQUEST | Soft | Có | Yêu cầu giao dịch chứa dữ liệu không hợp lệ | Kiểm tra các trường yêu cầu thanh toán và gửi lại với dữ liệu hợp lệ |
INVALID_UPI_ID | Soft | Có | ID UPI cung cấp không hợp lệ | Yêu cầu khách hàng nhập ID UPI hợp lệ |
LIMIT_EXCEEDED | Soft | Có | Giao dịch vượt quá giới hạn thẻ hoặc tài khoản | Yêu cầu khách hàng liên hệ với ngân hàng về giới hạn, hoặc sử dụng phương thức khác |
LIVE_MODE_TEST_CARD | Hard | Có | Một thẻ thử nghiệm được sử dụng ở chế độ trực tiếp | Sử dụng một thẻ thực — thử lại thẻ thử nghiệm luôn thất bại ở chế độ trực tiếp |
LOST_CARD | Hard | Có | Thẻ bị báo mất | Hiển thị cho khách hàng thông báo từ chối chung — không tiết lộ lý do. Yêu cầu họ sử dụng thẻ khác |
MANDATE_INVALID | Soft | Có | Manda thanh toán không hợp lệ | Yêu cầu khách hàng thiết lập lại sở thích thanh toán |
MANDATE_REQUIRED | Soft | Có | Cần có sự ủy quyền cho giao dịch này | Thiết lập một manda và yêu cầu khách hàng xác nhận trước khi thu phí |
MANDATE_REQUIRED_SYSTEM | Hard | Không | Hệ thống yêu cầu một manda cho loại giao dịch này | Đảm bảo luồng thiết lập manda đã hoàn tất trước khi thu phí |
NETWORK_ERROR | Soft | Không | Đã xảy ra lỗi mạng trong suốt giao dịch | Tạm thời — thử lại thanh toán sau một thời gian ngắn |
NETWORK_TIMEOUT | Soft | Không | Yêu cầu mạng đã hết thời gian | Tạm thời — thử lại thanh toán sau một thời gian ngắn |
ORDER_ALREADY_EXISTS | Soft | Không | Đơn hàng đã tồn tại cho giao dịch này (tạo đơn hàng trùng lặp) | Kiểm tra trạng thái của đơn hàng hiện có trước khi thử lại; liên hệ với hỗ trợ nếu nó tiếp tục |
ORDER_CREATION_FAILED | Soft | Không | Không tạo được đơn hàng cho giao dịch | Lỗi tạm thời/hệ thống — thử lại thanh toán; liên hệ với hỗ trợ nếu nó tiếp tục |
PAYMENT_METHOD_PROVIDER_DECLINED | Hard | Có | Nhà cung cấp phương thức thanh toán từ chối giao dịch | Yêu cầu khách hàng liên hệ với nhà cung cấp của họ hoặc sử dụng phương thức thanh toán khác |
PAYMENT_METHOD_UNSUPPORTED | Hard | Có | Phương thức thanh toán không được hỗ trợ cho giao dịch này | Yêu cầu khách hàng sử dụng phương thức thanh toán được hỗ trợ |
PICKUP_CARD | Hard | Có | Thẻ bị báo mất hoặc bị đánh cắp và bị gắn cờ để thu hồi | Hiển thị cho khách hàng thông báo từ chối chung — không tiết lộ lý do. Yêu cầu họ sử dụng thẻ khác |
PROCESSING_ERROR | Soft | Không | Lỗi xảy ra trong khi xử lý giao dịch | Tạm thời — thử lại thanh toán; nếu nó tiếp tục, yêu cầu khách hàng liên hệ với ngân hàng của họ |
PROVIDER_UNSUPPORTED | Hard | Không | Nhà cung cấp thanh toán không hỗ trợ loại giao dịch này | Yêu cầu khách hàng sử dụng phương thức thanh toán khác |
REENTER_TRANSACTION | Soft | Có | Giao dịch cần nhập lại | Yêu cầu khách hàng thử lại thanh toán |
REVOCATION_OF_AUTHORIZATION | Hard | Có | Ủy quyền cho giao dịch đã bị thu hồi | Yêu cầu khách hàng sử dụng phương thức thanh toán khác |
STOLEN_CARD | Hard | Có | Thẻ bị báo mất | Hiển thị cho khách hàng thông báo từ chối chung — không tiết lộ lý do. Yêu cầu họ sử dụng thẻ khác |
SUBSCRIPTION_NOT_ACTIVE | Hard | Không | Đăng ký không hoạt động, do đó không thể xử lý phí định kỳ | Kích hoạt lại đăng ký (ví dụ: bằng cách cập nhật phương thức thanh toán) trước khi thử lại phí |
TRANSACTION_NOT_ALLOWED | Hard | Có | Giao dịch không được phép cho thẻ hoặc tài khoản này | Yêu cầu khách hàng liên hệ với ngân hàng của họ để cho phép loại giao dịch này, hoặc sử dụng thẻ khác |
TRANSACTION_NOT_APPROVED | Hard | Có | Giao dịch không được phê duyệt | Yêu cầu khách hàng liên hệ với ngân hàng của họ hoặc thử thẻ khác |
TRY_AGAIN_LATER | Soft | Không | Giao dịch nên được thử lại sau | Tạm thời — thử lại thanh toán sau |
UNKNOWN_ERROR | Soft | Không | Đã xảy ra lỗi không xác định | Thử lại thanh toán; nếu nó tiếp tục, liên hệ với hỗ trợ |
Lỗi Người Dùng chỉ ra liệu khách hàng có thể giải quyết sự từ chối thanh toán hay không. Khi
Yes, khách hàng có thể thực hiện hành động để khắc phục sự cố (ví dụ, nhập đúng thông tin thẻ). Khi No, sự từ chối là do vấn đề hệ thống hoặc hạn chế từ ngân hàng mà khách hàng không thể giải quyết trực tiếp.Xử lý lỗi chương trình
Đọcerror_code từ payment.failed webhook hoặc đối tượng thanh toán, ánh xạ nó đến hành động đề xuất ở trên, và quyết định xem có nên thử lại hay không. Đối với gia hạn đăng ký, các từ chối mềm được thử lại tự động — xem Subscription Payment Retries.
Đối với lỗi ở cấp độ API và logic kinh doanh (như PAYMENT_NOT_SUCCEEDED hoặc REFUND_WINDOW_EXPIRED) không phải là từ chối thẻ, hãy xem tham khảo Error Codes.
Liên quan
Handle Payment Failures
Hướng dẫn từ đầu đến cuối về phát hiện, hiển thị và thử lại các khoản thanh toán thất bại.
Error Codes
Mã lỗi API và logic kinh doanh cho các lỗi không phải là từ chối.
Subscription Payment Retries
Thử lại tự động sẽ khôi phục các từ chối mềm khi gia hạn đăng ký.
Subscription Dunning
Chuỗi email phục hồi các từ chối cứng bằng cách yêu cầu cập nhật phương thức thanh toán.