概述
内嵌结账让您可以创建与您的网站或应用程序无缝融合的完全集成的结账体验。与在页面顶部弹出模式显示的覆盖结账不同,内嵌结账将支付表单直接嵌入到页面布局中。 使用内嵌结账,您可以:- 创建与您的应用或网站完全集成的结账体验
- 让 Dodo Payments 在优化的结账框中安全捕获客户和支付信息
- 在您的页面上显示来自 Dodo Payments 的商品、总价和其他信息
- 使用 SDK 方法和事件构建高级结账体验

工作原理
内嵌结账通过在您的网站或应用中嵌入一个安全的 Dodo Payments 框架来工作。 结账框负责收集客户信息和捕获支付细节。您的页面显示商品列表、总价和更改选项的选项。SDK 允许您的页面与结账框进行交互。 Dodo Payments 在结账完成后自动创建一个订阅,供您配置。什么是好的内嵌结账?
客户知道他们在从谁那里购买,购买的是什么,以及支付的金额是很重要的。 为了构建符合规范并优化转化率的内嵌结账,您的实现必须包括:
Example inline checkout layout showing required elements
- 循环信息:如果是循环,说明它的频率及续订支付总额。如果是试用,说明试用持续时间。
- 商品描述:对所购买商品的描述。
- 交易总额:交易总额,包括小计、总税款及总额。请务必包括货币。
- Dodo Payments 页脚:完整的内嵌结账框架,包括结账页脚,包含有关 Dodo Payments、销售条款和隐私政策的信息。
- 退款政策:如果与 Dodo Payments 标准退款政策不同,请提供您的退款政策链接。
客户旅程
结账流程由您的结账会话配置决定。根据您如何配置结账会话,客户可能会在单页或多个步骤中看到所有信息。Customer opens checkout

Customer enters their details
Customer selects payment method

Checkout completed

Dodo Payments creates subscription

快速开始
只需几行代码即可开始使用 Dodo Payments 内嵌结账:分步集成指南
Install the SDK
Initialize the SDK for Inline Display
displayType: 'inline'。您还应该监听 checkout.breakdown 事件,以实时更新您的用户界面和税款总额计算。Create a Container Element
Open the Checkout
DodoPayments.Checkout.open(),使用您的容器的 checkoutUrl 和 elementId:Test Your Integration
- 启动开发服务器:
- 测试结账流程:
- 在内嵌框中输入您的电子邮件和地址详细信息。
- 验证您的自定义订单摘要是否实时更新。
- 使用测试凭证测试支付流程。
- 确保重定向正常工作。
onEvent 回调中添加了控制台日志,您应该会在浏览器控制台中看到 checkout.breakdown 事件记录。Go Live
- 将模式更改为
'live':
- 更新您的结账 URL,以使用来自后端的实时结账会话。
- 在生产环境中测试完整流程。
完整 React 示例
此示例演示如何实现自定义订单摘要,以及使用checkout.breakdown 事件保持与内嵌结账同步。
API 参考
配置
初始化选项
结账选项
方法
打开结账
在指定的容器中打开结账框。关闭结账
以编程方式移除结账框并清理事件监听器。检查状态
返回结账框当前是否已注入。事件
SDK 通过onEvent 回调提供实时事件。对于内嵌结账,checkout.breakdown 特别有助于同步您的用户界面。
结账细目数据
checkout.breakdown 事件提供以下数据:
理解细目事件
checkout.breakdown 事件是保持应用程序的用户界面与 Dodo Payments 结账状态同步的主要方式。
触发时机:
- 初始化时:结账框加载并准备就绪后立即。
- 地址更改时:每当客户选择国家或输入导致税款重新计算的邮政编码时。
- 货币格式化:价格始终以最小货币单位(例如,美分为美元,日圆为日元)整数形式返回。要显示它们,请除以 100(或适当的 10 的幂)或使用类似
Intl.NumberFormat的格式化库。 - 处理初始状态:当结账首次加载时,
tax和discount可能是0或null,直到用户提供其账单信息或应用代码。您的用户界面应优雅地处理这些状态(例如,显示破折号—或隐藏行)。 - “最终总额” 与 “总额”:虽然
total为您提供标准价格计算,但finalTotal是交易的真实来源。如果存在finalTotal,它准确地反映了将向客户卡收取的费用,包括任何动态调整。 - 实时反馈:使用
tax字段向用户展示税款正在实时计算。这为结账页面带来“实时”感受,并减少在输入地址步骤中的摩擦。
实施选项
包管理器安装
如 分步集成指南 中所示,通过 npm、yarn 或 pnpm 安装。CDN 实现
若无需构建步骤即可进行快速集成,您可以使用我们的 CDN:更新支付方法
内嵌结账支持订阅的支付方法更新。当客户需要更新其支付方法时——无论是用于激活订阅还是重新激活暂停中的订阅——您可以在页面布局中直接呈现更新流程。工作原理
- 调用 更新支付方法 API 以获取
payment_link:
- 将返回的
payment_link作为checkoutUrl传递以打开内嵌结账:
针对暂停的订阅
为处于on_hold 状态的订阅更新支付方法时,Dodo Payments 会自动为任何剩余欠款创建一笔交易。监控 payment.succeeded 和 subscription.active webhook 以确认重新激活。
错误处理
SDK 通过事件系统提供详细的错误信息。始终在您的onEvent 回调中实现正确的错误处理:
最佳实践
- 响应式设计:确保您的容器元素有足够的宽度和高度。iframe 通常会扩展以填满它的容器。
- 同步:使用
checkout.breakdown事件保持您的自定义订单摘要或价格表与用户在结账框中看到的内容同步。 - 骨架状态:在
checkout.opened事件触发前,在您的容器中显示加载指示器。 - 清理:当您的组件卸载时,调用
DodoPayments.Checkout.close(),以清理 iframe 和事件监听器。
#0d0d0d 作为背景色,以便与内嵌结账框架实现最佳视觉集成。支付状态验证
为什么服务器端验证至关重要
虽然内嵌结账事件提供实时反馈,但它们不应该是您支付状态的唯一信息来源。网络问题、浏览器崩溃或用户关闭页面可能导致事件丢失。为了确保可靠的支付验证:- 您的服务器应监听 webhook 事件——Dodo Payments 发送支付状态更改的 webhooks
- 实现轮询机制——您的前端应轮询服务器以获取状态更新
- 结合两种方法——使用 webhooks 作为主要来源,并以轮询作为备份
推荐架构
实施步骤
1. 监听结账事件——当用户点击支付时,开始准备验证状态:payment.succeeded 或 payment.failed webhooks 时更新您的数据库。查看我们的 Webhooks 文档 了解详细信息。
故障排除
Checkout frame is not appearing
Checkout frame is not appearing
- 验证
elementId与 DOM 中实际存在的div匹配。 - 确保已将
displayType: 'inline'传递给Initialize。 - 检查
checkoutUrl是否有效。
Taxes are not updating in my UI
Taxes are not updating in my UI
- 确保您正在监听
checkout.breakdown事件。 - 仅在用户在结账框中输入有效国家和邮政编码后计算税款。
启用数字钱包
有关设置 Apple Pay、Google Pay 和其他数字钱包的详细信息,请参阅数字钱包页面。Apple Pay 的快速设置
Open Wallet domains

Open Wallet domains from the Apple Pay row
Download the domain association file

Download the Apple Pay domain association file
Register your domain
shop.example.com),然后继续。
Register the domain where you embed inline checkout
Host the file on your domain
Content-Type: application/octet-stream 或 text/plain 提供。Verify the domain

Verify the hosted association file
Confirm it's active

Verified domains show an Active status
Test the integration
- 在 Apple 设备上打开结账
- 验证 Apple Pay 按钮是否出现
- 完成一次测试交易
浏览器支持
Dodo Payments 结账 SDK 支持以下浏览器:- Chrome(最新)
- Firefox(最新)
- Safari(最新)
- Edge(最新)
- IE11+