net/http 和连接池发送请求,重试失败的请求,为你遍历分页列表,并提供 RBI 和 RBS 类型定义。
安装
将 gem 添加到您的 Gemfile:Gemfile
SDK 要求 Ruby 3.2.0 或更高版本。
快速开始
创建一个 client,然后创建一个 checkout session:bearer_token,client 会读取 DODO_PAYMENTS_API_KEY 环境变量。如果省略 environment,client 会连接到 live mode。test mode API key 只能与 environment: "test_mode" 配合使用。
核心功能
Ruby Conventions
使用 snake_case 方法和关键字参数,嵌套参数也接受普通 hash。
Elegant Syntax
Responses 是带有 attribute readers 的对象,
obj[:prop] 还可以读取 SDK 未定义的字段。Auto-Pagination
auto_paging_each 会遍历每个 item,并在需要时获取下一页。Type Safety
用于 Sorbet 的 RBI 定义,不依赖
sorbet-runtime。配置
Dodopayments::Client.new 接受 bearer_token、webhook_key、environment、base_url、max_retries、timeout、initial_retry_delay 和 max_retry_delay。省略这些参数时,它会从环境中读取 DODO_PAYMENTS_API_KEY、DODO_PAYMENTS_WEBHOOK_KEY(你的 webhook signing secret)和 DODO_PAYMENTS_BASE_URL。client 是 thread-safe 的,并维护自己的连接池,因此请为应用创建一个 client 并重复使用它。
要验证 webhook,请将原始请求 body 和 headers 传递给 dodo_payments.webhooks.unwrap(payload, headers: headers)。它会使用你的 webhook key 检查 signature,并返回解析后的 event。dodo_payments.webhooks.unsafe_unwrap(payload) 会在不验证的情况下解析 body,因此只能用于测试。请参阅 Webhooks。
Timeout 配置
Requests 默认在 60 秒后超时。在 client 或单个 request 上以秒为单位设置timeout:
Dodopayments::Errors::APITimeoutError。超时的 requests 默认会重试。
Retry 配置
SDK 会重试 connection errors、timeouts,以及 status 为 408、409、429 或 500 及以上的 responses。默认重试两次,并采用短暂的 exponential backoff。在 client 或单个 request 上设置max_retries:
常见操作
本节中的示例使用 Quick Start 中的dodo_payments client。
创建 Checkout Session
创建一个 checkout session,然后将 customer 重定向到返回的checkout_url:
管理 Customers
使用 email address 和 name 创建一个 customer,然后通过 ID 获取它:处理 Subscriptions
创建 subscription、为 on-demand subscription 收费,以及更新 subscription 的 metadata。billing 只需要 country,即两位字母的 ISO country code。customer 接受 { customer_id: "..." } 以关联现有 customer,或接受 { email: "...", name: "..." } 以创建 customer。charge 用于 on-demand subscriptions,而 product_price 使用最小货币单位表示。分页
自动分页
List methods 会返回一页数据。读取items 获取当前页,或调用 auto_paging_each 遍历每个 item。它会在需要时获取下一页:
手动分页
如需逐页移动,请调用next_page? 和 next_page:
错误处理
当 SDK 无法连接到 API,或 API 返回 4xx 或 5xx status 时,SDK 会抛出Dodopayments::Errors::APIError 的子类:
status、headers 和 body attributes:
使用 Sorbet 确保类型安全
SDK 提供 RBI 定义,并不依赖sorbet-runtime。要对 request parameters 进行类型检查,请传递 model classes,而不是 hashes:
高级用法
未文档化的 Endpoints
要调用没有 SDK method 的 endpoint,请使用request。它会应用与 SDK methods 相同的 authentication 和 retries:
未文档化的 Parameters
要发送 SDK 未定义的 parameters,请将它们传入request_options。名称与已文档化 parameter 相同的 extra_* parameter 会覆盖该 parameter:
Rails 集成
创建 Initializer
在 Rails 启动时,于config/initializers/dodo_payments.rb 中创建一个 client:
Service Object 模式
将 client 封装在 service object 中:Controller 集成
从 controller 调用 service,并重定向到 checkout page:Sinatra 集成
在configure block 中创建一次 client,并在 routes 中使用它:
资源
GitHub Repository
源代码、releases 和完整的 method 列表。
API Reference
每个 endpoint、parameter 和 response。
Discord Community
提问并与其他开发者交流。
Report Issues
报告 bugs 或请求 features。
支持
如需 Ruby SDK 帮助:- Discord:加入 community server 获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在 repository 中提交 issue。