DodoPayments 和异步客户端 AsyncDodoPayments,二者都基于 httpx 构建。嵌套请求参数使用类型化字典,响应则使用 Pydantic 模型。
安装
使用 pip 安装 SDK:aiohttp extra:
client.webhooks.unwrap() 验证 webhook 签名,还需安装 webhooks extra:pip install "dodopayments[webhooks]"。
SDK 要求 Python 3.9 或更高版本。请使用最新的稳定版 Python,以获取安全更新。
快速开始
同步客户端
创建客户端,然后创建一个结账会话:bearer_token,客户端会读取 DODO_PAYMENTS_API_KEY 环境变量。如果省略 environment,客户端会连接到 live mode。test mode API key 仅适用于 environment="test_mode"。
异步客户端
AsyncDodoPayments 与 DodoPayments 具有相同的方法。请等待每次调用完成:
核心功能
Pythonic Interface
参数使用关键字参数,嵌套对象使用
TypedDict 类型,响应使用 Pydantic 模型。Async/Await
用于 asyncio 的
AsyncDodoPayments,并将 aiohttp 作为可选 HTTP 后端。Type Hints
每个方法都提供类型提示,支持编辑器自动补全以及使用 mypy 进行类型检查。
Auto-Pagination
列表方法返回迭代器,循环时会获取下一页。
配置
环境变量
将 API key 存储在环境变量中:.env
如果已设置
DODO_PAYMENTS_BASE_URL,同时又传入 environment,构造函数会引发“Ambiguous URL”错误。在这种情况下,如需使用 environment,请传入 base_url=None。
要验证 webhook,请将原始请求正文和 headers 传递给 client.webhooks.unwrap(payload, headers=headers)。它会使用 webhook key 检查签名,并返回解析后的事件。client.webhooks.unsafe_unwrap(payload) 会在不验证的情况下解析正文,因此只能用于测试。请参阅 Webhooks。
超时
请求默认在 1 分钟后超时,连接超时为 5 秒。请以秒为单位传入timeout,或传入 httpx.Timeout,分别设置读取、写入和连接限制:
APITimeoutError。超时的请求会自动重试,因此调用失败前可能需要经过比 timeout 更长的时间。
重试
在客户端上设置max_retries,或使用 with_options() 对单个请求进行设置:
dodopayments.APIError 的子类:
状态异常继承自
dodopayments.APIStatusError,该类包含 status_code 和 response 属性。APITimeoutError 是 APIConnectionError 的子类。
常见操作
本节示例使用快速开始中的client。
创建结账会话
创建结账会话,然后将客户重定向到返回的checkout_url:
checkout_url 只能使用一次,并会在 24 小时后过期。有关每个会话选项,请参阅结账会话。
管理客户
使用电子邮件地址和姓名创建客户,然后通过 ID 获取该客户:处理订阅
创建订阅、收取按需订阅的费用,并读取订阅的用量历史记录。基于用量的计费
接收用量事件
为客户发送用量事件:event_id 是幂等键,因此请为每个事件提供唯一值。如果同一个 event_id 在一次请求中出现两次,整个请求都会被拒绝。如果某个 event_id 已被接收,新事件会被忽略。单个请求最多接受 1,000 个事件。timestamp 默认为当前时间;如果时间早于当前时间超过 1 小时,或晚于当前时间超过 5 分钟,则会被拒绝。列出和获取事件
通过event_id 获取单个事件,或按客户和事件名称筛选事件列表:
usage_events.list 还接受 meter_id、start 和 end 筛选条件。
分页
自动分页
列表方法返回一个迭代器,循环时会获取下一页:异步分页
使用异步客户端时,请使用async for 进行循环:
手动分页
如需一次处理一页,请读取items,并调用 has_next_page() 和 get_next_page()。next_page_info() 会返回下一次请求所需的参数:
HTTP 客户端配置
要添加 proxy、自定义 transport 或其他httpx 设置,请传入自定义的 http_client。DefaultHttpxClient 会保留 SDK 默认的连接限制、超时和重定向设置:
client.with_options(http_client=...)。
使用 AIOHTTP 的异步客户端
默认情况下,异步客户端使用httpx 发送请求。要获得更好的并发性能,请安装 aiohttp extra,并将 DefaultAioHttpClient() 作为 http_client 传入:
日志记录
SDK 使用标准库的logging 模块记录日志。要启用日志记录,请将 DODO_PAYMENTS_LOG 设置为 info:
debug:
框架集成
这些示例会从 web endpoint 创建结账会话,并返回其 URL。FastAPI
此 endpoint 使用异步客户端:Django
此 view 使用同步客户端:资源
GitHub Repository
源代码、版本发布信息和完整的方法列表。
API Reference
每个 endpoint、参数和响应。
Discord Community
提出问题并与其他开发者交流。
Report Issues
报告 bug 或请求新功能。
支持
如需 Python SDK 方面的帮助:- Discord:加入 community server 获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在 repository 中提交 issue。