安装
使用包管理器安装dodopayments 包:
快速开始
创建客户端,然后创建结账会话:bearerToken,客户端会读取 DODO_PAYMENTS_API_KEY 环境变量。如果省略 environment,客户端会连接到 live mode。test mode API key 仅适用于 environment: 'test_mode'。
核心功能
TypeScript First
编辑器中会显示每个请求参数和响应字段的类型定义。
Auto-Pagination
使用
for await...of 进行迭代时,List 方法会为你获取下一页。Error Handling
每个 HTTP error status 都有对应的类型化错误类,其中包含 status、headers 和 response body。
Smart Retries
对于 connection errors 和可重试的 status codes,默认重试两次,并使用 exponential backoff。
配置
环境变量
将 API key 存储在环境变量中:.env
如果设置了 base URL,同时又传入
environment,构造函数会抛出 “Ambiguous URL” 错误。在这种情况下要使用 environment,请传入 baseURL: null。
要验证 webhook,请将原始请求 body 和 headers 传入 client.webhooks.unwrap(rawBody, { headers })。它会使用你的 webhook key 检查签名,并返回解析后的 event。client.webhooks.unsafeUnwrap(rawBody) 会在不验证的情况下解析 body,因此只能用于测试。请参阅 Webhooks。
超时配置
请求默认在 1 分钟后超时。在客户端或单个请求上以毫秒为单位设置timeout:
APIConnectionTimeoutError。超时的请求会重试,因此调用失败前可能需要比 timeout 更长的时间。
重试配置
在客户端或单个请求上设置maxRetries:
DodoPayments.APIError 的子类。每个错误都有 status、headers 和 error 属性(后者为 response body)。使用 instanceof 检查特定类,例如 err instanceof DodoPayments.RateLimitError:
常见操作
本节中的示例使用 快速开始 中的client。
创建结账会话
创建结账会话,然后将客户重定向到返回的checkout_url:
checkout_url 只能使用一次,并会在 24 小时后过期。有关每个会话选项,请参阅 Checkout Sessions。
管理客户
使用 email address 和 name 创建客户,然后通过 ID 获取该客户:处理订阅
创建订阅、为按需订阅收费,并读取订阅的用量历史记录。基于用量的计费
摄取用量事件
为客户发送用量事件:event_id 是幂等键,因此应为每个事件提供唯一值。如果同一个 event_id 在单个请求中出现两次,整个请求都会被拒绝。如果某个 event_id 已经被摄取,则会忽略新事件。单个请求最多接受 1,000 个事件。timestamp 默认为当前时间;如果其早于当前时间超过 1 小时,或晚于当前时间超过 5 分钟,则会被拒绝。获取用量事件
通过event_id 获取单个事件,或按 customer、event name 和 time range 筛选事件列表:
usageEvents.list 还接受 meter_id,并返回分页列表。
Proxy 配置
要通过 proxy 发送请求,请将运行时的 proxy settings 传入fetchOptions。
Node.js(使用 Undici)
传入 undiciProxyAgent 作为 dispatcher:
Bun
设置proxy 选项:
Deno
使用Deno.createHttpClient 创建 HTTP client,并将其作为 client 传入:
日志记录
使用logLevel client option 或 DODO_PAYMENTS_LOG environment variable 设置 log level。client option 会覆盖 environment variable。
'debug':Debug messages、info、warnings 和 errors。'info':Info messages、warnings 和 errors。'warn':Warnings 和 errors。这是默认级别。'error':仅 errors。'off':不记录日志。
console。要使用 pino、winston 或其他 logging library,请将 logger 作为 logger option 传入;logLevel 仍控制哪些 messages 会传递给它。日志 messages 仅用于调试,其格式可能在不同版本之间发生变化。
从 Node.js SDK 迁移
如果你使用旧版 Node.js SDK,请按照迁移指南进行升级。当前 SDK 使用内置的fetch API,而不是 node-fetch;它需要 Node.js 20、TypeScript 4.9 和 Jest 28 或更高版本,并包含一个可更新大部分代码的迁移工具。
View Migration Guide
了解如何从 Node.js SDK 迁移到 TypeScript SDK
自动分页
List methods 返回分页结果。使用for await...of 进行迭代,以获取每一页中的项目。SDK 会在需要时请求下一页:
page.items,并调用 hasNextPage() 和 getNextPage():
page_size 传入 list method,例如 client.payments.list({ page_size: 50 })。
要求
SDK 支持 TypeScript 4.9 或更高版本,以及以下运行时:- Web browsers(最新版本的 Chrome、Firefox、Safari、Edge 及其他浏览器)
- Node.js 20 LTS 或更高版本(non-EOL)
- Deno 1.28.0 或更高版本
- Bun 1.0 或更高版本
- Cloudflare Workers
- Vercel Edge Runtime
- Jest 28 或更高版本,并使用
"node"environment(不支持"jsdom"environment) - Nitro 2.6 或更高版本
资源
GitHub Repository
源代码、发行版本和完整的方法列表。
API Reference
每个 endpoint、parameter 和 response。
Discord Community
提出问题并与其他开发者交流。
Report Issues
报告 bug 或请求功能。
支持
如需 TypeScript SDK 方面的帮助:- Discord:加入社区服务器获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在代码仓库中提交 issue。