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
Strong Typing
Middleware
Goroutine Safe
配置
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
Discord Community
Report Issues
支持
如需 Go SDK 方面的帮助:- Discord:加入社区服务器获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在代码仓库中提交 issue。