Skip to main content
这是官方的 Dodo Payments Swift iOS 结账 SDK。它会在原生浏览器视图中打开 Dodo 托管的结账页面,并返回类型化结果。

Checkout Sessions API

从你的 backend 创建此 SDK 打开的 checkout_url。

Mobile Integration Guide

了解它如何融入完整的移动端支付流程。
iOS SDK 会在 SFSafariViewController 中打开 Dodo 托管的结账页面,不持有 API key,也不会直接调用 Dodo API。所有结账逻辑都在浏览器中运行;SDK 只负责管理视图生命周期并捕获返回 URL。 需要 iOS 16+ 和 Swift 6。

安装

1

Add the Package

在 Xcode 中,前往 File → Add Package Dependencies 并输入:
选择 1.0.0 或更高版本。或者,将其添加到你的 Package.swift
Package.swift
2

Register a Callback URL Scheme

你的应用必须注册 URL scheme,以接收结账页面返回的 URL。将以下内容添加到你的 Info.plist
Info.plist
你也可以通过 Xcode 的 Info → URL Types UI 添加此配置。

使用

转发返回 URL

SFSafariViewController 没有在进程内捕获自身返回 URL 的方式。你的应用必须将传入的 URL 转发到 SDK。
在此处转发每个 URL 都是安全的。handleOpenURL 只会处理与已注册 returnUrl 匹配的 URL,对于其他 URL 则返回 false

结果含义

result.status 是 UI 提示,而不是付款证明。必须通过 payment.succeeded / subscription.active webhook 从你的 backend 确认每笔付款。
CheckoutStatus
必填
以下值之一:succeededfailedcancelledpendingexpired
String?
当返回 URL 中包含该值时设置。将其显示在 UI 中,不要使用它来授予访问权限。请参阅下方的“验证付款”。
String?
适用于订阅结账。
[String]?
当结账包含许可证密钥产品时设置。
String?
当结账收集电子邮件时设置。
[String: String]
返回 URL 中的每个 query parameter,逐字保留。

验证付款

Webhooks

付款成功或订阅激活时,Dodo Payments 会调用你的 backend。

Get Payment Detail

使用你的 secret key 查询 paymentId,直接检查其状态。
只有在这些方式之一确认付款后才能授予访问权限,绝不能仅凭 result.status 授予权限。

错误

start 仅会在使用错误或平台故障时抛出 CheckoutError。已取消或被拒绝的付款始终作为结果返回,而不是异常。
  • invalidCheckoutUrlINVALID_CHECKOUT_URL):不是 checkout.dodopayments.com session URL。
  • invalidReturnUrlINVALID_RETURN_URL):不是有效的绝对 URL。
  • alreadyInProgressALREADY_IN_PROGRESS):结账已在运行。
  • platformErrorPLATFORM_ERROR):意外的平台故障。

已放弃的会话

如果应用在结账过程中被终止,请在下次启动时恢复该 session,并将其与 backend 对账。

相关内容

Mobile Integration Guide

Android、React Native 和 Flutter 使用相同的契约。

React Native SDK

在 iOS 上封装相同的 Swift 核心。
最后修改于 2026年7月31日