Chuyển đến nội dung chính

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ể
Hiểu các mã lỗi này và ý nghĩa của chúng là rất quan trọng cho:
  • 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
Các phần sau cung cấp thông tin chi tiết về mã trạng thái HTTP tiêu chuẩn và các mã lỗi cụ thể mà bạn có thể gặp phải khi sử dụng Dodo Payments API.

Mã Lỗi API Tiêu Chuẩn

Mã lỗiTrạng thái HTTPMô tả
400Yêu cầu không hợp lệYêu cầu bị sai định dạng hoặc chứa các tham số không hợp lệ
401Không được phépXác thực thất bại hoặc khóa API không hợp lệ
403Bị cấmKhóa API không có quyền truy cập vào tài nguyên yêu cầu
404Không tìm thấyTài nguyên yêu cầu không tồn tại
405Phương thức không được phépPhương thức HTTP không được hỗ trợ cho điểm cuối này
409Xung độtYêu cầu xung đột với trạng thái hiện tại của tài nguyên
422Thực thể không thể xử lýYêu cầu được định dạng đúng nhưng chứa lỗi ngữ nghĩa
429Quá nhiều yêu cầuVượt quá giới hạn tần suất
500Lỗi máy chủ nội bộMột lỗi không mong đợi đã xảy ra trên máy chủ của chúng tôi
502Gateway không hợp lệMáy chủ nhận được phản hồi không hợp lệ từ một máy chủ upstream
503Dịch vụ không khả dụngDịch vụ tạm thời không khả dụng
504Thời gian chờ GatewayMáy chủ đã hết thời gian chờ khi chờ phản hồi từ upstream

Đị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:
{
  "code": "UNSUPPORTED_COUNTRY",
  "message": "Country AI currently not supported"
}

Tham Khảo Mã Lỗi

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Trigger: Kích hoạt khóa giấy phép: giới hạn mới < số lượng phiên bản hiện có
    • Message: Giới hạn kích hoạt mới không thể nhỏ hơn số lượng phiên bản hiện tại
  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Cố gắng thêm addon vào các đăng ký thanh toán dựa trên mức sử dụng
    • Message: Addon trong các Đăng ký không được hỗ trợ cho Thanh toán Dựa trên Mức sử dụng
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Trigger: Cố gắng thêm addon vào các đăng ký theo yêu cầu
    • Message: Addon không được phép cho các đăng ký theo yêu cầu
  • BRAND_MISMATCH
    • Trigger: Các mặt hàng trong giỏ hàng thuộc về các thương hiệu khác nhau
    • Message: 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
    • Trigger: Thương hiệu bị vô hiệu hóa hoặc không hoạt động
    • Message: Thương hiệu được cung cấp không được kích hoạt
  • BRAND_SUBMISSION_NOT_ENABLED
    • Trigger: Tính năng nộp lại xác minh thương hiệu không được kích hoạt
    • Message: Nộp lại xác minh thương hiệu không được kích hoạt
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Cố gắng tính phí cho đăng ký đã lên lịch hủy
    • Message: Đăng ký đã lên lịch hủy
  • CHECKOUT_SESSION_CONSUMED
    • Trigger: Phiên thanh toán đã tạo một khoản thanh toán
    • Message: Phiên thanh toán đã được sử dụng
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Trigger: Tạo mã giảm giá trùng lặp
    • Message: Mã giảm giá đã tồn tại
  • DISCOUNT_CODE_EXPIRED
    • Trigger: Mã giảm giá đã qua expires_at ngày
    • Message: Mã giảm giá đã hết hạn
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: Mã giảm giá được sử dụng lại sau khi usage_limit đã đạt
    • Message: Giới hạn sử dụng không thể nhỏ hơn times_used / Mã giảm giá đã đạt giới hạn sử dụng
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Trigger: Mã được áp dụng cho đăng ký theo yêu cầu
    • Message: Mã giảm giá không có sẵn cho các đăng ký theo yêu cầu
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Trigger: Mã được áp dụng cho sản phẩm không liên quan
    • Message: Mã giảm giá không có sẵn cho sản phẩm này
  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Trigger: Cùng một item_id xuất hiện hai lần trong items[]
    • Message: Các item_ids trùng lặp được chỉ định trong mảng items
  • DUPLICATE_METER_IDS_IN_REQUEST
    • Trigger: Cùng một ID đồng hồ xuất hiện nhiều lần trong yêu cầu
    • Message: Các ID đồng hồ trùng lặp không được phép
  • EXCHANGE_RATE_NOT_FOUND
    • Trigger: Không có tỷ giá FX cho cặp tiền tệ from → to
    • Message: Không tìm thấy tỷ giá hối đoái để chuyển đổi từ Tiền tệ sang Tiền tệ
  • EXISTING_REFUND_REQUEST_PROCESSING
    • Trigger: Yêu cầu hoàn tiền trước đó vẫn đang được xử lý
    • Message: Một yêu cầu hoàn tiền với trạng thái “Đang chờ” vẫn đang được xử lý
  • INACTIVE_LICENSE_KEY
    • Trigger: Trạng thái khóa ≠ ACTIVE
    • Message: Khóa giấy phép không hoạt động
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: Thay đổi kế hoạch trên đăng ký không hoạt động
    • Message: Thay đổi kế hoạch không được hỗ trợ cho các đăng ký không hoạt động
  • INSUFFICIENT_WALLET_FUNDS
    • Trigger: Số dư ví < số tiền ghi nợ
    • Message: Không đủ tiền trong ví
  • INTEGER_CONVERSION_FAILURE
    • Trigger: Bất kỳ chuyển đổi số nguyên ↔ chuỗi/số thập phân nào không thành công phía máy chủ
    • Message: Lỗi chuyển đổi số nguyên
  • INTERNAL_SERVER_ERROR
    • Trigger: Ngoại lệ không bắt được; bạn nên ghi lại chi tiết phía máy chủ
    • Message: Không có thông điệp công khai (500 tổng quát)
  • INVALID_DISCOUNT_CODE
    • Trigger: Mã không tồn tại / không áp dụng
    • Message: Mã giảm giá không hợp lệ / Mã giảm giá không thể được áp dụng cho bất kỳ sản phẩm nào trong giỏ hàng
  • INVALID_PERCENTAGE
    • Trigger: Số phần trăm > 100% (hoặc 10.000 điểm cơ bản)
    • Message: Số phần trăm không thể lớn hơn 10000 / Số tiền mã giảm giá không thể lớn hơn 100%
  • INVALID_QUANTITY
    • Trigger: Số lượng không hợp lệ được chỉ định cho giá dựa trên mức sử dụng
    • Message: Chỉ cho phép 1 số lượng trong các sản phẩm giá dựa trên mức sử dụng
  • INVALID_QUERY_PARAMS
    • Trigger: Tham số truy vấn loại trừ lẫn nhau / không hợp lệ
    • Message: Tham số truy vấn chỉ nên chứa hoặc time_frame hoặc (start, end)
  • INVALID_REQUEST_BODY
    • Trigger: JSON không hợp lệ hoặc vi phạm sơ đồ
    • Message: Nội dung yêu cầu của bạn không hợp lệ. Vui lòng kiểm tra tiêu đề yêu cầu và đối tượng của bạn.
  • INVALID_REQUEST_PARAMETERS
    • Trigger: Ngữ nghĩa sai (ví dụ: ngày trong quá khứ)
    • Message: Không thể thay đổi next_billing_date thành thời gian trong quá khứ
  • INVALID_SUGGESTED_PRICE
    • Trigger: Giá PWYW < giá tối thiểu cho phép
    • Message: Giá đề xuất không thể thấp hơn giá tối thiểu. Trong trường hợp trả theo ý bạn, giá được coi là số tiền tối thiểu được chấp nhận
  • INVALID_TAX_ID
    • Trigger: VAT/GST/TIN không thành công xác thực
    • Message: Mã số thuế không hợp lệ
  • LICENSE_KEY_LIMIT_REACHED
    • Trigger: Kích hoạt = giới hạn
    • Message: Đã đạt giới hạn kích hoạt khóa giấy phép
  • LICENSE_KEY_NOT_FOUND
    • Trigger: ID phiên bản hoặc ID khóa không hợp lệ
    • Message: Phiên bản khóa giấy phép không được tìm thấy hoặc không thuộc về khóa giấy phép này
  • LINE_ITEM_FULLY_REFUNDED
    • Trigger: Cố gắng hoàn tiền cho mặt hàng đã hoàn tiền hoàn toàn
    • Message: Mặt hàng đã được hoàn tiền hoàn toàn không thể hoàn tiền thêm.
  • LINE_ITEM_NOT_FOUND
    • Trigger: ID mặt hàng không phải là một phần của thanh toán được tham chiếu
    • Message: Mặt hàng không được tìm thấy trong thanh toán
  • LINE_ITEM_PRORATED
    • Trigger: Cố gắng hoàn tiền hoặc cập nhật một dòng đã được tính theo tỷ lệ
    • Message: Mặt hàng không thể được hoàn tiền vì nó đã được tính theo tỷ lệ
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Trigger: Số tiền hoàn tiền > số tiền đã trả (bao gồm thuế)
    • Message: Số tiền hoàn tiền được yêu cầu cho mặt hàng bao gồm thuế là vượt quá số tiền đã trả
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Trigger: Số tiền hoàn tiền dưới ngưỡng tối thiểu
    • Message: Số tiền hoàn tiền được yêu cầu cho mặt hàng quá thấp
  • MAXIMUM_KEYS_REACHED
    • Trigger: Metadata / custom-fields vượt quá 50 cặp
    • Message: Vượt quá 50 cặp khóa-giá trị
  • MERCHANT_NOT_LIVE
    • Trigger: Doanh nghiệp vẫn trong chế độ thử nghiệm/sandbox
    • Message: Người bán không hoạt động
  • METER_IS_DELETED
    • Trigger: Cố gắng sử dụng đồng hồ đã bị xóa
    • Message: Đồng hồ đã bị xóa
  • MISSING_ADDON_IDS
    • Trigger: addon_id danh sách trống hoặc ID không xác định
    • Message: Một hoặc nhiều ID sản phẩm không tồn tại:
  • MISSING_METER_IDS
    • Trigger: Danh sách ID đồng hồ trống hoặc chứa ID không hợp lệ
    • Message: Một hoặc nhiều ID đồng hồ không tồn tại:
  • MISSING_PRODUCT_INFORMATION
    • Trigger: Sản phẩm tồn tại nhưng thông tin bắt buộc thiếu
    • Message: Sản phẩm tồn tại nhưng thông tin bắt buộc khác bị thiếu hoặc không hợp lệ
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Trigger: Cố gắng làm cho số dư ví âm
    • Message: Số dư ví không được phép âm
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Trigger: Sau khi lọc, không còn gì
    • Message: Không tìm thấy phương thức thanh toán đủ điều kiện
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Trigger: Cố gắng đặt ngày hết hạn cho khóa dựa trên đăng ký
    • Message: Không thể đặt ngày hết hạn cho khóa giấy phép dựa trên đăng ký
  • NOT_FOUND
    • Trigger: 404 tổng quát cho bất kỳ tài nguyên nào bị thiếu
    • Message: Mặt hàng không được tìm thấy (hoặc cụ thể hơn)
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: Thay đổi kế hoạch không được phép cho theo yêu cầu
    • Message: Thay đổi kế hoạch không được hỗ trợ cho các đăng ký theo yêu cầu
  • ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED
    • Trigger: Doanh nghiệp đã tắt cờ tính năng
    • Message: Các đăng ký theo yêu cầu không được kích hoạt cho doanh nghiệp này
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Cố gắng sử dụng theo yêu cầu với thanh toán dựa trên mức sử dụng
    • Message: Các Đăng ký Theo yêu cầu không được hỗ trợ cho Thanh toán Dựa trên Mức sử dụng
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Trigger: Thiếu giá cho sản phẩm PWYW
    • Message: Số tiền là bắt buộc cho sản phẩm trả theo ý bạn
  • PAYMENT_ALREADY_REFUNDED
    • Trigger: Hoàn tiền trùng lặp
    • Message: Thanh toán này đã được hoàn tiền
  • PAYMENT_HAS_BEEN_REFUNDED
    • Trigger: Thanh toán đã được hoàn tiền hoàn toàn
    • Message: ID Thanh toán đã được hoàn tiền hoàn toàn.
  • PAYMENT_NOT_SUCCEEDED
    • Trigger: Cố gắng hoàn tiền/xử lý thanh toán không thành công
    • Message: Thanh toán được cung cấp không thành công
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Thay đổi kế hoạch được cố gắng trên đăng ký đã lên lịch hủy
    • Message: Đăng ký đã lên lịch hủy
  • PREVIOUS_PAYMENT_PENDING
    • Trigger: Cố gắng tạo khoản phí trong khi khoản phí trước đó đang ở trạng thái không kết thúc
    • Message: Không thể tạo khoản phí mới vì khoản thanh toán trước đó chưa thành công
  • PRODUCT_CART_EMPTY
    • Trigger: Giỏ sản phẩm trống được gửi
    • Message: giỏ sản phẩm trống
  • PRODUCT_IS_DELETED
    • Trigger: Sản phẩm đã bị xóa mềm
    • Message: Không có thông điệp
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Trigger: Tổng hoàn tiền tích lũy > số tiền đã trả
    • Message: Số tiền hoàn tiền được tính toán lớn hơn số tiền đã trả
  • REFUND_WINDOW_EXPIRED
    • Trigger: Ngoài khoảng thời gian hoàn tiền cho phép
    • Message: Không thể khởi tạo hoàn tiền ngày sau khi tạo thanh toán. Liên hệ với support@dodopayments.com.
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Trigger: Số tiền < tối thiểu sản phẩm
    • Message: Số tiền không thể nhỏ hơn số tiền tối thiểu được chỉ định cho sản phẩm
  • SUBSCRIPTION_EXPIRED
    • Trigger: Thanh toán đã qua ends_at
    • Message: Đăng ký đã hết hạn không thể tạo các khoản phí mới
  • SUBSCRIPTION_INACTIVE
    • Trigger: Trạng thái ≠ ACTIVE
    • Message: Đăng ký không hoạt động
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Trigger: Mong đợi theo yêu cầu nhưng nhận được khoảng thời gian cố định
    • Message: Đăng ký đã không còn theo yêu cầu
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Trigger: Số lần thử thanh toán đăng ký vượt quá số lần tối đa
    • Message: Đã vượt quá giới hạn thử tối đa 10 lần cho đăng ký này
  • TOO_MANY_REQUESTS
    • Trigger: 429 giới hạn tỷ lệ
    • Message: Không có thông điệp
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Trigger: Tổng giỏ hàng kết hợp < mức tối thiểu của cổng thanh toán
    • Message: Số tiền tối thiểu là cần thiết để xử lý thanh toán
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Trigger: Cố gắng cập nhật thương hiệu chính qua API thông thường
    • Message: Thương hiệu chính không thể được cập nhật qua điểm cuối API này.
  • UNAUTHORIZED
    • Trigger: Không có khóa API hoặc mã thông báo / phạm vi không hợp lệ
    • Message: Bạn không được phép thực hiện hành động này
  • UNSUPPORTED_ACTION
    • Trigger: Hành động không được hỗ trợ cho loại tài nguyên
    • Message: Thay đổi kế hoạch cho các đăng ký dựa trên mức sử dụng không được hỗ trợ
  • UNSUPPORTED_BILLING_CURRENCY
    • Trigger: Các đăng ký bị hạn chế chỉ USD
    • Message: Tiền tệ thanh toán không phải USD không được hỗ trợ cho các đăng ký
  • UNSUPPORTED_COUNTRY
    • Trigger: Khu vực chưa được hỗ trợ
    • Message: Quốc gia hiện không được hỗ trợ
  • UNSUPPORTED_CURRENCY
    • Trigger: Tiền tệ sản phẩm hoặc addon không hợp lệ
    • Message: Tiền tệ hiện không được hỗ trợ / Chỉ hỗ trợ sản phẩm USD và INR hiện tại / Chỉ hỗ trợ USD và INR cho giá addon / Chỉ có thể yêu cầu USD hoặc INR cho billing_currency / Tiền tệ không được hỗ trợ / Tiền tệ không mong đợi cho các đăng ký thẻ Ấn Độ
  • UNSUPPORTED_DISCOUNT_TYPE
    • Trigger: Giảm giá số tiền cố định, v.v., chưa hoạt động
    • Message: Hiện tại chỉ hỗ trợ mã giảm giá phần trăm
  • UNSUPPORTED_PAYMENT_CURRENCY
    • Trigger: Tiền tệ thanh toán bị chặn cho kết nối
    • Message: Giao dịch INR không được hỗ trợ cho giao dịch này
  • UNSUPPORTED_TAX_CATEGORY
    • Trigger: Chuỗi danh mục thuế không có trong enum
    • Message: Danh mục hiện không được hỗ trợ
  • UNSUCCESSFUL_PAYMENT_ID
    • Trigger: ID thanh toán tham chiếu thanh toán không thành công
    • Message: ID Thanh toán có trạng thái không thành công.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Trigger: Cố gắng hoàn tiền cho thanh toán có số tiền bằng không
    • Message: Không thể hoàn tiền cho một thanh toán có số tiền bằng không

Thực Hành Tốt Nhất

  1. Luôn xử lý lỗi một cách khéo léo trong ứng dụng của bạn
  2. Triển khai ghi nhật ký lỗi đúng cách
  3. Sử dụng thông điệp lỗi phù hợp cho người dùng cuối
  4. Triển khai logic thử lại cho các lỗi tạm thời
  5. Liên hệ với hỗ trợ cho các vấn đề chưa được giải quyết

Hỗ Trợ

Để được hỗ trợ thêm về mã lỗi hoặc các vấn đề tích hợp, vui lòng liên hệ với đội ngũ hỗ trợ của chúng tôi tại support@dodopayments.com.