Sequence 遍历结果,并使用 suspend 函数执行异步调用。
安装
Gradle (Kotlin DSL)
在你的build.gradle.kts 中添加依赖:
build.gradle.kts
Maven
在你的pom.xml 中添加依赖:
pom.xml
SDK 要求 Java 8 或更高版本。它可以在 JVM 和 Android 上运行,并附带 ProGuard 和 R8 keep 规则。
快速开始
创建客户端,然后创建结账会话:fromEnv() 默认连接到 live mode,除非 DODO_PAYMENTS_BASE_URL 或 dodopayments.baseUrl 另有说明。要使用 test mode,请参阅 Test Mode。test mode API key 只能在 test mode 中使用。
核心功能
Coroutines
Null Safety
Sequences
Immutable Models
配置
从环境变量配置
fromEnv() 从环境变量或系统属性读取设置。系统属性优先:
DODO_PAYMENTS_API_KEY 或 dodopayments.apiKey。Webhook signing secret 来自 DODO_PAYMENTS_WEBHOOK_KEY 或 dodopayments.webhookKey,base URL 来自 DODO_PAYMENTS_BASE_URL 或 dodopayments.baseUrl。请创建一个客户端并重复使用,因为每个客户端都有自己的连接池和线程池。
要验证 webhook,请将原始请求正文和请求头传递给 client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()),其中 headers 是一个 com.dodopayments.api.core.http.Headers。它会使用你的 webhook key 检查签名,并返回解析后的事件;验证失败时会抛出 DodoPaymentsWebhookException。如果不提供请求头,unwrap 不会验证签名。client.webhooks().unsafeUnwrap(rawBody) 会在不验证签名的情况下解析正文,因此只能用于测试。请参阅 Webhooks。
手动配置
在构建器上设置每个选项:Test Mode
要使用 test mode(https://test.dodopayments.com),请在构建器上调用 testMode():
超时和重试
默认情况下,客户端会重试两次,并在 1 分钟后超时。对于连接错误以及状态为 408、409、429 或 500 及以上的响应,客户端会使用指数退避进行重试。在客户端上设置默认值,或将RequestOptions 传递给单次调用:
常见操作
本节中的示例使用 Quick Start 中的client。
创建结账会话
创建结账会话,然后将客户重定向到返回的结账 URL:checkoutUrl() 返回一个可空的 String?。每个结账 URL 只能使用一次,并会在 24 小时后过期。有关每个会话选项,请参阅 Checkout Sessions。
创建产品
创建一个价格为 $29.99 的月度订阅产品:price 以货币的最小单位表示。discountBps 以基点设置折扣,并替代已弃用的 discount 字段。
激活 License Key
为设备或安装激活 License Key。如果该密钥已达到激活次数限制,API 会返回422,SDK 会抛出 UnprocessableEntityException。未激活的密钥会返回 403(PermissionDeniedException),未知密钥会返回 404(NotFoundException):
处理订阅
创建订阅;如果是按需订阅,则对其收费。billing 只需要 country,即两个字母的 ISO 国家代码。使用 AttachExistingCustomer 关联现有客户,或使用 NewCustomer 创建客户。charge 用于按需订阅,productPrice 以货币的最小单位表示。基于用量的计费
记录用量事件
向客户发送用量事件。跟踪该事件的eventName 会对其进行聚合:
eventId 是幂等键,因此请为每个事件提供唯一值。每个请求最多接受 1,000 个事件。
异步操作
异步客户端
异步客户端与同步客户端具有相同的方法,但其中大多数是suspend 函数。请从协程中调用它们:
client.async(),以获取其异步版本。
错误处理
对于错误状态,SDK 会抛出DodoPaymentsServiceException 的子类,该类包含 statusCode()、headers() 和 body()。其子类包括 BadRequestException(400)、UnauthorizedException(401)、PermissionDeniedException(403)、NotFoundException(404)、UnprocessableEntityException(422)、RateLimitException(429)、InternalServerException(5xx),以及用于其他状态(例如 409)的 UnexpectedStatusCodeException:
DodoPaymentsIoException,SDK 无法解析的响应会抛出 DodoPaymentsInvalidDataException。所有 SDK 异常都继承自 DodoPaymentsException。
函数式错误处理
使用Result 进行函数式错误处理:
Android 集成
Kotlin SDK 是一个服务器端 SDK。它使用你的 secret API key 进行身份验证,任何拥有你的 APK 的人都可以提取其中编译的密钥,因此绝不要在 Android 应用中使用它。 要在 Android 应用中收款:- 在你的服务器上,使用此 SDK 创建 checkout session(参见 Ktor 集成),并返回其
checkout_url。 - 在应用中,从你的服务器获取该
checkout_url,并使用不包含 API key 的 Android SDK 打开它。
响应验证
默认情况下,SDK 仅会在你读取类型异常的属性时抛出DodoPaymentsInvalidDataException。若要预先检查整个响应,请为请求启用验证,或在响应上调用 validate():
高级功能
代理配置
要通过代理发送请求,请将java.net.Proxy 传递给 builder:
临时配置
withOptions 会返回一个设置经过修改的客户端,该客户端与原始客户端共享连接池和线程池。原始客户端不会发生变化:
Ktor 集成
创建一次客户端,然后从路由中调用它:资源
GitHub Repository
API Reference
Discord Community
Report Issues
支持
如需 Kotlin SDK 方面的帮助:- Discord:加入社区服务器获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在代码仓库中提交 issue。