Skip to main content
Ruby SDK cho phép các ứng dụng Ruby truy cập REST API của Dodo Payments. SDK gửi requests bằng net/http và connection pool của standard library, retry các requests thất bại, tự động duyệt qua các danh sách được phân trang, đồng thời cung cấp các định nghĩa kiểu RBI và RBS.

Cài đặt

Thêm gem vào Gemfile của bạn:
Gemfile
Các bản phát hành SDK bổ sung hỗ trợ cho những thay đổi của API. Hãy chạy bundle update dodopayments thường xuyên để luôn cập nhật phiên bản mới nhất.
Sau đó, cài đặt SDK:
SDK yêu cầu Ruby 3.2.0 trở lên.

Khởi động nhanh

Tạo một client, sau đó tạo một checkout session:
Nếu bạn bỏ qua bearer_token, client sẽ đọc biến môi trường DODO_PAYMENTS_API_KEY. Nếu bạn bỏ qua environment, client sẽ kết nối đến live mode. Test mode API key chỉ hoạt động với environment: "test_mode".
Lưu API keys trong các biến môi trường hoặc secrets manager. Không bao giờ commit chúng vào version control hoặc để lộ chúng trong code.

Tính năng chính

Ruby Conventions

Các methods và keyword arguments sử dụng snake_case, đồng thời chấp nhận plain hashes cho các nested parameters.

Elegant Syntax

Responses là các objects có attribute readers, và obj[:prop] cũng đọc được các fields mà SDK không định nghĩa.

Auto-Pagination

auto_paging_each duyệt qua mọi item và fetch trang tiếp theo khi cần.

Type Safety

Các định nghĩa RBI dành cho Sorbet, không phụ thuộc vào sorbet-runtime.

Cấu hình

Dodopayments::Client.new nhận bearer_token, webhook_key, environment, base_url, max_retries, timeout, initial_retry_delay và max_retry_delay. Khi bạn bỏ qua các giá trị này, client sẽ đọc DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (webhook signing secret của bạn) và DODO_PAYMENTS_BASE_URL từ môi trường. Client an toàn khi sử dụng trong nhiều threads và duy trì connection pool riêng, vì vậy hãy tạo một client cho ứng dụng của bạn và tái sử dụng nó. Để xác thực một webhook, truyền raw request body và headers vào dodo_payments.webhooks.unwrap(payload, headers: headers). Method này kiểm tra signature bằng webhook key của bạn và trả về event đã được parse. dodo_payments.webhooks.unsafe_unwrap(payload) parse body mà không xác thực, vì vậy chỉ sử dụng nó để testing. Xem Webhooks.

Cấu hình Timeout

Theo mặc định, requests sẽ timeout sau 60 giây. Đặt timeout, tính bằng giây, trên client hoặc trên một request duy nhất:
Khi một request timeout, SDK sẽ raise Dodopayments::Errors::APITimeoutError. Các requests bị timeout được retry theo mặc định.

Cấu hình Retry

SDK retry các connection errors, timeouts và các responses có status 408, 409, 429 hoặc từ 500 trở lên. Theo mặc định, SDK retry hai lần với exponential backoff ngắn. Đặt max_retries trên client hoặc trên một request duy nhất:

Các thao tác phổ biến

Các ví dụ trong phần này sử dụng client dodo_payments từ Quick Start.

Tạo một Checkout Session

Tạo một checkout session, sau đó redirect customer đến checkout_url được trả về:
Mỗi checkout URL chỉ hoạt động một lần và hết hạn sau 24 giờ. Để xem mọi tùy chọn của session, hãy xem Checkout Sessions.

Quản lý Customers

Tạo một customer với email address và name, sau đó retrieve customer bằng ID:

Xử lý Subscriptions

Tạo một subscription, charge một on-demand subscription và cập nhật metadata của subscription.
POST /subscriptions (method subscriptions.create của SDK) đã deprecated. Method này vẫn hoạt động với các integrations hiện có, nhưng các integrations mới nên tạo subscriptions thông qua một Checkout Session.
billing chỉ yêu cầu country, là mã quốc gia ISO gồm hai chữ cái. customer nhận { customer_id: "..." } để gắn một customer hiện có hoặc { email: "...", name: "..." } để tạo một customer mới. charge dành cho on-demand subscriptions, còn product_price được tính theo đơn vị nhỏ nhất của currency.

Phân trang

Phân trang tự động

Các list methods trả về một page. Đọc items để lấy page hiện tại hoặc gọi auto_paging_each để duyệt qua mọi item. Method này sẽ fetch trang tiếp theo khi cần:

Phân trang thủ công

Để chuyển từng page một, hãy gọi next_page? và next_page:

Xử lý lỗi

Khi SDK không thể kết nối đến API hoặc API trả về status 4xx hoặc 5xx, SDK sẽ raise một subclass của Dodopayments::Errors::APIError:
Error class phụ thuộc vào nguyên nhân. Mỗi error có các attributes status, headers và body:
SDK đã retry các responses 429 bằng exponential backoff. Một RateLimitError cho biết các retries đó cũng thất bại, vì vậy hãy chờ lâu hơn trước khi gửi lại request.

Type Safety với Sorbet

SDK cung cấp các định nghĩa RBI và không phụ thuộc vào sorbet-runtime. Để kiểm tra kiểu của các request parameters, hãy truyền model classes thay vì hashes:

Sử dụng nâng cao

Undocumented Endpoints

Để gọi một endpoint chưa có SDK method, hãy sử dụng request. Method này áp dụng cùng authentication và retries như các SDK methods:

Undocumented Parameters

Để gửi các parameters mà SDK không định nghĩa, hãy truyền chúng trong request_options. Một parameter extra_* có cùng name với parameter đã được document sẽ override parameter đó:

Tích hợp Rails

Tạo Initializer

Tạo một client khi Rails khởi động, trong config/initializers/dodo_payments.rb:

Mẫu Service Object

Bọc client trong một service object:

Tích hợp Controller

Gọi service từ controller và redirect đến checkout page:

Tích hợp Sinatra

Tạo client một lần trong block configure và sử dụng nó trong các routes:

Tài nguyên

GitHub Repository

Source code, releases và danh sách đầy đủ các methods.

API Reference

Mọi endpoint, parameter và response.

Discord Community

Đặt câu hỏi và trao đổi với các developers khác.

Report Issues

Báo cáo bugs hoặc yêu cầu features.

Hỗ trợ

Để được trợ giúp về Ruby SDK:

Đóng góp

Để đóng góp, hãy đọc hướng dẫn đóng góp.
Lần sửa đổi cuối 26 tháng 9, 2026