Tổng Quan
Dodo Payments API sử dụng mã trạng thái HTTP tiêu chuẩn và mã lỗi tùy chỉnh để chỉ ra sự thành công hoặc thất bại của các yêu cầu API. Khi xảy ra lỗi, API sẽ trả về mã trạng thái HTTP phù hợp và một phản hồi JSON chứa thông tin chi tiết về lỗi. Mỗi phản hồi lỗi bao gồm:- Mã trạng thái HTTP chỉ ra danh mục chung của lỗi
- Mã lỗi cụ thể xác định chính xác bản chất của lỗi
- Thông điệp lỗi dễ hiểu giải thích điều gì đã sai
- Thông tin chi tiết bổ sung về lỗi khi có thể
- Gỡ lỗi các vấn đề tích hợp
- Triển khai xử lý lỗi đúng cách trong ứng dụng của bạn
- Cung cấp phản hồi có ý nghĩa cho người dùng cuối
- Duy trì một hệ thống xử lý thanh toán vững chắc
Đây là các lỗi API và logic kinh doanh. Đối với các lý do từ chối thẻ trả về khi thanh toán thất bại (như
INSUFFICIENT_FUNDS hoặc CARD_DECLINED), hãy xem tham khảo Giao Dịch Thất Bại thay thế.Mã Lỗi API Tiêu Chuẩn
Định Dạng Phản Hồi Lỗi
Khi xảy ra lỗi, API trả về một phản hồi JSON với cấu trúc sau:Tham Khảo Mã Lỗi
Các mã lỗi dưới đây được nhóm theo khu vực của API mà chúng liên quan. Mỗi mục liệt kê điều kiện kích hoạt và thông điệp API trả về.Authentication & Account
-
UNAUTHORIZED- Kích hoạt: Không có API key hoặc token/phạm vi không hợp lệ
- Thông điệp: Bạn không được phép thực hiện hành động này
-
MERCHANT_NOT_LIVE- Trigger: Doanh nghiệp vẫn đang ở Test Mode
- Message: Merchant chưa được kích hoạt chính thức
Payments & Checkout
-
CHECKOUT_SESSION_CONSUMED- Kích hoạt: Phiên thanh toán đã tạo một thanh toán
- Thông điệp: Phiên thanh toán đã được sử dụng
-
NO_ELIGIBLE_PAYMENT_METHODS- Kích hoạt: Sau khi lọc, không còn gì
- Thông điệp: Không tìm thấy phương thức thanh toán đủ điều kiện
-
PAYMENT_NOT_SUCCEEDED- Kích hoạt: Thử hoàn trả/xử lý thanh toán không thành công
- Thông điệp: Thanh toán cung cấp chưa thành công
-
PREVIOUS_PAYMENT_PENDING- Kích hoạt: Thử tạo phí trong khi phí trước đó chưa có trạng thái cuối cùng
- Thông điệp: Không thể tạo phí mới vì thanh toán trước chưa thành công
-
UNSUCCESSFUL_PAYMENT_ID- Kích hoạt: ID thanh toán tham chiếu thanh toán không thành công
- Thông điệp: ID thanh toán có trạng thái không thành công.
Connectors & BYOP
Các lỗi này liên quan đến các đầu nối thanh toán do người bán sở hữu (Đem Theo Máy Xử Lý Của Bạn).-
BYOP_CONNECTOR_DISABLED- Kích hoạt: Cập nhật phương thức thanh toán trên một đăng ký được định tuyến qua đầu nối BYOP bị vô hiệu hóa
- Thông điệp: Đăng ký được định tuyến qua đầu nối BYOP của người bán hiện đang bị vô hiệu hóa
-
BYOP_CUSTOM_INVOICE_ADDRESS_MISSING- Kích hoạt: Thanh toán do người bán định tuyến (BYOP) bị thiếu địa chỉ hóa đơn tùy chỉnh cần thiết
- Thông điệp: Địa chỉ hóa đơn tùy chỉnh BYOP là bắt buộc khi thanh toán được định tuyến qua đầu nối của người bán
-
CONNECTOR_LABEL_ALREADY_EXISTS- Kích hoạt: Tạo đầu nối với nhãn đã tồn tại
- Thông điệp: Một đầu nối với nhãn này đã tồn tại. Vui lòng chọn một nhãn khác.
Refunds
-
EXISTING_REFUND_REQUEST_PROCESSING- Trigger: Yêu cầu hoàn tiền trước vẫn đang được xử lý
- Message: Yêu cầu hoàn tiền với trạng thái “Pending” vẫn đang được xử lý
-
LINE_ITEM_FULLY_REFUNDED- Kích hoạt: Thử hoàn trả một mục dòng đã được hoàn trả toàn bộ
- Thông điệp: Mục dòng đã được hoàn trả đầy đủ không thể hoàn trả thêm.
-
LINE_ITEM_NOT_FOUND- Kích hoạt: ID mục không thuộc thanh toán tham chiếu
- Thông điệp: Mục dòng không được tìm thấy trong thanh toán
-
LINE_ITEM_PRORATED- Kích hoạt: Thử hoàn trả hoặc cập nhật trên dòng được tính toán
- Thông điệp: Mục dòng không thể hoàn trả vì đã được tính toán
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Kích hoạt: Số tiền hoàn trả > số tiền đã thanh toán (bao gồm cả thuế)
- Thông điệp: Mục dòng yêu cầu số tiền hoàn trả bao gồm thuế là cao hơn số tiền đã thanh toán
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Kích hoạt: Số tiền hoàn trả dưới ngưỡng tối thiểu
- Thông điệp: Mục dòng yêu cầu số tiền hoàn trả là quá thấp
-
NOTHING_TO_REFUND- Kích hoạt: Không còn số tiền có thể hoàn trả; tất cả các mục dòng tích cực đã được hoàn trả đầy đủ
- Thông điệp: Không còn số tiền có thể hoàn trả. Tất cả các mục dòng tích cực đã được hoàn trả đầy đủ.
-
PARTIAL_REFUND_NOT_ALLOWED- Kích hoạt: Thử hoàn trả một phần trên phương thức thanh toán chỉ hỗ trợ hoàn trả toàn bộ
- Thông điệp: Hoàn trả một phần không được phép cho phương thức thanh toán này
-
PAYMENT_ALREADY_REFUNDED- Kích hoạt: Trùng lặp hoàn trả
- Thông điệp: Thanh toán này đã được hoàn trả
-
PAYMENT_HAS_BEEN_REFUNDED- Kích hoạt: Thanh toán đã được hoàn trả đầy đủ
- Thông điệp: ID thanh toán đã được hoàn trả đầy đủ.
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Kích hoạt: Tổng số tiền hoàn trả > số tiền đã thanh toán
- Thông điệp: Số tiền hoàn trả tính toán lớn hơn số tiền đã thanh toán
-
REFUND_WINDOW_EXPIRED- Kích hoạt: Ngoài khung thời gian hoàn trả
- Thông điệp: Hoàn trả không thể được thực hiện ngày sau khi tạo thanh toán. Liên hệ support@dodopayments.com.
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Kích hoạt: Thử hoàn trả thanh toán có số tiền bằng không
- Thông điệp: Không thể hoàn trả thanh toán với số tiền tiền tệ bằng không
Subscriptions & Add-ons
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Kích hoạt: Thử thêm tiện ích vào đăng ký thanh toán theo lượng sử dụng
- Thông điệp: Tiện ích trong Subscriptions không được hỗ trợ cho Billing Dựa trên Lượng Sử Dụng
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Kích hoạt: Thử thêm tiện ích vào đăng ký theo yêu cầu
- Thông điệp: Không được phép thêm tiện ích vào các đăng ký theo yêu cầu
-
CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Kích hoạt: Cổng Thông Tin Khách Hàng cố gắng hủy thay đổi kế hoạch đã lên lịch trong khi doanh nghiệp đã vô hiệu hóa hành động đó
- Thông điệp: Hủy thay đổi kế hoạch theo lịch đã bị vô hiệu hóa đối với cổng thông tin khách hàng.
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Kích hoạt: Thử tính phí đăng ký được lên lịch để hủy
- Thông điệp: Đăng ký đã được lên lịch để hủy
-
CUSTOMER_HAS_EXISTING_SUBSCRIPTION- Kích hoạt: Tạo đăng ký cho khách hàng đã có một cái, khi không cho phép nhiều đăng ký cho mỗi khách hàng
- Thông điệp: Khách hàng đã có một đăng ký hiện tại. Để cho phép nhiều đăng ký cho mỗi khách hàng, hãy thay đổi cài đặt doanh nghiệp
-
DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL- Kích hoạt:
do_not_billchế độ pro-ratomáy sử dụng trong một thay đổi kế hoạch Cổng thông tin khách hàng - Thông điệp: Không cho phép chế độ pro-bill trong cổng thông tin khách hàng
- Kích hoạt:
-
DUPLICATE_ADDON_IDS_IN_REQUEST- Kích hoạt:
addon_idxuất hiện nhiều lần trong yêu cầu - Thông điệp: Không được phép dùng trùng ID tiện ích
- Kích hoạt:
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Kích hoạt: Thay đổi kế hoạch trên đăng ký không hoạt động
- Thông điệp: Thay đổi kế hoạch không được hỗ trợ cho các đăng ký không hoạt động
-
INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE- Kích hoạt: Chế độ proration khác
full_immediatelyđược sử dụng vớieffective_at: next_billing_date - Thông điệp: Chỉ được phép chế độ full_immediately với hiệu lực_tại: ngày_thanh_toán_tiếp_theo
- Kích hoạt: Chế độ proration khác
-
MISSING_ADDON_IDS- Kích hoạt: Danh sách
addon_idrỗng hoặc ID không xác định - Thông điệp: Một hoặc nhiều ID sản phẩm không tồn tại:
- Kích hoạt: Danh sách
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Kích hoạt: Không cho phép chuyển đổi kế hoạch cho yêu cầu
- Thông điệp: Thay đổi kế hoạch không được hỗ trợ cho các đăng ký theo yêu cầu
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Kích hoạt: Thử sử dụng theo yêu cầu với thanh toán dựa trên số lượng dùng
- Thông điệp: Không hỗ trợ các đăng ký theo yêu cầu cho thanh toán dựa trên số lượng dùng
-
ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND- Kích hoạt: Sản phẩm một lần thêm vào một đăng ký theo yêu cầu
- Thông điệp: Không hỗ trợ các sản phẩm một lần cho các đăng ký theo yêu cầu
-
PENDING_PLAN_CHANGE_EXISTS- Kích hoạt: Yêu cầu thay đổi kế hoạch mới trong khi cái trước vẫn đang chờ thanh toán
- Thông điệp: Đang tồn tại việc thay đổi kế hoạch cho đăng ký này. Vui lòng chờ thanh toán hiện tại hoàn tất.
-
PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Kích hoạt: Thay đổi kế hoạch thông qua Cổng thông tin khách hàng trong khi doanh nghiệp đó đã vô hiệu hóa nó
- Thông điệp: Thay đổi kế hoạch đăng ký cho Cổng thông tin khách hàng đã bị vô hiệu hóa.
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Kích hoạt: Thử thay đổi kế hoạch đăng ký được lên lịch để hủy
- Thông điệp: Đăng ký đã được lên lịch để hủy
-
SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Kích hoạt: Lập lịch thay đổi kế hoạch thông qua Cổng thông tin khách hàng trong khi doanh nghiệp đã vô hiệu hóa nó
- Thông điệp: Lập lịch thay đổi kế hoạch đã bị vô hiệu hóa cho doanh nghiệp này.
-
SCHEDULED_PLAN_CHANGE_EXISTS- Kích hoạt: Tạo một thay đổi kế hoạch đã lên lịch khi có một thay đổi đã tồn tại
- Thông điệp: Đã tồn tại một thay đổi kế hoạch được lên lịch cho đăng ký này. Vui lòng hủy bỏ thay đổi đã được lên lịch trước khi tạo một thay đổi mới.
-
SCHEDULED_PLAN_CHANGE_NOT_FOUND- Kích hoạt: Tham khảo hoặc hủy bỏ một thay đổi kế hoạch được lên lịch không tồn tại
- Thông điệp: Không tìm thấy thay đổi kế hoạch được lên lịch cho đăng ký này.
-
SUBSCRIPTION_EXPIRED- Kích hoạt: Thanh toán quá
ends_at - Thông điệp: Đăng ký đã hết hạn không thể tạo phí mới
- Kích hoạt: Thanh toán quá
-
SUBSCRIPTION_INACTIVE- Kích hoạt: Trạng thái ≠
ACTIVE - Thông điệp: Đăng ký không hoạt động
- Kích hoạt: Trạng thái ≠
-
SUBSCRIPTION_NOT_ON_DEMAND- Kích hoạt: Dự kiến theo yêu cầu nhưng lại nhận được khoảng cố định
- Thông điệp: Đăng ký này đã không còn theo yêu cầu
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Kích hoạt: Thanh toán đăng ký vượt quá số lần thử tối đa
- Thông điệp: Giới hạn thử lại tối đa 10 lần vượt quá cho đăng ký này
Products, Cart & Brands
-
BRAND_MISMATCH- Kích hoạt: Các mặt hàng trong giỏ thuộc các thương hiệu khác nhau
- Thông điệp: Tất cả các mặt hàng trong giỏ sản phẩm nên thuộc về cùng một thương hiệu
-
BRAND_NOT_ENABLED- Kích hoạt: Thương hiệu đã bị vô hiệu hóa hoặc không hoạt động
- Thông điệp: Thương hiệu được cung cấp không được bật
-
BRAND_SUBMISSION_NOT_ENABLED- Kích hoạt: Tính năng gửi lại xác minh thương hiệu chưa được kích hoạt
- Thông điệp: Việc gửi lại xác minh thương hiệu chưa được kích hoạt
-
FILE_IN_USE- Trigger: Xóa tệp sản phẩm kỹ thuật số vẫn được các entitlement grant đang hoạt động tham chiếu
- Message: Tệp kỹ thuật số được các grant đang hoạt động tham chiếu
-
INVALID_SUGGESTED_PRICE- Kích hoạt: Giá PWYW < giá tối thiểu cho phép
- Thông điệp: Giá đề xuất không thể thấp hơn giá tối thiểu. Trong trường hợp trả những gì bạn muốn, giá được coi là số tiền chấp nhận tối thiểu
-
LOCALIZED_PRICE_ALREADY_EXISTS- Kích hoạt: Giá đã được định địa phương trước đó cho sản phẩm và quốc gia/tiền tệ này
- Thông điệp: Đã có một giá được định địa phương cho sản phẩm và quốc gia/tiền tệ này
-
LOCALIZED_PRICE_DUPLICATES_BASE- Kích hoạt: Giá định địa phương trùng với tiền tệ/quốc gia cơ bản của sản phẩm
- Thông điệp: Giá định địa phương trùng với tiền tệ/quốc gia cơ bản của sản phẩm
-
LOCALIZED_PRICE_SHAPE_MISMATCH- Kích hoạt: Hình dạng giá định địa phương không khớp với
pricing_modecủa sản phẩm - Thông điệp: Hình dạng giá định địa phương không khớp với chế độ giá của sản phẩm
- Kích hoạt: Hình dạng giá định địa phương không khớp với
-
MISSING_PRODUCT_INFORMATION- Kích hoạt: Sản phẩm tồn tại nhưng thông tin bắt buộc thiếu
- Thông điệp: Sản phẩm tồn tại nhưng thông tin bắt buộc khác thiếu hoặc không hợp lệ
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Kích hoạt: Thiếu giá cho sản phẩm PWYW
- Thông điệp: Số tiền là bắt buộc cho sản phẩm “trả những gì bạn muốn”
-
PRODUCT_CART_EMTPY- Kích hoạt: Gửi giỏ sản phẩm trống
- Thông điệp: giỏ_sản_phẩm trống (mã lỗi được viết
EMTPYđể khớp với giá trị chính xác mà API trả về)
-
PRODUCT_COLLECTION_IS_DELETED- Kích hoạt: Vận hành trên bộ sưu tập sản phẩm đã bị xóa
- Thông điệp: Không có thông điệp
-
PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS- Kích hoạt: Xóa sản phẩm cuối cùng (hoặc nhóm cuối cùng có sản phẩm) khỏi bộ sưu tập
- Thông điệp: Không thể xóa sản phẩm cuối cùng khỏi bộ sưu tập. Thay vào đó, hãy lưu trữ bộ sưu tập.
-
PRODUCT_IS_DELETED- Kích hoạt: Sản phẩm được xóa mềm
- Thông điệp: Không có thông điệp
-
PRODUCT_PRICING_MODE_REQUIRED- Kích hoạt: Thêm giá định địa phương trước khi
pricing_modecủa sản phẩm được đặt - Thông điệp: Phải đặt định giá sản phẩm trước khi thêm giá định địa phương
- Kích hoạt: Thêm giá định địa phương trước khi
-
SLUG_ALREADY_TAKEN- Kích hoạt: Slug sản phẩm hoặc URL ngắn được yêu cầu đã được sử dụng
- Thông điệp: Slug đã được sử dụng
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Kích hoạt: Thử cập nhật thương hiệu chính qua API thông thường
- Thông điệp: Không thể cập nhật thương hiệu chính qua endpoint API này.
Discounts
-
DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION- Kích hoạt: Áp dụng lại một mã giảm giá đã được sử dụng trên đăng ký này
- Thông điệp: Mã giảm giá này đã được sử dụng trên đăng ký này
-
DISCOUNT_CODE_ALREADY_EXISTS- Kích hoạt: Tạo mã giảm giá trùng lặp
- Thông điệp: Mã giảm giá đã tồn tại
-
DISCOUNT_CODE_EXPIRED- Kích hoạt: Mã giảm giá vượt quá
expires_at - Thông điệp: Mã giảm giá đã hết hạn
- Kích hoạt: Mã giảm giá vượt quá
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Trigger: Discount được sử dụng lại sau khi đạt đến
usage_limit - Message: Usage limit không thể nhỏ hơn times_used / Mã discount đã đạt usage limit
- Note: Terminal — mã đã hết lượt sử dụng. Không thử lại.
- Trigger: Discount được sử dụng lại sau khi đạt đến
-
DISCOUNT_CONCURRENT_REDEMPTION- Trigger: Một lần đổi mã khác của cùng mã đã giữ khóa hàng giới hạn sử dụng quá lâu
- Message: Giảm giá đang được đổi đồng thời; vui lòng thử lại
- Note: Lỗi tạm thời. Mã vẫn có thể còn lượt sử dụng, vì vậy có thể an toàn thử lại yêu cầu. Không hiển thị lỗi này cho khách hàng dưới dạng “mã đã hết lượt sử dụng”.
-
DISCOUNT_CURRENCY_OPTION_INVALID- Trigger:
currency_optionskhông hợp lệ khi create hoặc update - Message: Flat discount yêu cầu ít nhất một currency option có default có thể resolve / Không cho phép các currency option trùng lặp / Chỉ một currency option có thể được đánh dấu là default
- Trigger:
-
DISCOUNT_CUSTOMER_NOT_ELIGIBLE- Trigger: Customer không đáp ứng
customer_eligibilitycủa mã (first_time,existinghoặc không thuộc allow list của mãspecific) - Message: Customer không đủ điều kiện sử dụng mã discount này
- Trigger: Customer không đáp ứng
-
DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET- Trigger: Cart subtotal thấp hơn
minimum_subtotalđược cấu hình cho currency của checkout - Message: Cart subtotal thấp hơn subtotal tối thiểu được yêu cầu của discount
- Trigger: Cart subtotal thấp hơn
-
DISCOUNT_NOT_YET_ACTIVE- Trigger: Mã được sử dụng trước ngày
starts_at - Message: Mã discount chưa hoạt động (starts_at nằm trong tương lai)
- Trigger: Mã được sử dụng trước ngày
-
DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED- Trigger: Customer đã redeem mã
per_customer_usage_limitlần - Message: Đã vượt quá usage limit trên mỗi customer cho mã discount này
- Trigger: Customer đã redeem mã
-
DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT- Trigger: Thay đổi plan sang một product mà discount hiện tại không áp dụng
- Message: Discount không áp dụng cho product của plan mới
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Trigger: Mã được áp dụng cho subscription on-demand
- Message: Discount coupon không khả dụng cho subscription on-demand
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Trigger: Mã được áp dụng cho các product không liên quan
- Message: Discount coupon không khả dụng cho product này
-
INVALID_DISCOUNT_CODE- Trigger: Mã không tồn tại / không áp dụng được
- Message: Discount Code không hợp lệ / Không thể áp dụng Discount Code cho bất kỳ product nào trong cart
-
INVALID_PERCENTAGE- Trigger: Percent amount > 100% (hoặc 10.000 basis points)
- Message: Percentage amount không thể lớn hơn 10000 / Discount code amount không thể lớn hơn 100%
-
UNSUPPORTED_DISCOUNT_TYPE- Trigger: Loại discount không được hỗ trợ.
percentagevàflatđều được hỗ trợ; discount amount theo từng unit thì không. - Message: Chỉ hỗ trợ discount code dạng percentage và flat
- Trigger: Loại discount không được hỗ trợ.
License Keys
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Trigger: Kích hoạt license key: limit mới < số lượng instance hiện tại
- Message: Activation limit mới không thể nhỏ hơn số lượng instance hiện tại
-
INACTIVE_LICENSE_KEY- Trigger: Trạng thái key ≠
ACTIVE - Message: License key không hoạt động
- Trigger: Trạng thái key ≠
-
LICENSE_KEY_LIMIT_REACHED- Trigger: Số lần activation = limit
- Message: Đã đạt activation limit của license key
-
LICENSE_KEY_NOT_FOUND- Trigger: Instance ID hoặc key ID không hợp lệ
- Message: Không tìm thấy instance của license key hoặc instance không thuộc license key này
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Trigger: Cố gắng đặt expiry cho key dựa trên subscription
- Message: Không thể đặt ngày hết hạn cho license key dựa trên subscription
Usage-Based Billing & Meters
-
DUPLICATE_METER_IDS_IN_REQUEST- Trigger: Cùng một meter ID xuất hiện nhiều lần trong request
- Message: Không cho phép Meter Id trùng lặp
-
INVALID_QUANTITY- Trigger: Quantity không hợp lệ được chỉ định cho usage-based pricing
- Message: Chỉ cho phép 1 quantity trong các product có usage based price
-
METER_IS_DELETED- Trigger: Cố gắng sử dụng meter đã bị xóa
- Message: Meter đã bị xóa
-
MISSING_METER_IDS- Trigger: Danh sách Meter ID trống hoặc chứa ID không hợp lệ
- Message: Một hoặc nhiều meter ID không tồn tại:
Credit-Based Billing
-
CREDIT_ENTITLEMENT_IS_DELETED- Trigger: Thao tác trên credit entitlement đã bị xóa
- Message: Credit entitlement đã bị xóa
-
CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS- Trigger: Tạo credit entitlement với tên đã tồn tại
- Message: Credit entitlement với tên này đã tồn tại
-
OVERAGE_LIMIT_EXCEEDED- Trigger: Việc trừ usage hoặc credit sẽ vượt quá overage limit đã cấu hình
- Message: Đã vượt quá overage limit
Wallet
-
INSUFFICIENT_WALLET_FUNDS- Trigger: Số dư wallet < debit amount
- Message: Không đủ tiền trong wallet
-
NEGATIVE_BALANCE_ADJUSTMENT- Trigger: Cố gắng khiến số dư wallet âm
- Message: Không được phép khiến số dư wallet âm
Currency, Tax & Region
-
EXCHANGE_RATE_NOT_FOUND- Trigger: Không có FX rate cho cặp currency
from → to - Message: Không tìm thấy exchange rate để chuyển đổi từ Currency sang Currency
- Trigger: Không có FX rate cho cặp currency
-
INVALID_TAX_ID- Trigger: VAT/GST/TIN không vượt qua validation
- Message: Tax Id không hợp lệ
-
REQUEST_AMOUNT_BELOW_MINIMUM- Trigger: Amount < product minimum
- Message: Amount không thể nhỏ hơn amount tối thiểu được chỉ định cho product
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Trigger: Combined cart total < gateway minimum
- Message: Cần amount tối thiểu là để xử lý payment
-
UNSUPPORTED_BILLING_CURRENCY- Trigger: Billing currency được yêu cầu không được hỗ trợ cho subscription này
- Message: Không hỗ trợ billing currency khác USD cho subscription
-
UNSUPPORTED_COUNTRY- Trigger: Geo chưa được hỗ trợ
- Message: Quốc gia hiện chưa được hỗ trợ
-
UNSUPPORTED_CURRENCY- Trigger: Currency của product hoặc addon không phải là currency mà Dodo Payments có thể charge. Base prices có thể được đặt bằng bất kỳ currency nào có thể charge, vì vậy điều này thường có nghĩa là currency code không hợp lệ hoặc chưa được hỗ trợ.
- Message: Currency hiện chưa được hỗ trợ / Hiện chỉ hỗ trợ product USD và INR / Chỉ hỗ trợ USD và INR cho addon price / Chỉ có thể yêu cầu USD hoặc INR cho billing_currency / Currency không được hỗ trợ / Currency không mong đợi cho subscription bằng thẻ Indian
-
UNSUPPORTED_TAX_CATEGORY- Trigger: Chuỗi tax category không có trong enum
- Message: Category hiện chưa được hỗ trợ
Validation & Requests
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Trigger: Cùng một
item_idxuất hiện hai lần trongitems[] - Message: Đã chỉ định item_ids trùng lặp trong items array
- Trigger: Cùng một
-
INVALID_QUERY_PARAMS- Trigger: Query parameters loại trừ lẫn nhau / không đúng định dạng
- Message: Query params chỉ được chứa time_frame hoặc (start, end)
-
INVALID_REQUEST_BODY- Trigger: JSON không đúng định dạng hoặc vi phạm schema
- Message: Request body không hợp lệ. Vui lòng kiểm tra request headers và object.
-
INVALID_REQUEST_PARAMETERS- Trigger: Ngữ nghĩa không đúng (ví dụ: date trong quá khứ)
- Message: Không thể thay đổi next_billing_date thành thời điểm trong quá khứ
-
MAXIMUM_KEYS_REACHED- Trigger: Metadata / custom-fields vượt quá 50 cặp
- Message: Vượt quá 50 cặp key-value
General & System
-
INTEGER_CONVERSION_FAILURE- Trigger: Bất kỳ chuyển đổi integer ↔ string/decimal nào thất bại ở phía server
- Message: Lỗi chuyển đổi Integer
-
INTERNAL_SERVER_ERROR- Trigger: Ngoại lệ không được bắt; bạn nên log thông tin chi tiết ở phía server
- Message: Không có message công khai (500 chung)
-
NOT_FOUND- Trigger: 404 chung cho mọi tài nguyên không tồn tại
- Message: Không tìm thấy item (hoặc thông báo cụ thể hơn)
-
TOO_MANY_REQUESTS- Trigger: Giới hạn tốc độ 429
- Message: Không có message
-
UNSUPPORTED_ACTION- Trigger: Action không được hỗ trợ cho loại resource
- Message: Không hỗ trợ thay đổi plan cho usage based subscription
Best Practices
- Luôn xử lý lỗi một cách phù hợp trong application của bạn
- Triển khai error logging đúng cách
- Sử dụng error message phù hợp cho end user
- Triển khai retry logic cho các lỗi tạm thời
- Liên hệ support đối với các vấn đề chưa được giải quyết