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
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: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".
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. Đặttimeout, tính bằng giây, trên client hoặc trên một request duy nhất:
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. Đặtmax_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 clientdodo_payments từ Quick Start.
Tạo một Checkout Session
Tạo một checkout session, sau đó redirect customer đếncheckout_url được trả về:
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.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. Đọcitems để 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ọinext_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ủaDodopayments::Errors::APIError:
status, headers và body:
Type Safety với Sorbet
SDK cung cấp các định nghĩa RBI và không phụ thuộc vàosorbet-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ụngrequest. 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 trongrequest_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, trongconfig/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 blockconfigure 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:- Discord: Tham gia community server để nhận hỗ trợ theo thời gian thực.
- Email: Liên hệ support@dodopayments.com.
- GitHub: Mở issue trên repository.