用途:把 Dodo Payments 托管结账集成到原生与跨平台移动应用,使用安全系统浏览器上下文完成支付。适用于 React Native(Turbo Module)、Flutter(原生桥接)、原生 iOS 与 Android,并处理自定义 URL scheme、深链接返回、放弃会话恢复与支付权限确认。
核心原则:后端创建、移动端打开。后端用 client.checkoutSessions.create(...) 创建会话并返回 checkout_url,移动端用平台 SDK 打开该 URL;API key 绝不能嵌入应用二进制。移动 SDK 结果仅供参考,解锁功能前必须通过 webhook 或 API 在服务端验证支付。
流程:后端创建会话并返回 URL;移动端调用平台 SDK 传入结账 URL 与已注册的返回 URL scheme;SDK 在 iOS 用 SFSafariViewController、Android 用 Chrome Custom Tabs 打开;支付后浏览器跳转返回 URL,SDK 捕获结果传给应用;最后查询会话或监听 webhook 确认支付。
服务端验证:监听 payment.succeeded webhook,需校验签名,并用唯一插入认领 webhook-id、在同一事务内授权以避免重复投递;或调用 client.checkoutSessions.retrieve(sessionId),确认 payment_status 为 succeeded 且有 payment_id 后再授权。
iOS 数字商品限制:仅在 Apple 允许外部购买的店面可用,如美国(3.1.1(a))、欧盟(需外部购买授权)、日本(移动软件竞争法);韩国不支持。其他店面须用 Apple 应用内购买。
常见错误:把 API key 嵌入应用;信任移动 SDK 结果;忘记注册 URL scheme 导致回调收不到;未处理 succeeded、failed、cancelled、pending、expired 五种状态;忽略放弃会话(应在启动及每次 cancelled/pending 后对账)。包名:React Native 用 @dodopayments/react-native-checkout,Flutter 用 dodopayments_checkout。详细安装与用法见各平台参考文档。