context.Context,请求参数使用 Field 包装器,以区分零值和省略的字段;你还可以为每个请求添加中间件。
安装
将模块添加到项目中:SDK 要求 Go 1.22 或更高版本。
快速开始
创建客户端,然后创建结账会话:option.WithBearerToken,NewClient 会读取 DODO_PAYMENTS_API_KEY 环境变量。如果省略 option.WithEnvironmentTestMode(),客户端会连接到 live mode。test mode API key 只能在 test mode 中使用。
核心功能
Context Support
每个方法都接收一个
context.Context,用于取消操作和设置超时。Strong Typing
类型化的请求参数和响应结构体可用于编译时检查。
Middleware
使用
option.WithMiddleware 添加中间件,以实现日志记录、指标采集和自定义逻辑。Goroutine Safe
在多个 goroutine 之间共享同一个客户端。
配置
NewClient 会从环境中读取 DODO_PAYMENTS_API_KEY、DODO_PAYMENTS_WEBHOOK_KEY(你的 webhook signing secret)和 DODO_PAYMENTS_BASE_URL。你传入的选项(例如 option.WithBearerToken、option.WithWebhookKey 和 option.WithBaseURL)会覆盖这些值。
要验证 webhook,请将原始请求正文和 headers 传递给 client.Webhooks.Unwrap(rawBody, r.Header)。它会使用你的 webhook key 检查签名,并返回解析后的事件。client.Webhooks.UnsafeUnwrap(rawBody) 会在不验证的情况下解析正文,因此只能用于测试。请参阅 Webhooks。
本页示例使用 Quick Start 中的 client。
Context 和超时
请求默认不会超时。context deadline 会限制整个调用过程,包括重试。要限制每次尝试的时长,请添加option.WithRequestTimeout():
重试配置
SDK 会重试连接错误,以及状态为 408、409、429 或 500 及以上的响应。默认重试两次,并使用指数退避。请在客户端或单个请求上设置option.WithMaxRetries:
常见操作
本节中的示例同样使用 context,例如ctx := context.Background()。
创建结账会话
创建结账会话,然后将客户重定向到返回的CheckoutURL:
管理客户
使用电子邮件地址和姓名创建客户,然后通过 ID 获取该客户。Metadata 值使用shared 包中的 union types:
处理订阅
创建订阅、为按需订阅收费,并读取订阅的用量历史记录。Billing 只需要 Country,即两个字母的 ISO 国家代码。Customer 是一个 CustomerRequestUnionParam:对于现有客户,请传递 AttachExistingCustomerParam{CustomerID: ...};如需创建客户,请传递 NewCustomerParam{Email: ..., Name: ...}。Charge 用于按需订阅,而 ProductPrice 使用最小货币单位表示金额。GetUsageHistory 返回一页结果;GetUsageHistoryAutoPaging 遍历所有页面。基于用量的计费
摄取用量事件
为客户发送用量事件:EventID 是幂等键,因此请为每个事件提供唯一值。如果同一个 EventID 在一次请求中出现两次,整个请求都会被拒绝。如果某个 EventID 已经被摄取,则会忽略新事件。一次请求最多接受 1,000 个事件。Timestamp 默认为当前时间;如果时间早于当前时间超过 1 小时,或晚于当前时间超过 5 分钟,则会被拒绝。列出用量事件
按客户和事件名称筛选并列出事件:List 返回一页结果。要遍历所有页面,请调用 client.UsageEvents.ListAutoPaging(ctx, params),并使用 iter.Next()、iter.Current() 和 iter.Err() 循环处理。其他 list 方法也有相同的 AutoPaging 变体,并且每个页面都有一个 GetNextPage() 方法。
错误处理
当 API 返回非成功状态码时,SDK 会返回*dodopayments.Error 类型的错误。它包含 StatusCode、*http.Request 和 *http.Response,以及错误正文的 JSON。使用 errors.As 检查错误,并根据 StatusCode 分支来处理特定情况:
*url.Error,其中包装了一个 *net.OpError。apiErr.DumpRequest(true) 返回序列化后的请求。
中间件
使用option.WithMiddleware 添加中间件。中间件会接收每个请求,以及一个用于发送请求的 next 函数:
option.WithMiddleware 调用中传入的多个中间件会从左到右运行。传递给 NewClient 的中间件会先于传递给单个请求的中间件运行。
并发
客户端可安全地并发使用,因此你可以在多个 goroutine 之间共享同一个客户端:资源
GitHub Repository
源代码、版本发布信息和完整的方法列表。
API Reference
每个 endpoint、参数和响应。
Discord Community
提出问题并与其他开发者交流。
Report Issues
报告 bug 或请求新功能。
支持
如需 Go SDK 方面的帮助:- Discord:加入社区服务器获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在代码仓库中提交 issue。