Optional 表示可能缺失的字段,Stream 用于遍历结果,CompletableFuture 用于异步调用。
安装
Maven
将依赖添加到您的pom.xml:
pom.xml
Gradle
将依赖项添加到你的build.gradle.kts:
build.gradle.kts
SDK 要求 Java 8 或更高版本,因此也可在 Java 11、17 和 21 上运行。
快速开始
创建一个客户端,然后创建 checkout session:fromEnv() 连接到 live mode,除非 DODO_PAYMENTS_BASE_URL 或 dodopayments.baseUrl 另有说明。要使用 test mode,请参阅 Test Mode。test mode API key 只能在 test mode 中使用。
核心功能
Type Safety
提供类型化的 request 和 response 类,以便在编译时进行检查。
Shared Client
创建一个客户端并在多个请求之间重复使用:它会持有 connection pool 和 thread pools。Request 和 response 对象不可变。
Builder Pattern
每个 request 类都有一个 builder,
toBuilder() 会创建其修改后的副本。Async Support
client.async() 返回一个客户端,其方法会返回 CompletableFuture。配置
环境变量
fromEnv() 会读取以下环境变量或对应的系统属性。系统属性优先:
.env
DODO_PAYMENTS_API_KEY 或 dodopayments.apiKey。webhook signing secret 来自 DODO_PAYMENTS_WEBHOOK_KEY 或 dodopayments.webhookKey,base URL 来自 DODO_PAYMENTS_BASE_URL 或 dodopayments.baseUrl。请创建一个客户端并重复使用,因为每个客户端都有自己的 connection pool 和 thread pools。
要验证 webhook,请将原始 request body 和 headers 传递给 client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()),其中 headers 是一个 com.dodopayments.api.core.http.Headers。它会使用你的 webhook key 检查签名并返回解析后的 event,否则抛出 DodoPaymentsWebhookException。没有 headers 时,unwrap 不会验证签名。client.webhooks().unsafeUnwrap(rawBody) 会在不验证签名的情况下解析 body,因此只能将其用于测试。请参阅 Webhooks。
手动配置
在 builder 上设置每个选项:RequestOptions.builder().timeout(Duration.ofSeconds(30)).build() 作为 method 的第二个参数传入。responseValidation(true) 会预先检查整个 response 是否符合预期类型。如果不使用它,SDK 只有在你读取类型异常的 property 时才会抛出 DodoPaymentsInvalidDataException。
Test Mode
要使用 test mode(https://test.dodopayments.com),请在 builder 上调用 testMode():
常见操作
本节中的示例使用 Quick Start 中的client。
创建 Checkout Session
创建 checkout session,然后将客户重定向到返回的 checkout URL:checkoutUrl() 返回一个 Optional<String>。每个 checkout URL 只能使用一次,并会在 24 小时后过期。有关每个 session 选项的信息,请参阅 Checkout Sessions。
管理 Customers
使用 email address、name 和 metadata 创建 customer,然后通过 ID 检索它:处理 Subscriptions
使用 payment link 创建 subscription,然后在其为 on-demand subscription 时对其收费。productPrice 使用货币的最小单位表示,例如 USD 的 cents 或 INR 的 paise。要收取 $25.00,请传入 2500。基于用量的计费
配置 Meters
创建一个用于统计 events 的 meter,然后列出你的 meters。autoPager() 会遍历每个 meter,并在需要时获取更多页面:
写入 Usage Events
为 customer 发送 usage event。Event metadata 的值是JsonValue 对象:
eventId 是幂等键,因此请为每个 event 提供唯一值。时间早于当前时间 1 小时以上或晚于当前时间 5 分钟以上的 timestamp 会被拒绝。
批量写入 Events
在一个 request 中发送最多 1,000 个 events。本示例使用前一个示例中的 imports:错误处理
SDK 会抛出 unchecked exceptions。对于错误状态,它会抛出DodoPaymentsServiceException 的子类,该类包含 statusCode()、headers() 和 body()。请在捕获 base class 之前,先捕获你希望处理的特定 classes:
UnexpectedStatusCodeException。网络故障会抛出 DodoPaymentsIoException,SDK 无法解释的 responses 会抛出 DodoPaymentsInvalidDataException。所有这些都继承自 DodoPaymentsException。
异步操作
在客户端上调用async() 以获取异步客户端。其 methods 会返回 CompletableFuture:
DodoPaymentsOkHttpClientAsync.fromEnv()。
Spring Boot 集成
配置类
将一个客户端注册为 bean,并通过 property 选择环境:服务层
将客户端注入 service:资源
GitHub Repository
源代码、版本发布信息和完整的 method 列表。
API Reference
每个 endpoint、parameter 和 response。
Discord Community
提出问题并与其他开发者交流。
Report Issues
报告 bugs 或请求功能。
支持
如需 Java SDK 帮助:- Discord:加入 community server 获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在 repository 中提交 issue。